GLPK — минимизировать значение переменной

Я работаю над внедрением виртуальных сетей и создаю модель с помощью 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, не помещая ее в целевую функцию? Или поместить его в целевую функцию, но не изменить ни значение результата, ни значение всех других переменных?


person LuisFerrolho    schedule 01.06.2016    source источник


Ответы (1)


Вопрос касается минимизации phiw, однако описание проблемы предполагает, что то, что вы хотите сделать, это связать значения phiw и fw, и, в частности, иметь phiw = 1, когда fw > 0, и phiw = 0 в противном случае (т.е. , fw = 0).

Я бы посоветовал вам добавить ограничение, которое напрямую сопоставляет условное выражение fw со значением phiw, например:

s.t. LinkConstraint { (i,j) in VEdges, u in AllNodes, v in AllNodes }: if fw[i,j,u,v] > 0 then 1 else 0 = phiw[i,j,u,v] ;

person amsiix    schedule 20.03.2017