我正在尝试将Benders分解作为我在C ++ API中解决问题的解决方案。同时,我使用“getRay”函数来获得双子问题的极端方向,以在松弛的主问题中建立可行性切割。我使用“getRay”功能的方式就是这样。
IloNumVarArray var(env);
IloNumArray val(env);
cplex.getRay(val, var);
我在var / val数组中以极端方向结束。我的主要关注点是使用“getRay”函数的方式。据我所知,“getRay”使用极端方向非零的变量填充此IloNumVarArray,这些变量的相应值将在IloNumArray中。未指定getRay()返回的数组中元素的顺序。此外,它仅返回无界的非零值。我不知道如何将每个极端方向映射到可行性切割中的相应表达式。更具体地说,我知道如何通过val和var数组中的值来构建我的可行性切割!我想知道是否有人愿意帮我一个忙。 此致
答案 0 :(得分:0)
我不知道你的确切问题是什么,要获得一条光线你应该首先关闭预解决方案并使用原始单面作为你的解决方法并使用getRay。你可以参考这篇文章“http://orinanobworld.blogspot.com/2010/07/finding-extreme-rays-in-cplex.html”。 我希望它对你有所帮助。
尼拉吉
答案 1 :(得分:0)
我认为您正在寻找的内容(使用代码段)在this post中进行了解释。
答案 2 :(得分:0)
getRay
函数有2个输入(val, var)
。它用非零系数填充val
,并用相应的变量填充var
。
例如,如果val返回(1.5,2.5)而var返回(x1,x3);您可以说1.5x1 + 2.5x3是一个极端的方向。
要映射值,可以检查x[i].getId() == var[j].getId()
。
编辑:您可以使用setStringProperty
和setIntProperty
将属性设置为变量。您可以访问属性以映射值。