c++ - 到第一个可行解的 CPLEX 时间

标签 c++ cplex

我是 CPLEX 和 C++ 编程的初学者,我正在尝试解决中等规模的 MIP 问题。

我的问题是我需要知道 CPLEX 花了多少时间来获得第一个可行解和获得最佳可行解(不一定是全局最优解)。

我已经知道如何配置时间限制,并且我一直在使用 CPLEX 的解决方案池来获取所有可行的解决方案,但不是它的时间。

CPLEX 中是否有直接代码获取每个可行解的时间值?

谢谢

EDIT1:问题的代码如下:

IloEnv env;
IloModel model(env);
IloCplex cplex(model);
IloCplex::Param::TimeLimit;

IloExpr term2(env);
IloExpr term3(env);
IloExpr objetivo(env);

IloInt i,j;
double CP;

IloNumVarArray z(env, columnas-1, 0, INFTY,ILOBOOL);
IloNumVarArray a(env, columnas, -1*INFTY, INFTY, ILOFLOAT);

for (i = 0; i < filas; i++){
    IloExpr term1(env);
    for(j = 0; j < columnas-1; j++){

        term1 += a[j]*(A[i+1][j+2]);
    }
    term2 += ((b[i+1])-(term1+a[columnas-1]))*((b[i+1])-(term1+a[columnas-1]));
    term1.end();
}

for(j = 0; j < columnas-1; j++){
        term3 += z[j];
    }
objetivo=term2/(sigmasq)+2*(term3+1)-(filas);

model.add(IloMinimize(env, objetivo));


for (j = 0; j < columnas-1; j++) {
    IloExpr restr(env);
    restr = a[j] + (bigM)*z[j];
    model.add(0 <= restr <= IloInfinity);
    restr.end();
}
for (j = 0; j < columnas-1; j++) {
    IloExpr restr(env);
    restr = (bigM)*z[j] - a[j];
    model.add(0 <= restr <= IloInfinity);
    restr.end();
}

cplex.setParam(IloCplex::Param::ClockType, 2);
cplex.setParam(IloCplex::Param::TimeLimit, 3600);   

cplex.solve();

PD:抱歉有些参数是西类牙语,但那是我的母语。

最佳答案

您可以使用 incumbent callback获取沿途找到的每个整数可行解(包括最终解)的时间(请参阅 getCplexTime 函数)。要开始使用,请查看 CPLEX 附带的 ilomipex4.cpp 示例,了解如何使用回调的一般示例。另请参阅 documentation用于使用 Concert 实现回调。

关于c++ - 到第一个可行解的 CPLEX 时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37078228/

相关文章:

java - 即使将 cplex.jar 添加到 lib 后,ilog 包也不存在

c++ - cplexmiqp MATLAB 的 CPLEX 等效 C++

c++ - 带有目标相机的 C++ 3d vector/矩阵库的建议

c++ - 如何克服 MSVC 成员方法指针模板参数推导失败的 bug?

c++ - 为什么这个 c++ 多线程互斥代码偶尔会出现故障?

c++如果它们共享一个数字,则组合 vector

c++ - 将 cplex 与 netbeans c++ 一起使用,链接器问题

c++ - 需要有关 Qt 代码块配置的帮助!

Java Cplex 两个决策变量的乘积

mathematical-optimization - Java 数学优化库——免费还是开源推荐?