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

问题描述 投票:0回答:1

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

python optimization pulp
1个回答
0
投票

欢迎来到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没有效果。

© www.soinside.com 2019 - 2024. All rights reserved.