gpt4 book ai didi

Python Pulp 线性规划约束

转载 作者:行者123 更新时间:2023-12-03 08:44:22 26 4
gpt4 key购买 nike

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

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

正如评论中提到的,边界附近发生的事情需要一些注意。其精确实现在一定程度上取决于问题的细节。比如开头允许是01还是001,结尾是否允许是10100。因此,要展示如何做到这一点有点困难(我必须列举几种可能的情况)。

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

关于Python Pulp 线性规划约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62027919/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com