0

我正在使用一個Steiner樹的變體,用於使用CPLEX的非有向圖。處理有向圖中的循環的多維決策變量

在我的解決方案,該圖表示爲一個有向圖,以及我的desicion變量(稱爲Yuijv)中的一個控制所述路徑的方向上,所以:

Yuijv = 1,如果邊緣(i,j)在從u到v的方向U→i→j→V的一條路徑中使用。
Yuijv = 0 else。

這裏是Yuijv如何申報(和一些輔助代碼):

//structure 
tuple edge { 
    int i; //node 
    int j; //node 
} 

tuple path { 
    int u; 
    edge e; 
    int v; 
} 

setof(path) paths= {<i,<k,l>,j> | i,j in nodes : i!=j, <k,l> in edges: k!=l}; 

//decicion variable 
dvar boolean Yuijv[paths]; 

但是當我用它來與這個sintax訪問值:

Yuijv[u,<j,v>,v] = 0; 

我得到這個錯誤:

Can't use type int for <u:int,a:<i:int,j:int>,v:int>. 

在官方文檔,並且在這個網站中,我找不到這個問題的幫助,而且我真的讚賞了一些,或者可能是建議重新定義這個變量的實現。

感謝您的建議。

回答

0

它看起來像你試圖將int值0分配給布爾類型的決策變量。嘗試添加約束來修改該值。

+0

sum( in aristas)yuijv [u,,v]> = xi [u] + xi [v] -1; –

+0

忘掉最後一條評論,我無法抹去它。 我上面給出的例子實際上是發明的,所以我可以在這裏發佈它,而不用解釋所有內容,並且使它更易於閱讀。 我的一個實際限制,這有錯誤,它是: _sum(在邊緣)Yuijv [U,,V]> = XI [U] + XI [V] -1; _ 哪裏_xi_是另一變量desicion。 CPLEX優化工具包(ide)突出顯示_Yuijv [u,,v] ._ 中的第一個_u_並顯示提示:「不能對使用int類型, j:int>,v:int>。「 感謝您的回答! –