ILOMIPINFOCALLBACK5(loggingCallback, IloNumVarArray, vars, IloNum, lastLog, IloNum, lastIncumbent, IloNum, startTime, IloNum, startDetTime) { int newIncumbent = 0; int nodes = getNnodes(); if ( hasIncumbent() && fabs(lastIncumbent - getIncumbentObjValue()) > 1e-5*(1.0 + fabs(getIncumbentObjValue())) ) { lastIncumbent = getIncumbentObjValue(); newIncumbent = 1; } if ( nodes >= lastLog + 100 || newIncumbent ) { if ( !newIncumbent ) lastLog = nodes; getEnv().out() << "Time = " << getCplexTime() - startTime << " Dettime = " << getDetTime() - startDetTime << " Nodes = " << nodes << '(' << getNremainingNodes() << ')' << " Best objective = " << getBestObjValue(); if ( hasIncumbent() ) { getEnv().out() << " Incumbent objective = " << getIncumbentObjValue() << endl; } else { getEnv().out() << endl; } } if ( newIncumbent ) { IloNumArray val(vars.getEnv()); getIncumbentValues(val, vars); val[0] = getIncumbentValue(vars[0]); getEnv().out() << "New incumbent variable values: " << endl << val << endl; val.end(); } }
ILOMIPINFOCALLBACK5(loggingCallback, IloNumVarArray, vars, IloNum, lastDettime, IloNum, lastIncumbent, IloNum, startTime, IloNum, startDetTime) { int newIncumbent = 0; double dettime = getDetTime(); if ( hasIncumbent() && fabs(lastIncumbent - getIncumbentObjValue()) > 1e-5*(1.0 + fabs(getIncumbentObjValue())) ) { lastIncumbent = getIncumbentObjValue(); newIncumbent = 1; } if ( dettime >= lastDettime + 1000.0 || newIncumbent ) { if ( !newIncumbent ) lastDettime = dettime; getEnv().out() << "Time = " << getCplexTime() - startTime << " Dettime = " << dettime - startDetTime << " Best objective = " << getBestObjValue(); if ( hasIncumbent() ) { getEnv().out() << " Incumbent objective = " << getIncumbentObjValue() << endl; } else { getEnv().out() << endl; } } if ( newIncumbent ) { IloNumArray val(vars.getEnv()); getIncumbentValues(val, vars); val[0] = getIncumbentValue(vars[0]); getEnv().out() << "New incumbent variable values: " << endl << val << endl; val.end(); } }