我正在尝试在C++应用编程接口中实现弯曲器分解,作为解决我的问题的方法。同时,使用"getRay“函数求对偶子问题的极值方向,从而在松弛的主问题中建立一个可行割集。我使用"getRay“函数的方式是这样的。
IloNumVarArray var(env);
IloNumArray val(env);
cplex.getRay(val, var);
我最终得到了var/val数组中的极端方向。我主要关心的是使用"getRay“函数的方式。据我所知,"getRay“用极端方向上非零的变量填充这个IloNumVarArray,这些变量的相应值将在IloNumArray中。getRay()返回的数组中元素的顺序未指定。此外,它只返回无界对象的非零值。我不知道如何将每个极端方向映射到可行性切割中相应的表达式。更具体地说,我已经知道了如何通过val和var数组中的值来构建可行性!我想知道有没有人能帮我个忙。问候
发布于 2013-12-26 02:00:47
我不知道你的确切问题是什么,为了得到光线,你应该首先关闭预解,使用原始单纯形作为你的求解方法,并使用getRay。你可以参考这篇文章"http://orinanobworld.blogspot.com/2010/07/finding-extreme-rays-in-cplex.html“。我希望这对你有帮助。
Niraj
发布于 2015-01-27 19:47:08
我认为你正在寻找的东西已经在this post中得到了解释(带有代码片段)。
发布于 2020-12-13 15:23:10
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
为变量设置属性。您可以访问用于映射值的属性。
https://stackoverflow.com/questions/20224340
复制相似问题