我正在使用jsLPSolver来解决整数规划问题。
我无法调整模型以包含不兼容约束。我有以下模型:
{
"optimize": "cost",
"opType": "min",
"constraints": {
"c1": { "min": 36000.0, "max": 36800.0 },
"c2": { "min": 12000.0, "max": 12800.0 },
"c3": { "equal": 1000.0 }
},
"variables": {
"p1": { "c1": 0, "c2": 0, "c3": 1, "cost": 437.47, },
"p2": { "c1": 0, "c2": 60.0, "c3": 1, "cost": 1964.49, },
"p3": { "c1": 34.0, "c2": 0, "c3": 1, "cost": 1428.98, },
"p4": { "c1": 46.0, "c2": 0, "c3": 1, "cost": 1973.11, }
},
"ints": { "p1": 1, "p2": 1, "p3": 1, "p4": 1 }
}
和可行的结果
{ bounded: true, feasible: true, p2: 200, p3: 66, p4: 734, result: 1935473.42 }
但是,它存在一个约束,p3
并且p4
不能在解决方案中在一起,因为它们是不兼容的。
是否可以定义一个不兼容约束来定义它p3
并且p4
是不兼容的变量?
编辑
我正在考虑使用如下约束p3 + p4 = 0
:
{
"optimize": "cost",
"opType": "min",
"constraints": {
"c1": { "min": 36000.0, "max": 36800.0 },
"c2": { "min": 12000.0, "max": 12800.0 },
"c3": { "equal": 1000.0 },
"incompatible": { "equal": 0.0 }
},
"variables": {
"p1": { "c1": 0, "c2": 0, "c3": 1, "cost": 437.47, "incompatible": 0.0 },
"p2": { "c1": 0, "c2": 60.0, "c3": 1, "cost": 1964.49, "incompatible": 0.0 },
"p3": { "c1": 34.0, "c2": 0, "c3": 1, "cost": 1428.98, "incompatible": 1.0 },
"p4": { "c1": 46.0, "c2": 0, "c3": 1, "cost": 1973.11, "incompatible": 1.0 }
},
"ints": { "p1": 1, "p2": 1, "p3": 1, "p4": 1 }
}
但看看在这种情况下解决方案会发生什么:
{ bounded: true, feasible: false, p2: 200, p3: -3000, p4: 3000, result: 0 }
如https://runkit.com/tetrimesquita/incompatible-contraint所示,这是正确但不可行的。