Beruflich Dokumente
Kultur Dokumente
Concert Technology
ILOG Scheduler
ILOG CPLEX
Hybrid
ILOG Solver
Concert Technology
Simplex Optimizer Barrier Optimizer (for LP and QP) Mixed Integer Optimizer CPLEX Interactive Optimizer CPLEX Component Libraries
CPLEX Callable Library (a C API) ILOG Concert Technology (a C++ API) Coming soon (a Java API)
Concert Technology
Facilitates easy comparisons of algorithmic technologies Makes all ILOG C++ optimization libraries easier to use
CPLEX
5
Low memory requirements Reduced runtimes for instantiating models Includes problem modifications
Concert Technology
Constraints, variables, models Row-wise modeling Column-wise modeling Piecewise Linear expressions Change any part of a model, using modeling objects Variable selection Node selection User cuts Heuristics
Problem modifications
Concert Technology
Basic Structure
Environment:
ILOG Concert memory heap that handles input/output, memory allocation, and other general services for all objects. Data facility that holds the problem descriptions. Multiple models can be used in one environment.
Model:
Concert Technology
Controlling optimization
10
11
Variable Examples
IloNumVar x(env, 0, IloInfinity, ILOFLOAT); IloIntVar y(env, 10, 25,"varY"); IloBoolVar z(env); IloFloatVarArray A1(env, 20, 0, 9999); IloNumVarArray A2(env, 10, 1, x, ILOFLOAT); IloNumVarArray A3(env, 3); A3[0] = x
12
Controlling optimization
Expressions
Addition, subtraction, multiplication and
operators to express a sum, a product, etc., the composed object is an instance of the class IloExpr
14
Summations
Compute sum of x[i]
15
Scalar Products
compute sum of c[i]*x[i] IloNumVarArray x(env,sizeX,0,IloInfinity); IloNumArray c(env,sizeX); for (IloInt i=0; i<sizeX; i++) c[i]=i; IloExpr sum = IloScalProd(c,x);
16
17
Constraints
constant <= expression <= constant Method 1 IloRange c(env,2,IloSum(x),4); model.add(c); Method 2 model.add(2 <= IloSum(x) <= 4);
18
Objective Functions
Method 1
model.add(z == IloScalProd( c, x)); model.add(IloMinimize(env, z));
Method 2
model.add(IloMinimize(env,IloScalProd(c,x)));
19
Optimizing
IloCplex cplex(model); if ( !cplex.solve() ) { env.error() << "Failed" << endl; throw(-1); } //extraction
21
.getCplexStatus() .getObjValue() .getValue(IloExpr) .getValue(IloNumVar) .getReducedCost(IloNumVar) .getSlack(IloRange) .getDual(IloRange) .getValues(IloNumArray, IloNumVarArray), ...
Second form
22
Complete Example
Facility Location
Determine set of facilities to open to satisfy
Complete Example
25
Complete Example
26
Complete Example
27
Complete Example
28
Complete Example
29
Complete Example
for(j = 0; j < nbLocations; j++) { IloExpr v(env); for(i = 0; i < nbClients; i++) v += demand[i]*supply[i][j]; model.add(v <= capacity[j] * open[j]); v.end(); }
30
Column-wise Modeling
Creating Columns
An instance of IloNumColumn enables you to
32
Column-wise Modeling
33
Column-wise Modeling
expression
Add objective and constraints to model Define columns Associate columns with variables
34
Column-wise Modeling
Column Example
IloNumVarArray Buy(env); IloRangeArray range (env, nutrMin, nutrMax); IloObjective cost = IloMinimize(env); mod.add(range); mod.add(obj); for (j = 0; j < n; j++) { IloNumColumn col = cost(foodCost[j]); for (i = 0; i < m; i++) col += range[i](nutrPer[i][j]); Buy.add(IloNumVar(col,foodMin[j],foodMax[j])); col.end(); }
35
Piecewise Function
4 3.5 3 2.5 2 1.5 1 0.5 0 1 2 3 4 5 6 7 8
37
Function
IloPiecewiseLinear(x, IloNumArray(env, 3, 4, 5, 7), IloNumArray(env, 4, -.5, 1, -1, 2), 4,2)
38
Piecewise Function
6 5 4 3 2 1 0 0 2 3 4 5 6 7 8
39
Function
IloPiecewiseLinear(x, IloNumArray(env, 4, 3, 3, 5, 5), IloNumArray(env, 5, 0, 2, .5, 1, -1), 2, 1)
40
Problem Modifications
Modification Functions
Variables
Ranges
Objective
Model
42
Problem Modifications
Modification Example
for (;;) { cutSolver.solve(); for (i = 0; i < nWdth; i++) price[i] = -cutSolver.getDual(Fill[i]); ReducedCost.setCoef(Use, price); patSolver.solve(); if (patSolver.getValue(ReducedCost) > -RC_EPS) break; patSolver.getValues(newPatt, Use); Cut.add(IloNumVar(RollsUsed(1)+Fill(newPatt)) ); } cutOpt.add(IloConversion(env, Cut, ILOINT));
43
cutSolver.solve();
Controlling Optimization
Controlling Optimization
LPs - generally easy
Try each algorithm (dual, barrier, primal) Algorithm selection Node selection Variable selection Branch selection Feasibility Cuts
45
Controlling Optimization
Algorithm Selection
setRootAlgorithm(), SetNodeAlgorithm()
46
AutoAlg* - CPLEX chooses algorithm Primal - primal simplex algorithm Dual - dual simples algorithm Barrier - barrier algorithm NetworkPrimal - network simplex on embedded network followed by primal simplex NetworkDual - network simplex on embedded network followed by primal simplex DualBarrier - dual simplex followed by barrier
Controlling Optimization
Algorithm Selection
SolveCallback()
User written routine called at each node Examine model and recent solution Determine what algorithm to use and ask CPLEX to solve Determine solution and pass to CPLEX without CPLEX solving
47
Controlling Optimization
Node Selection
.setParam(NodeSel, i)
DFS - depth-first search BestBound* - best-bound search BestEst - best-estimate search BestEstAlt - alternative best-estimate search User written routine called prior to node selection examine all remaining nodes and related information determine next node to solve
NodeCallback()
48
Controlling Optimization
Variable Selection
.setParam(VarSel, i)
MinInfeas - variable with minimum infeasibility DefaultVarSel* - variable automatically selected MaxInfeas - variable with maximum infeasibility Pseudo - branch based on pseudo costs Strong - strong branching PseudoReduced - branch based on pseudo reduced cost
49
Controlling Optimization
Variable Selection
.setPriorities(IloNumArray, IloNumVarArray)
sets priority order for all variables in the array during branch, variables with higher priority are given preference user written routine called at each node inquire about impending CPLEX branch prune the node create new branch (1 or 2) uses any number of variables
BranchCallback()
50
Controlling Optimization
Branch Direction
.setParam(BrDir, I)
BranchGlobal* - automatically determined BranchDown - down branch selected first BranchUp - up branch selected first sets the preferred direction for each variable in the array
.setDirections(IloNumArray, IloNumVarArray)
51
Controlling Optimization
Feasibility
.setParam(MIPEmphasis, I)
MIPEmphasisOptimality* MIPEmphasisFeasibility user written routine called at each node inquire current node solution change variable bounds resolve node pass new incumbent to CPLEX
HeuristicCallback()
52
Controlling Optimization
General Cuts
General cut strategies
53
Clique Cuts Cover Cuts Disjunctive Cuts Flow Cover Cuts Flow Path Cuts Gomory Fractional Cuts Generalized Upper Bound (GUB) Cuts Implied Bound Cuts Mixed Integer Rounding (MIR) Cuts
Controlling Optimization
user written routine called at each node user can add any number of new range constraints
54
Remaining Seminars
56
57