我有一个问题,我不知道如何在pulp
中添加指标约束。谁能帮我?
例如:我有一个决策变量x[(i,j)]
,LpBinary和连续变量u[i]
当x[(i,j)]
等于1
,然后u[i] + q[j] == u[j]
(q
只是客户的需求)感谢您的帮助。
欢迎来到SO!
我对你的问题的解释是你有二进制变量x[(i,j)]
和连续变量u[i]
。当x[(i,j)]==1
然后你想强制执行约束如下u[i] + q[j] == u[j]
。如果x[(i,j)]==0
然后没有强制执行这样的约束。
这可以按如下方式完成:
for i in set_I:
for j in set_J:
u[j] >= u[i] + q[j] - (1 - x[(i,j)])*M
u[j] <= u[i] + q[j] + (1 - x[(i,j)])*M
其中M
的值比u[i]
值中的最大可能范围大一点+最大可能的q[j]
值。要理解为什么这个工作考虑这两种情况,首先如果x[(i,j)]==1
这些约束成为:
u[j] >= u[i] + q[j]
u[j] <= u[i] + q[j]
其中可以缩写为:u[j] == u[i] + q[j]
,你想要在x[(i,j)]==1
案例中的约束。
在x[(i,j)]==0
案例中,这些限制变为:
u[j] >= u[i] + q[j] - M
u[j] <= u[i] + q[j] + M
回想M是一个很大的数字,我们所说的是u[j] >= some_value - large_number
,它提供了你选择M
,以便它足够大,根本不会产生任何影响(根据需要)。类似地,如果u[j] <= some_value + large_number
足够大,则约束M
没有效果。