Я работаю над внедрением виртуальных сетей и создаю модель с помощью glpk для внедрения сетей. У меня есть следующая целевая функция:
minimize cost: sum{(i,j) in VEdges} sum{u in SNodes, v in SNodes} weight[u,v] * fw[i,j,u,v] * secSupEdge[u,v] + sum{u in SNodes, v in SNodes} r[u,v] * secSupEdge[u,v];
Тогда у меня есть следующие два ограничения (среди прочего)
s.t. relConst2{(i,j) in VEdges, u in AllNodes, v in AllNodes}: bwDem[i,j] * phiw[i,j,u,v] >= fw[i,j,u,v];
s.t. linkSecConst0{(i,j) in VEdges, u in SNodes, v in SNodes}: phiw[i,j,u,v] * secDemEdge[i,j] <= secSupEdge[u,v];
"phiw" – это двоичная переменная.
"fw" и "r" — это переменные, принимающие любое значение >= 0.
все остальные ("вес", "bwDem", "secDemEdges", "secSupEdge") просто параметры
Я хочу связать phiw с fw. Когда fw > 0, phiw должно принимать значение 1. Когда fw == 0, phiw должно принимать значение значение 0.
Обычно он делает то, что я хочу, но иногда phiw принимает значение 1, когда fw имеет значение 0, а это не то, что мне нужно. Происходит это потому, что соблюдаются ограничения:
Пример 1:
с.т. относительная константа2: 4 * 1 >= 0
с.т. linkSecConst0: 1 * 2 ‹= 2
Есть ли способ минимизировать значение переменной phiw, не помещая ее в целевую функцию? Или поместить его в целевую функцию, но не изменить ни значение результата, ни значение всех других переменных?