2015-10-17 63 views
2

我在Zimpl代碼中得到了意想不到的VARSYM。這裏是我的代碼的一部分:zimpl中出乎意料的VARSYM

param T := 0.8; 
var S[Sensors] binary; 

minimize nb_sensors : sum <i> in Sensors : S[ i ]; 

subto fd: 

    1- prod <k,l> in Sensors*Pipe : (1-ord(Proba[k,l],1,1) * S[k]) >= T; 

看來這個錯誤是因爲我有一個變量(S[])是函數(prod)裏面,你有關於這個問題的任何想法?

回答

0

什麼是T,一個變量或一個常量?你有沒有試着寫產品括號:

1- (prod <k,l> in Sensors*Pipe : (1-ord(Proba[k,l],1,1) * S[k])) >= T; 

或改寫是:

prod <k,l> in Sensors*Pipe : (1-ord(Proba[k,l],1,1) * S[k]) + T <= 1; 
+0

是的,我曾嘗試他們兩個,但同樣的錯誤發生。但是,當我試圖用'sum'替換'prod'時,沒有發生錯誤!你怎麼看?可能是'prod'函數中的一個錯誤? – Noureddine

+0

好的。我認爲問題在於zimpl無法處理大於2的變量乘積的術語,即雙線性項很好。您的類型fd的每個約束如下所示:((1-a)* S [1])*((1-b)* S [2])* ... *((1-k)* S [k] ) – Jakob

+0

每個約束條件如下:'(1-(a * S [1]))*(1-(b * S [2]))*(1-(c * S [3])).... 「你認爲這種情況下的解決方案是什麼? – Noureddine