Optimization 混合整数线性规划;当且仅当;包含非二进制变量的约束
有一个限制Optimization 混合整数线性规划;当且仅当;包含非二进制变量的约束,optimization,linear-programming,mixed-integer-programming,Optimization,Linear Programming,Mixed Integer Programming,有一个限制 c[i]=j iff b[i][j]=1 其中i,j是大于0的整数,b[i][j]是二进制数 你知道如何在线性规划中表达这个约束吗?谢谢大家! 这个问题没有人们想象的那么清楚。最好的答案是:“视情况而定” 看着 c[i]=j iff b[i][j]=1 (1) 单独而言,我们需要实施以下影响: b[i][j]=1 => c[i]=j (2) b[i][j]=0 => c[i]<>j
c[i]=j iff b[i][j]=1
其中i,j是大于0的整数,b[i][j]是二进制数
你知道如何在线性规划中表达这个约束吗?谢谢大家! 这个问题没有人们想象的那么清楚。最好的答案是:“视情况而定” 看着
c[i]=j iff b[i][j]=1 (1)
单独而言,我们需要实施以下影响:
b[i][j]=1 => c[i]=j (2)
b[i][j]=0 => c[i]<>j (3)
b[i][j]=1=>c[i]=j(2)
b[i][j]=0=>c[i]j(3)
(2) 可以使用指标约束实现。第二个(3)更为复杂,因为我们需要执行以下操作:
b[i][j]=0 => c[i]<j or c[i]>j (4)
b[i][j]=0=>c[i]j(4)
这将需要至少一个额外的二进制变量来处理“or”。一种方法是:
b[i][j]=0 => c[i]<=j-1+M⋅δ (5)
b[i][j]=0 => c[i]>=j+1-M⋅(1-δ) (6)
δ ∈ {0,1} (7)
M = card(j) (8)
b[i][j]=0=>c[i]c[i]>=j+1-M⋅(1-δ) (6)
δ ∈ {0,1} (7)
M=卡(j)(8)
M=card(j)
只是一个常数,表示集合j的大小。当然,这不是实现这一目标的唯一途径。注意,我混合使用了指标约束和大M约束。这也可以完全用指标约束(需要额外的二进制变量)或仅用大M约束来表示
虽然我们可以(通过一些努力)实现(3),但很可能我们不需要它。很可能,我们唯一需要的就是暗示(2)。与大多数问题一样,如果不看模型的其余部分,就很难给出好的答案。问题并不像人们想象的那么清楚。最好的答案是:“视情况而定” 看着
c[i]=j iff b[i][j]=1 (1)
单独而言,我们需要实施以下影响:
b[i][j]=1 => c[i]=j (2)
b[i][j]=0 => c[i]<>j (3)
b[i][j]=1=>c[i]=j(2)
b[i][j]=0=>c[i]j(3)
(2) 可以使用指标约束实现。第二个(3)更为复杂,因为我们需要执行以下操作:
b[i][j]=0 => c[i]<j or c[i]>j (4)
b[i][j]=0=>c[i]j(4)
这将需要至少一个额外的二进制变量来处理“or”。一种方法是:
b[i][j]=0 => c[i]<=j-1+M⋅δ (5)
b[i][j]=0 => c[i]>=j+1-M⋅(1-δ) (6)
δ ∈ {0,1} (7)
M = card(j) (8)
b[i][j]=0=>c[i]c[i]>=j+1-M⋅(1-δ) (6)
δ ∈ {0,1} (7)
M=卡(j)(8)
M=card(j)
只是一个常数,表示集合j的大小。当然,这不是实现这一目标的唯一途径。注意,我混合使用了指标约束和大M约束。这也可以完全用指标约束(需要额外的二进制变量)或仅用大M约束来表示
虽然我们可以(通过一些努力)实现(3),但很可能我们不需要它。很可能,我们唯一需要的就是暗示(2)。与大多数问题一样,如果不考虑模型的其余部分,就很难给出好的答案。
i>0和j>0以及c[i]=j和b[i][j]=1
i>0和j>0以及c[i]=j和b[i][j]=1