如何用int修改LpVariable?

2024-06-12 05:26:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用Python做线性规划。这是我的一个限制条件: 纸浆是第三方包装

from pulp import *

x1 = LpVariable('x1', 1, 5, cat='Integer')
x2 = LpVariable('x2', 2, 6, cat='Integer')

prob += x1 % 3 != x2 % 3

显然,%不支持LpVariable

那么,我能做些什么来解决这个问题呢

提前谢谢


Tags: fromimportinteger条件纸浆pulpcatx1
1条回答
网友
1楼 · 发布于 2024-06-12 05:26:47

您需要手动将其线性化

让我们称3为除数

线性化可能看起来像(未经测试;但基本理论应该可以->;尝试在复制粘贴之前考虑):

Helper-variables
        

add new var quotient_1   : integer-variable in [0, inf)
add new var remainder_1  : integer-variable in [0, divisor - 1]

add new var quotient_2   : integer-variable in [0, inf)
add new var remainder_2  : integer-variable in [0, divisor - 1]

Helper-constraints
         

x1 = quotient_1 * divisor + remainder_1
x2 = quotient_2 * divisor + remainder_2

现在仍然需要对析取进行建模:

Helper-variables
        

add new var disjunction  : boolean-variable

meaning: 
    disjunction = 1 <-> remainder_1 > remainder_2
    disjunction = 0 <-> remainder_2 < remainder_1

Constraints
     -

(1-disjunction) * divisor + remainder_1 >= remainder_2 + 1
disjunction * divisor + remainder_2 >= remainder_1 + 1    

相关问题 更多 >