在C++API中获取无界方向

Getting unbounded direction in C++ API

本文关键字:方向 获取 C++API      更新时间:2023-10-16

我正在尝试实现Benders分解,将其作为C++API中问题的解决方法。同时,我使用"getRay"函数来获得对偶子问题的极限方向,以在松弛主问题中建立可行性切割。我使用"getRay"函数的方式是这样的。

IloNumVarArray var(env);
IloNumArray val(env);
cplex.getRay(val, var);

我最终得到了var/val数组中的极端方向。我主要关心的是使用"getRay"函数的方式。据我所知,"getRay"用极端方向上非零的变量填充这个IloNumVarArray,这些变量的相应值将在IloNumArray中。getRay()返回的数组中元素的顺序未指定。此外,它只返回无界的非零值。我不知道如何将每个极端方向映射到可行性切割中的相应表达式。更具体地说,我知道如何通过val和var数组中的值来构建我的可行性!我想知道是否有人能帮我一个忙。问候

我不知道你的确切问题是什么,要获得射线,你应该先关闭预求解,使用原始单纯形作为你的求解方法,然后使用getRay。你可以参考这篇文章"http://orinanobworld.blogspot.com/2010/07/finding-extreme-rays-in-cplex.html"。我希望它对你有帮助。

Niraj

我想您想要的东西在这篇文章中已经解释过了(用代码片段)。

getRay函数有两个输入(val, var)。它用非零系数填充val,用相应的变量填充var

例如,如果val返回(1.5,2.5),var返回(x1,x3);你可以说1.5x1+2.5x3是一个极端的方向。

对于映射值,可以检查x[i].getId() == var[j].getId()

编辑:可以使用setStringPropertysetIntProperty为变量设置属性。您可以访问用于映射值的属性。