Python Pulp线性编程约束

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

我对制浆完全陌生,想知道是否需要优化以下内容:

x = pulp.LpVariable.dicts("Volume", range(0, 7), cat='Binary')

[只要有0,就必须至少是3。

所以解可以是[0,0,0,0,0,0,1,],[0,0,0,1,0,0,0],[1,1,1,0,0, 0,1],而不是[1,0,1,0,1,0,0]。

我尝试添加如下约束:

prob += min([len(list(g)) for k, g in itertools.groupby(x.values()) if k == 0]) >= 3

但是没有用。

我该如何表述?

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

没有PuLP用于线性编程,因此所有约束都必须是线性的。因此,不允许使用if语句和类似的编程结构。

具有至少三个连续零的要求可以用不同的方式表示。一种相当有趣的方法是禁止模式101和1001。这可以表示为:

 x[i] - x[i+1] + x[i+2] <= 1             for i=0,1,2,....
 x[i] - x[i+1] - x[i+2] + x[i+3] <= 1    for i=0,1,2,....

这些约束非常精确地排除了模式101和1001,但允许任何其他位模式。此外,它们不需要任何其他变量(某些其他方法则需要)。

这很容易用纸浆表达。

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