Python Pulp Linear Programming Constraint



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

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

只要有 0,它至少需要是其中的 3 个。

因此,解可以是

[0,0,0,0,0,0,0,1]、[0,0,0,0,0,0]、[1,1,1,0,0,0,0,1],但不是 [1,0,1,0,0,1,0,0]。我尝试添加约束,如下所示:

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

但它没有用。

我该如何制定?

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

正如评论中提到的,边界附近发生的事情需要引起一些关注。这一点的精确实现有点取决于问题的细节。喜欢开头是否允许 01 或 001,结尾是否允许 10,100。因此,展示必须如何做到这一点有点困难(我必须列举几种可能的情况(。

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

相关内容

最新更新