2016-04-21 14 views
1

Ich versuche, eine Zielfunktion zu minimieren, die drei Parameter: i, p, j wie folgt aus:GLPK/GMPL: Minimieren Zielfunktion aber halten Sie es> 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]; 

aber die Zielfunktion muss sein größer als 0, sonst vereitelt es meinen Zweck der Minimierung.

Und ich versuche, dies zu gewährleisten, indem eine Einschränkung für die objektive Funktion wie folgt ergänzt:

s.t. constraint1{i in I, p in P, j in out[p]} : MAXLU[i,p,j] != 0; 

Aber ich erhalte die folgenden Fehler:

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 

Ist es überhaupt möglich, dies zu tun ? Danke für jede Hilfe/Vorschläge!

+0

Wie wäre es mit einigen sehr kleinen Wert 'e' und hinzufügen' obj> = e'? –

Antwort

0

Sie können in einer Abhängigkeit auf Variablen und Parameter, aber nicht auf Ziele (MAXLU) verweisen. Ein einfacher Weg, dies zu beheben, ist MAXLU in constraint1 mit dem eigentlichen Ziel Ausdruck zu ersetzen:

s.t. constraint1{i in I, p in P, j in out[p]} : mlu[i,p,j] * x[i,p,j] ...; 

Darüber hinaus können Sie nicht eine Einschränkung mit Ausdruck definieren = 0. Sie haben> = epsilon oder < = epsilon statt, wo epsilon ist eine kleine Zahl:

s.t. constraint1{i in I, p in P, j in out[p]} : mlu[i,p,j] * x[i,p,j] >= epsilon;