12.07.2015 Views

ILOG CPLEX 11.0 User's Manual

ILOG CPLEX 11.0 User's Manual

ILOG CPLEX 11.0 User's Manual

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

The global cut goal for lhs[i] ≤ rhs[i] is created by the method GlobalCutGoal. It isthen combined with the goal named goal by the method AndGoal, so that the new globalcut goal will be executed first. The resulting goal is stored again in goal. Before adding anyglobal cut goals, the goal is initialized asIloCplex::Goal goal = AndGoal(BranchAsCplexGoal(getEnv()), this);for C++, or for Java:cplex.and(cplex.branchAsCplex(), this);The method BranchAsCplexGoal(getEnv) ((cplex.branchAsCplex) creates a goalthat branches in the same way as the built-in branch procedure. By adding this goal, thecurrent goal will be executed for the entire subtree.Thus the goal returned by CutGoal will add all currently violated constraints as global cutsone by one. Then it will branch in the way <strong>ILOG</strong> <strong>CPLEX</strong> would branch without any goalsand execute the CutGoal again in the child nodes.Injecting Heuristic SolutionsAt any time in the execution of a goal, you may find that, for example, by slightlymanipulating the current node subproblem solution, you may construct a solution to yourmodel. Such solutions are called heuristic solutions, and a procedure that generates them iscalled a heuristic.Heuristic solutions can be injected into the branch & cut search by creating a solution goalwith the method IloCplex::GoalI::SolutionGoal (IloCplex.solutionGoal orCplex.SolutionGoal). Such a goal can be returned typically as a subgoal of an And goalmuch like global cut goals.When <strong>ILOG</strong> <strong>CPLEX</strong> executes a solution goal, it does not immediately use the specifiedsolution as a potential new incumbent. The reason is that with goals, part of the model maybe specified via global cuts or through specialized branching strategies. Thus the solutionneeds first to be tested for feasibility with respect to the entire model, including any part ofthe model specified through goals.To test whether an injected solution is feasible, <strong>ILOG</strong> <strong>CPLEX</strong> first creates a subnode of thecurrent node. This subnode will of course inherit the goal stack from its parent. In addition,the solution goal will push local cuts onto the stack of the subnode such that all variables arefixed to the values of the injected solution.By processing this subnode as the next node, <strong>ILOG</strong> <strong>CPLEX</strong> makes sure that either thesolution is feasible with respect to all goals or otherwise it is discarded. Goals that have beenexecuted so far are either reflected as global cuts or by the local cuts that are active at the<strong>ILOG</strong> <strong>CPLEX</strong> <strong>11.0</strong> — USER’ S MANUAL 439

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!