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>。“ 感谢您的回答! –