繁体   English   中英

Python 纸浆线性规划约束

[英]Python Pulp Linear Programming Constraint

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

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

但它没有用。

我该如何制定呢?

不,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,但允许任何其他位模式。 此外,它们不需要任何额外的变量(其他一些方法需要)。

正如评论中提到的,边界附近发生的事情需要引起注意。 这一点的精确实现取决于问题的细节。 Like 开头是否允许 01 或 001,最后是否允许 10,100。 所以很难说明这必须如何完成(我必须列举几个可能的场景)。

无论如何,这在纸浆中很容易表达。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM