2016-04-21 94 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)。一個簡單的方法來解決這個問題是現實的客觀表達式替換MAXLUconstraint1

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;