2016-04-21 2 views
1

Я пытаюсь минимизировать целевую функцию, которая имеет три параметра: I, P, J, как это:GLPK/GMPL: Минимизировать целевую функцию, но держать его> 0

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 

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

+0

Как насчет того, чтобы определить некоторое очень маленькое значение 'e' и добавить' obj> = e'? –

ответ

0

Вы можете ссылаться на переменные и параметры, но не на цели (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; 
Смежные вопросы