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;
Другие вопросы по тегам