如何使用int修改LpVariable?

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

我正在用Python在纸浆上进行线性编程。这是我的限制之一:纸浆是第三方包装。

from pulp import *

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

prob += x1 % 3 != x2 % 3

显然,%不支持LpVariable。

所以,无论如何我有什么办法可以解决这个问题?

提前感谢。

python linear-programming pulp integer-programming
1个回答
0
投票

您需要手动线性化它。

让我们呼叫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 * 3 + remainder_1
x2 = quotient_2 * 3 + remainder_2

现在仍然需要对disjunction:]进行建模

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    
© www.soinside.com 2019 - 2024. All rights reserved.