constraints - 在线性规划中表达 OR 约束
问题描述
我在线性程序中有一个浮点变量x
,它应该是0
两个常量CONSTANT_A
和之间的一个或之间CONSTANT_B
:
LP.addConstraint(x == 0 OR CONSTANT_A <= x <= CONSTANT_B)
当然OR
,在线性规划中没有显式这样的东西。有没有办法表达这种约束?
解决方案
所以让我们假设你想要约束:
x == 0 OR 1 <= x <= 2
很明显,您的线性程序的可行区域不是凸的,因为 x=0 和 x=1 都是可行的,但没有适当的凸组合是可行的。结果,证明用线性程序对此进行建模是不可能的。
话虽如此,如果您引入一个二元决策变量 y,则很容易对此进行建模,如果我们在范围内,则取值为 1,如果我们固定为 0,则取值为 0。然后您可以对以下内容进行建模:
y <= x <= 2*y
y binary
或者,在您完全一般的情况下:
y*CONSTANT_A <= x <= y*CONSTANT_B
y binary
推荐阅读
- elixir - 使用 Ecto/Elixir 锁定行“FOR UPDATE OF”特定表
- sql - 从不同表的另一列中添加缺失的记录
- system-verilog - SystemVerilog always_comb 不会重新评估隐含的敏感度列表是否更改
- mysql - 如何在没有 DROP/TRUNCATE 命令权限的情况下清空表?
- javascript - 在 React 中访问父组件中的子状态值
- ios - ignoreSnapshotOnNextApplicationLaunch() 没有按预期工作
- javascript - 神秘的 CSP 违规
- php - 检查自用户上次访问以来数据是否对用户来说是新的
- sql - SQL Server:升级后的数据库兼容性级别
- javascript - 将 .filter() 链接到函数中以加载本地 JSON 数据