constraints - 如何说变量是线性规划中的三个值之一

标签 constraints mathematical-optimization linear-programming lpsolve

我正在使用 LPSolve 来解决线性问题,但是我在表达自己对约束的看法时遇到了问题。 我想在我的约束中写下变量 t3 是三个值之一。所以我做了这样的事情:

min t3;

t3 >= 2+t1;
t3 >= 2+t4;
t3 >= 2+t8;

(这只是一个示例,当然不是实际情况,否则 t4、t1 和 t8 什么都不做)。 但是 t3 的最终值是最高的而不是最低的......我做错了什么,我认为这是有道理的。当然,如果我尝试最大化 t3 是行不通的,因为没有上限,但我认为这不是真正的问题。

最佳答案

听起来您正在尝试将某些变量 z 建模为恰好等于值 {t1, t2, t3} 之一。我会通过添加三个二进制变量来解决这个问题,b1b2b3,它们指示所选元素。由于我们只选择三个元素之一,我们将添加约束:

b1 + b2 + b3 = 1

现在我们需要加强zb 变量之间的关系。为此,我将定义三个新变量 z1z2z3。如果 bi=0,变量 zi 将取值 0,否则取值 ti。为此,我们包括以下约束,其中 M 是一个大的正常数:

z1 >= 0 - M*b1
z1 <= M*b1
z1 >= t1 - M*(1-b1)
z1 <= t1 + M*(1-b1)

如果 b1=0,则前两个约束固定 z1=0,接下来的两个约束什么都不做。如果 b1=1,则前两个约束什么都不做,接下来的两个约束固定 z1=t1。您将添加相同的四个约束以根据 b2t2 设置 z2 并根据 z3 设置 b3t3

最后,您需要根据 zi 值设置 z:

z = z1 + z2 + z3

关于constraints - 如何说变量是线性规划中的三个值之一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33072032/

相关文章:

python - 如何在 PuLP Python 中指定两个变量相乘的约束?

java - Apache common SimplexSolver ObjectiveFunction 用于最大化矩阵中值的总和

MySQL:如果不存在则添加约束

ios - 更改表格 View 中的按钮约束

ios - 约束 uiimageview 以保持宽高比并根据设备大小进行扩展

algorithm - 带优化的形状算法

python - 使用 scipy.linalg.lstsq 的点集的最佳拟合平面结果错误?

Java:时间序列普通最小二乘法

mathematical-optimization - 如何将二次程序转换为线性程序?

ios - 更改约束常量后是否需要 setNeedsLayout 和 layoutIfNeeded?