Я использую 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,, что правильно , но невозможно .