linear-programming - 如何将其转换为一组线性约束?

标签 linear-programming cplex ampl

给定一个二元变量的一维数组,例如

x = [0,1,0,0,1] 

我想创建一个新变量 y这样y <= max(x) 。换句话说

y = 0仅当 sum(x) = 0 .

y = 1仅当 sum(x) > 0 .

如何将其转换为一组线性约束?

我知道这一定是可能的,因为 IBM CP Optimizer Suite 可以自动处理此问题,但我无权访问它。

最佳答案

尝试一些简单的方法,比如 y <= sum(x) ,如果所有 x 都为零,它将强制 y 为零。

然后,为了将 y 强制为 1,您有多种选择。您可以简单地为 x 中的每个变量添加 y >= x 的约束,或者使用像 My >= sum(x) 这样的大 M 约束,其中 M 是某个常数,它是 x 中可以同时相等的变量的最大数量为 1。添加单独的约束可能会产生更严格的线性松弛,尤其是在有许多 x 变量的情况下。

关于linear-programming - 如何将其转换为一组线性约束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24237452/

相关文章:

algorithm - 多站车辆调度

java - 在 ILOG CPLEX Optimizer java API 中开始使用 MIP

python - CPLEX:通过 python API 访问强分支值

python - 如何使用 docplex (python) 对优化问题中的约束进行建模?

ampl - 如何更改 AMPL 中的默认求解器?

python - 大型数据集的贪婪集覆盖有什么好的实现吗?

python - 试图找到一个带有不等式的纯Python整数线性规划求解器

linear-programming - 无法使用 CPLEX 从 LP 中导出对偶值

java - 将 gurobi 与 java 结合使用 vs gurobi 与 ampl

python - 将类型实例转换为字典