GLPK/GMPL: минимизируйте целевую функцию, но оставьте ее> 0
Я пытаюсь минимизировать целевую функцию, которая имеет три параметра: i, p, j, вот так:
param mlu{i in I, p in P, j in out[p]} := traffic[i,p]/capacity[j];
minimize MAXLU{i in I, p in P, j in out[p]}: mlu[i,p,j] * x[i,p,j];
но целевая функция должна быть больше 0, иначе она побеждает мою цель минимизации.
И я пытаюсь убедиться в этом, добавив ограничение на целевую функцию следующим образом:
s.t. constraint1{i in I, p in P, j in out[p]} : MAXLU[i,p,j] != 0;
Но я получаю следующую ошибку:
LP.mod:66: invalid reference to status, primal value, or dual value of objective MAXLU above solve statement
Context: i in I , p in P , j in out [ p ] } : MAXLU [ i , p , j ] !=
glp_mpl_generate: invalid call sequence
Error detected in file glpapi14.c at line 79
Aborted
Возможно ли это сделать? Спасибо за любую помощь / предложения!
1 ответ
Вы можете ссылаться на переменные и параметры, но не цели (MAXLU
) в ограничении. Простой способ исправить это заменить MAXLU
в constraint1
с фактическим объективным выражением:
s.t. constraint1{i in I, p in P, j in out[p]} : mlu[i,p,j] * x[i,p,j] ...;
Более того, вы не можете определить ограничение с помощью выражения!= 0. Вы можете иметь>= epsilon
или <= epsilon
вместо того, где epsilon
это небольшое число:
s.t. constraint1{i in I, p in P, j in out[p]} : mlu[i,p,j] * x[i,p,j] >= epsilon;