ILOBRANCHCALLBACK1(MyBranch, IloNumVarArray, vars) { if ( getBranchType() != BranchOnVariable ) return; // Branch on var with largest objective coefficient // among those with largest infeasibility IloNumArray x; IloNumArray obj; IntegerFeasibilityArray feas; try { x = IloNumArray(getEnv()); obj = IloNumArray(getEnv()); feas = IntegerFeasibilityArray(getEnv()); getValues(x, vars); getObjCoefs(obj, vars); getFeasibilities(feas, vars); IloInt bestj = -1; IloNum maxinf = 0.0; IloNum maxobj = 0.0; IloInt cols = vars.getSize(); for (IloInt j = 0; j < cols; j++) { if ( feas[j] == Infeasible ) { IloNum xj_inf = x[j] - IloFloor (x[j]); if ( xj_inf > 0.5 ) xj_inf = 1.0 - xj_inf; if ( xj_inf >= maxinf && (xj_inf > maxinf || IloAbs (obj[j]) >= maxobj) ) { bestj = j; maxinf = xj_inf; maxobj = IloAbs (obj[j]); } } } if ( bestj >= 0 ) { makeBranch(vars[bestj], x[bestj], IloCplex::BranchUp, getObjValue()); makeBranch(vars[bestj], x[bestj], IloCplex::BranchDown, getObjValue()); } } catch (...) { x.end(); obj.end(); feas.end(); throw; } x.end(); obj.end(); feas.end(); }
static int cget( Tcl_Interp *interp, SpinButtonParams *para, GnoclOption options[], int idx ) { GtkAdjustment *adjust = gtk_spin_button_get_adjustment( para->spinButton ); Tcl_Obj *obj = NULL; if( idx == variableIdx ) obj = Tcl_NewStringObj( para->variable, -1 ); else if( idx == onValueChangedIdx ) { obj = Tcl_NewStringObj( para->onValueChanged ? para->onValueChanged : "", -1 ); } else if( idx == lowerIdx ) obj = Tcl_NewDoubleObj( adjust->lower ); else if( idx == upperIdx ) obj = Tcl_NewDoubleObj( adjust->upper ); else if( idx == stepIncIdx ) obj = Tcl_NewDoubleObj( adjust->step_increment ); else if( idx == pageIncIdx ) obj = Tcl_NewDoubleObj( adjust->page_increment ); else if( idx == valueIdx ) obj = getObjValue( para->spinButton ); if( obj != NULL ) { Tcl_SetObjResult( interp, obj ); return TCL_OK; } return gnoclCgetNotImplemented( interp, options + idx ); }
ILOHEURISTICCALLBACK1(Rounddown, IloNumVarArray, vars) { IntegerFeasibilityArray feas; IloNumArray obj; IloNumArray x; try { feas = IntegerFeasibilityArray(getEnv()); obj = IloNumArray(getEnv()); x = IloNumArray(getEnv()); getFeasibilities(feas, vars); getObjCoefs (obj , vars); getValues (x , vars); IloNum objval = getObjValue(); IloInt cols = vars.getSize(); for (IloInt j = 0; j < cols; j++) { // Set the fractional variable to zero and update the objective value if ( feas[j] == Infeasible ) { objval -= x[j] * obj[j]; x[j] = 0.0; } } setSolution(vars, x, objval); } catch (...) { feas.end(); obj.end(); x.end(); throw; } feas.end(); obj.end(); x.end(); }
static void changedFunc( GtkWidget *widget, gpointer data ) { SpinButtonParams *para = (SpinButtonParams *)data; Tcl_Obj *val = getObjValue( para->spinButton ); setVariable( para, val ); doCommand( para, val, 1 ); }
void solver::run2() { int n = mod2->instance.get_n(); // Getting results for(IloInt i = 0; i < n; i++){ IloNumArray aux1(getEnv()); IloNumArray aux2(getEnv()); IloNumArray2 aux3(getEnv()); IloNumArray2 aux4(getEnv()); for(IloInt j = 0; j < n; j++){ aux1.add(getValue(mod2->z[i][j])); aux2.add(getValue(mod2->w[i][j])); IloNumArray aux5(getEnv()); IloNumArray aux6(getEnv()); for(IloInt k = 0; k < n; k++){ aux5.add(getValue(mod2->x[i][j][k])); aux6.add(getValue(mod2->y[i][j][k])); } aux3.add(aux5); aux4.add(aux6); } z.add(aux1); w.add(aux2); x.add(aux3); y.add(aux4); } obj_value = getObjValue(); }
bool MtxLP::isBottleNeck(stomap* obj, string rx, bool max, bool presolve){ double lb = getColLB(rx), ub = getColUB(rx); setColBnds(rx, LB, UB); optimise(obj, max, presolve); bool rv = !is_zero(getObjValue()); setColBnds(rx, lb, ub); return rv; }
void ColaModel::print_solution() const { std::cout << "Solution is" << std::endl; const double * sol = getColSolution(); for (int i=0; i < getNumCols(); ++i) { std::cout << std::setw(5) << i << std::setw(15) << sol[i] << std::endl; } std::cout << "Objective Value " << getObjValue() << std::endl; }
ILOINCUMBENTCALLBACK2(getFirstSolInfo, IloInt&, cpt, IloNum, startTime){ if (cpt <1){ std::cout << "Sol n°" << cpt+1 << " obj: \t" << getObjValue() << std::endl; std::cout << "Sol n°" << cpt+1 << " time: \t" << getCplexTime()-startTime << std::endl; std::cout << "Sol n°" << cpt+1 << " gap: \t" << getMIPRelativeGap() << std::endl; cpt=cpt+1; } }
ILOSTLBEGIN ILOSIMPLEXCALLBACK0(MyCallback) { cout << "Iteration " << getNiterations() << ": "; if ( isFeasible() ) { cout << "Objective = " << getObjValue() << endl; } else { cout << "Infeasibility measure = " << getInfeasibility() << endl; } }
void solver::run1() { int n = mod1->instance.get_n(); // Getting results for(IloInt i = 0; i < n; i++){ IloNumArray aux1(getEnv()); IloNumArray3 aux2(getEnv()); for(IloInt j = 0; j < n; j++){ aux1.add(getValue(mod1->z[i][j])); IloNumArray2 aux3(getEnv()); for(IloInt k = 0; k < n; k++){ IloNumArray aux4(getEnv()); for(IloInt l = 0; l < n; l++) aux4.add(getValue(mod1->f[i][j][k][l])); aux3.add(aux4); } aux2.add(aux3); } z.add(aux1); f.add(aux2); } obj_value = getObjValue(); }
ILOBRANCHCALLBACK1(SOSbranch, IloSOS1Array, sos) { IloNumArray x; IloNumVarArray var; try { IloInt i; x = IloNumArray(getEnv()); var = IloNumVarArray(getEnv()); IloNum bestx = EPS; IloInt besti = -1; IloInt bestj = -1; IloInt num = sos.getSize(); for (i = 0; i < num; i++) { if ( getFeasibility(sos[i]) == Infeasible ) { var.clear(); sos[i].getVariables(var); getValues(x, var); IloInt n = var.getSize(); for (IloInt j = 0; j < n; j++) { IloNum inf = IloAbs(x[j] - IloRound(x[j])); if ( inf > bestx ) { bestx = inf; besti = i; bestj = j; } } } } if ( besti >= 0 ) { IloCplex::BranchDirectionArray dir; IloNumArray val; try { dir = IloCplex::BranchDirectionArray(getEnv()); val = IloNumArray(getEnv()); var.clear(); sos[besti].getVariables(var); IloInt n = var.getSize(); for (IloInt j = 0; j < n; j++) { if ( j != bestj ) { dir.add(IloCplex::BranchDown); val.add(0.0); } else { dir.add(IloCplex::BranchUp); val.add(1.0); } } makeBranch(var, val, dir, getObjValue()); makeBranch(var[bestj], 0.0, IloCplex::BranchDown, getObjValue()); } catch (...) { dir.end(); val.end(); throw; } dir.end(); val.end(); } } catch (...) { var.end(); x.end(); throw; } var.end(); x.end(); }
bool MtxLP::isCutSet(stomap* obj, strvec set, bool max, bool presolve){ block(&set, true); optimise(obj, max, presolve); cleanTmpRows(set.size()); return is_zero(getObjValue()); }
bool MtxLP::isEssential(stomap* obj, string col, bool max, bool presolve){ block(col, true); optimise(obj, max, presolve); cleanTmpRows(1); return is_zero(getObjValue()); }
double MtxLP::getOptVal(stomap* targ, bool max, bool presolve){ optimise(targ, max, presolve); return getObjValue(); }
void MtxLP::getObjStat(OBJSTAT& objstat){ objstat.objval = getObjValue(); objstat.status = getStatus(); }
static int configure( Tcl_Interp *interp, SpinButtonParams *para, GnoclOption options[] ) { int ret = TCL_ERROR; int blocked = 0; int setAdjust = 0; GtkAdjustment *oldAdjust = gtk_spin_button_get_adjustment( para->spinButton ); gfloat lower = oldAdjust->lower; gfloat upper = oldAdjust->upper; gfloat stepInc = oldAdjust->step_increment; gfloat pageInc = oldAdjust->page_increment; if( gnoclSetOptions( interp, options, G_OBJECT( para->spinButton ), -1 ) != TCL_OK ) goto cleanExit; gnoclAttacheOptCmdAndVar( options + onValueChangedIdx, ¶->onValueChanged, options + variableIdx, ¶->variable, "value-changed", G_OBJECT( para->spinButton ), G_CALLBACK( changedFunc ), interp, traceFunc, para ); if( para->onValueChanged != NULL ) { blocked = g_signal_handlers_block_matched( G_OBJECT( para->spinButton ), G_SIGNAL_MATCH_FUNC, 0, 0, NULL, (gpointer *)changedFunc, NULL ); } if( options[valueIdx].status == GNOCL_STATUS_CHANGED ) { assert( strcmp( options[valueIdx].optName, "-value" ) == 0 ); gtk_spin_button_set_value( para->spinButton, options[valueIdx].val.d ); if( para->variable ) { Tcl_Obj *obj = getObjValue( para->spinButton ); para->inSetVar++; obj = Tcl_SetVar2Ex( para->interp, para->variable, NULL, obj, TCL_GLOBAL_ONLY ); para->inSetVar--; if( obj == NULL ) goto cleanExit; } } /* if variable is set, synchronize variable and widget */ if( options[variableIdx].status == GNOCL_STATUS_CHANGED && para->variable != NULL && options[valueIdx].status != GNOCL_STATUS_CHANGED ) { Tcl_Obj *var = Tcl_GetVar2Ex( interp, para->variable, NULL, TCL_GLOBAL_ONLY ); assert( strcmp( options[variableIdx].optName, "-variable" ) == 0 ); if( var == NULL ) /* variable does not yet exist */ { Tcl_Obj *obj = getObjValue( para->spinButton ); para->inSetVar++; obj = Tcl_SetVar2Ex( para->interp, para->variable, NULL, obj, TCL_GLOBAL_ONLY ); para->inSetVar--; if( obj == NULL ) goto cleanExit; } else { double d; if( Tcl_GetDoubleFromObj( interp, var, &d ) != TCL_OK ) goto cleanExit; gtk_spin_button_set_value( para->spinButton, d ); } } if( options[lowerIdx].status == GNOCL_STATUS_CHANGED ) { assert( strcmp( options[lowerIdx].optName, "-lower" ) == 0 ); lower = options[lowerIdx].val.d; setAdjust = 1; } if( options[upperIdx].status == GNOCL_STATUS_CHANGED ) { assert( strcmp( options[upperIdx].optName, "-upper" ) == 0 ); upper = options[upperIdx].val.d; setAdjust = 1; } if( options[stepIncIdx].status == GNOCL_STATUS_CHANGED ) { assert( strcmp( options[stepIncIdx].optName, "-stepInc" ) == 0 ); stepInc = options[stepIncIdx].val.d; setAdjust = 1; } if( options[pageIncIdx].status == GNOCL_STATUS_CHANGED ) { assert( strcmp( options[pageIncIdx].optName, "-pageInc" ) == 0 ); pageInc = options[pageIncIdx].val.d; setAdjust = 1; } if( setAdjust ) { /* see also scale.c */ /* last parameter is pageSize, where it is used? */ gtk_spin_button_set_adjustment( para->spinButton, GTK_ADJUSTMENT( gtk_adjustment_new( oldAdjust->value, lower, upper, stepInc, pageInc, 0 ) ) ); /* gtk_spin_button_update( para->spinButton ); */ } /* spinButtonTraceFunc( para, interp, para->variable, NULL, 0 ); */ ret = TCL_OK; cleanExit: if( blocked ) { g_signal_handlers_unblock_matched( G_OBJECT( para->spinButton ), G_SIGNAL_MATCH_FUNC, 0, 0, NULL, (gpointer *)changedFunc, NULL ); } return ret; }
static int spinButtonFunc( ClientData data, Tcl_Interp *interp, int objc, Tcl_Obj * const objv[] ) { static const char *cmds[] = { "delete", "configure", "cget", "onValueChanged", NULL }; enum cmdIdx { DeleteIdx, ConfigureIdx, CgetIdx, OnValueChangedIdx }; SpinButtonParams *para = (SpinButtonParams *)data; GtkWidget *widget = GTK_WIDGET( para->spinButton ); int idx; if( objc < 2 ) { Tcl_WrongNumArgs( interp, 1, objv, "command" ); return TCL_ERROR; } if( Tcl_GetIndexFromObj( interp, objv[1], cmds, "command", TCL_EXACT, &idx ) != TCL_OK ) return TCL_ERROR; switch( idx ) { case DeleteIdx: return gnoclDelete( interp, widget, objc, objv ); case ConfigureIdx: { int ret = TCL_ERROR; if( gnoclParseOptions( interp, objc - 1, objv + 1, spinButtonOptions ) == TCL_OK ) { ret = configure( interp, para, spinButtonOptions ); } gnoclClearOptions( spinButtonOptions ); return ret; } break; case CgetIdx: { int idx; switch( gnoclCget( interp, objc, objv, G_OBJECT( para->spinButton ), spinButtonOptions, &idx ) ) { case GNOCL_CGET_ERROR: return TCL_ERROR; case GNOCL_CGET_HANDLED: return TCL_OK; case GNOCL_CGET_NOTHANDLED: return cget( interp, para, spinButtonOptions, idx ); } } case OnValueChangedIdx: { if( objc != 2 ) { Tcl_WrongNumArgs( interp, 2, objv, NULL ); return TCL_ERROR; } return doCommand( para, getObjValue( para->spinButton ), 0 ); } } return TCL_OK; }