如何在Pulp Python中添加指标约束?

时间:2019-02-27 06:00:51

标签: python optimization pulp

我有一个问题,我不知道如何在pulp中添加指标约束。谁能帮我吗?
例如:我有一个决策变量x[(i,j)],LpBinary和一个连续变量u[i],当x[(i,j)]等于1时,u[i] + q[j] == u[j]q是只是客户的需求)谢谢您的帮助。

1 个答案:

答案 0 :(得分:0)

欢迎您!

我对您的问题的解释是您有二进制变量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就不会生效。