CPLEX中能否用stateFunction为区间变量关联无序状态集合?
在CPLEX中建模区间变量关联无序状态集合的方法
你可以在CPLEX中实现这类场景,之前的错误是因为alwaysEqual属于顶层约束,不能嵌套在逻辑表达式(比如or)中使用。针对区间变量关联无序状态集合的需求,CPLEX提供了alwaysIn约束来直接实现。
需求回顾
- 状态函数
myStateFunction的状态范围包含1、2、3 - 区间
product_1_Interval全程必须处于状态1或3 - 区间
product_2_Interval全程必须处于状态2或3
修改后的OPL代码示例
stateFunction myStateFunction; dvar interval product_1_Interval; dvar interval product_2_Interval; subject to { alwaysConstant (myStateFunction, 0, 155); alwaysConstant (myStateFunction, 156, 310); // 约束product_1_Interval处于状态1或3 alwaysIn(myStateFunction, product_1_Interval, {1, 3}); // 约束product_2_Interval处于状态2或3 alwaysIn(myStateFunction, product_2_Interval, {2, 3}); }
关键说明
alwaysIn约束的作用是指定状态函数在目标区间的整个持续时间内,其值必须属于给定的状态集合,完美匹配你需要的无序状态集合关联场景。
内容的提问来源于stack exchange,提问作者Asya Troyan
相关产品推荐
相关产品推荐

