【问题标题】:CPLEX time until first feasible solution直到第一个可行解的 CPLEX 时间
【发布时间】:2016-05-06 17:28:56
【问题描述】:

我是 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:抱歉,有些参数是西班牙语,但那是我的母语。

【问题讨论】:

  • 您能否提供您尝试过的代码以及具体在哪里挂断的代码?
  • 好的,已经编辑了!
  • 我实际上并没有挂在代码的某个地方,我只是不知道我能做些什么来获得那些时间值......

标签: c++ cplex


【解决方案1】:

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

【讨论】:

  • 非常感谢!完美解决了我的问题!
猜你喜欢
  • 1970-01-01
  • 2020-12-22
  • 1970-01-01
  • 1970-01-01
  • 2018-12-04
  • 1970-01-01
  • 2022-08-18
  • 2019-07-22
  • 1970-01-01
相关资源
最近更新 更多