$title Test lazy constraints (LAZY01,SEQ=671) $onText This model tests the lazy constraints via the dot option .lazy At the beginning of the MIP solution process, any constraint whose Lazy attribute is set to 1, 2, or 3 for Gurobi and 1 for Cplex (the default value is 0) is removed from the model and placed in the lazy constraint pool. Lazy constraints remain inactive until a feasible solution is found, at which point the solution is checked against the lazy constraint pool. If the solution violates any lazy constraints, the solution is discarded and one of more of the violated lazy constraints are pulled into the active model. Gurobi: Larger values for this attribute cause the constraint to be pulled into the model more aggressively. With a value of 1, the constraint can be used to cut off a feasible solution, but it won't necessarily be pulled in if another lazy constraint also cuts off the solution. With a value of 2, all lazy constraints that are violated by a feasible solution will be pulled into the model. With a value of 3, lazy constraints that cut off the relaxation solution are also pulled in. Contributor: Michael Bussieck, December 2014 $offText $ifThenI %system.mip% == gurobi $set solver gurobi $elseIfI %system.mip% == gurobiold $set solver gurobiold $elseIfI %system.mip% == cplex $set solver cplex $else $abort 'Lazy constraints not available for %solver%.' $endIf $call gamslib -q cube $onEcho >> cube.gms abort$(cube.solvestat<>1 or (cube.modelstat<>1 and cube.modelstat<>8)) 'Bad model/solvestatus', cube.modelstat, cube.solvestat; abort$(abs(num.l-4)>1e-4) 'Bad num.l', num.l; $offEcho $ifThenI %solver% == gurobi $onEcho > gurobi.opt lazyconstraints yes ldef.lazy 3 $offEcho $elseIfI %solver% == gurobiold $onEcho > gurobiold.opt lazyconstraints yes ldef.lazy 3 $offEcho $elseIfI %solver% == cplex $onEcho > cplex.opt lazyconstraints yes ldef.lazy 1 $offEcho $endIf $call gams cube lo=2 mip=%solver% optfile=1 $if errorlevel 1 $abort 'problems with cube. Inspect cube.lst' * Check that we used some Lazy Constraints $ifThenI %solver% == gurobi $call grep "Extracted .* lazy constraints" cube.log > %system.nullfile% $elseIfI %solver% == gurobiold $call grep "Extracted .* lazy constraints" cube.log > %system.nullfile% $elseIfI %solver% == cplex $call grep "Problem contains .* lazy constraints" cube.log > %system.nullfile% $endIf $if errorlevel 1 $abort 'Solver did not extract lazy constraints'