【发布时间】:2022-11-17 05:59:04
【问题描述】:
我正在尝试解决与这个更简单的示例类似的问题。
| Target | Constraint |
|---|---|
| 12 | 25 |
| 15 | 50 |
| 14 | 10 |
| 8 | 2 |
ETC
我正在尝试最大化目标列选择的总和,同时保持约束列的乘积 < 某个数字。因此,例如,如果约束为 500,则一种可能的解决方案为 34,另一种为 29。
我将如何编写该约束?
【问题讨论】:
-
你的例子不清楚。你能编辑你的帖子并提供一个更完整的例子吗?变量是什么?什么是“约束列的乘积”? 34 与 500 有什么关系?
-
在这个例子中,我可以选择 12、14 和 8(总共 34),因为 25*10*2 = 500。同样,我也可以选择 15、14(总共 29),因为 50*10 = 500。我不能选择 12、15(总共 27),因为 25*50 > 500。
-
知道了。所以你有二进制“选择”变量和“目标”是可选的。您所描述的构造是非线性的,因为您在约束中使用了变量的乘积,因此您可能需要将框架转移到处理 NLP 的框架,而
pulp则不需要。您的约束类似于: (x1*t1)(x2*t2)... <= 500 其中x是二进制变量,t是目标值。由于 x 的乘法,该构造是非线性的