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

Возможно ли это сделать? Спасибо за любую помощь/предложения!


person Krishna Kadiyala    schedule 21.04.2016    source источник
comment
Как насчет того, чтобы определить какое-то очень маленькое значение e и добавить obj >= e?   -  person serge_k    schedule 22.04.2016


Ответы (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;
person vitaut    schedule 25.04.2016