2017-06-21 224 views
0

我有一組節點i並創建了一個別名(i,j)。現在我有一個參數c(i,j),其中我想將元素明確地映射到j。例如, set i /a,b,c/ ; alias (i,j) ; c(i,j) /#i.#j/ ;在GAMS中設置條件

點算子映射所有元素,如a.a,b.b,c.c,我不想包含它們。我如何編寫一個條件,只考慮a.b,a.c,b.c?

感謝

回答

1

我不十分清楚,你想做的事,但在下面的代碼兩個任務之一應該做你需要的東西:

set i /a,b,c/ ; 
alias (i,j) ; 
set c(i,j); 

c(i,j) = not sameas(i,j); 
display c; 
$ontext 
Results in: 
----  6 SET c 

      a   b   c 

a      YES   YES 
b   YES      YES 
c   YES   YES 
$offtext 

c(i,j) = ord(i) < ord(j); 
display c; 
$ontext 
Results in: 
----  27 SET c 

      b   c 

a   YES   YES 
b      YES 
$offtext 

最佳, 盧茨

+0

謝謝你的解答。另外,我在其中一個變量中有一個類似的賦值問題,當我嘗試輸入相同的賦值時,會彈出一個錯誤提示_a缺少後綴_。無論如何要解決這個問題? –

+0

與集合和參數相比,變量(和方程)具有可分配的不同屬性,因此需要使用後綴指定要解決的字段(請參見https://www.gams.com/latest/文檔/ userguides/userguide/_u_g__variables.html#UG_Variables_VariableAttributes)。 所以我們可以說你想設置依賴於i和j的變量x的上界。那麼你可以這樣做:x.up(i,j)= 50; – Lutz

+0

我的程序有_i/a,b,c,d,e/_以及__,u,v_的3個別名集合,其中_x(i,j)_和_z(u,v,i,j)_爲二進制變量。我試圖以這樣的方式解決,即在任何給定的點上,對變量的賦值總是唯一的,例如在_z(u,v,i,j)_的情況下,我希望它是_(a, d,b,c)_或_(b,d,a,b)_。我想在約束中不等於j_和_u不等於v_。 –