Upload
leyna
View
39
Download
7
Tags:
Embed Size (px)
DESCRIPTION
Solving MINLP problems with AIMMS. Pittsburgh June 4, 2014 Marcel Hunting AIMMS Software Developer. Overview. Introducing AIMMS Generated Math Program (GMP) Outer Approximation AIMMS Presolver Implement Branch-and-Bound. AIMMS Modeling Structure. - PowerPoint PPT Presentation
Citation preview
www.aimms.com
Solving MINLP problems with AIMMS
PittsburghJune 4, 2014
Marcel Hunting AIMMS Software Developer
www.aimms.com
Overview
• Introducing AIMMS
• Generated Math Program (GMP)
• Outer Approximation
• AIMMS Presolver
• Implement Branch-and-Bound
www.aimms.com
AIMMS Modeling Structure• AIMMS, integrated &
interactive modeling system– Modeling language, integrated
GUI, direct access to solvers,advanced deployment options,and extensive development tools
www.aimms.com
AIMMS Modeling Structure• AIMMS, integrated &
interactive modeling system– Modeling language, integrated
GUI, direct access to solvers,advanced deployment options,and extensive development tools
www.aimms.com
Model generation
Variables:JobSchedule(j,s)StartTime(s,m)TimeSpan
Constraints:OneJobPerSchedule(s)OneSchedulePerJob(j)MachineStartTime(s,m)ScheduleStartTime(s,m)
Columns:
c0 … c48
c49 … c118
c119
Rows:
r0 … r6
r7 … r13
r14 … r76
r77 … r136
Solve
www.aimms.com
Generated MP
Matrix• generated columns
• generated rows
• generated matrix coefficients
• mappings from/to variables and constraints
Solution Repository
1
• solution status
• level values
• [basis information]
2
• solution status
• level values
• [basis information]
. . .
Pool of Solver Sessions
1
• solver
• option settings
2
• solver
• option settings
. . .
Symbolic MP
• symbolic variables
• symbolic constraints
Generated Math Program (GMP)
www.aimms.com
Basic GMP
Normally: solve MathProgram;
GMP: myGMP := GMP::Instance::Generate(MathProgram); GMP::Instance::Solve(myGMP);
Modify: GMP::Column::SetUpperBound(myGMP,StartTime(s1,m1),5);
www.aimms.com
Selection of GMP functions• GMP::Instance:: Generate, Solve, Copy, FixColumns,
CreateFeasibilityProblem, CreatePresolved
• GMP::Column:: Add, Delete, Freeze, SetLowerBound
• GMP::Row:: Add, Delete, SetRightHandSide
• GMP::Coefficient:: Set, Get, SetQuadratic, GetQuadratic
• GMP::Solution:: Copy, SendToModel, GetColumnValue
• GMP::Linearization:: Add, Delete
• GMP::SolverSession:: Execute, AsynchronousExecute
www.aimms.com
Outer Approximation module
• Module: GMPOuterApproximation
• Call:
myGMP := GMP::Instance::Generate( myMathProgram ) ; GMPOuterApprox::DoOuterApproximation( myGMP );
• Uses AIMMS presolver by default
• Can be combined with Multi-start module
• Quesada & Grossmann (1992) version for convex MINLP• Uses lazy constraints callback• Uses nested solve
www.aimms.com
Results AOA - COA
Problem AOA COABatchS151208M 17 6BatchS201210M 41 6CLay0205H 17 5CLay0305H 31 8FLay04H 33 2FLay05H > 3hr 172fo7_2 54 11fo9 1161 5183netmod_dol2 388 63netmod_kar1 142 5no7_ar3_1 142 265
Problem AOA COAo7 4494 629o7_ar4_1 2923 643RSyn0840M04H 7 8RSyn0840M04M 33 15SLay08H 63 5SLay09M 48 5SLay10H > 3hr 505Syn40M04H 2 2trimloss4 356 17Water0303 13 5Water0303R 22 12
www.aimms.com
Results COA: 1 versus 4 Threads
Problem 1 thr 4 thrCLay0305H 8 3FLay05H 172 62fo7_2 11 5fo9 5183 937netmod_dol2 63 22no7_ar3_1 265 33o7 629 323
Problem 1 thr 4 thro7_ar4_1 643 432RSyn0840M04H 8 8RSyn0840M04M 15 7SLay09H 17 24SLay10H 505 191trimloss4 17 13Water0303R 12 13
www.aimms.com
AIMMS Presolver
• Delete redundant constraints & fixed variables
• Bound Tightening - Feasibility based – Variable x: range [0,inf) -► range [10,55]– Linear & nonlinear constraints
• Improve coefficients (possibly using probing)
• Linearize quadratic constraints
www.aimms.com
Linearize quadratic constraints
Constraint ( binary, and continuous or integer)
Linearization:
∑𝑘𝑎𝑘𝑧𝑘=𝑥∑
𝑖𝑑𝑖 𝑦 𝑖with𝐿≤∑
𝑖𝑑𝑖 𝑦 𝑖≤𝑈
www.aimms.com
Branch-and-Bound
MINLP problem with binary variables x(i) and y(i,j).
Implement branching; choose most fractional column.
gmpBB: Generated Math Program for a node in B&B tree
www.aimms.com
Branchingfor (i) do xLev(i) := GMP::Column::GetColumnValue( gmpBB, 1, x(i) ); xHalfGap(i) := abs( xLev(i) - 0.5 );endfor;xMostFractionalColumn := ArgMin( i, xHalfGap(i) );
for (i,j) do yLev(i,j) := GMP::Column::GetColumnValue( gmpBB, 1, y(i,j) ); yHalfGap(i,j) := abs( yLev(i,j) - 0.5 );endfor;yMostFractionalColumn := ArgMin( (i,j), yHalfGap(i,j) );
MostFractionalColumn := …
www.aimms.com
Branching - Improved Vars := { ‘x’, ‘y’ }; ColNrs := GMP::Instance::GetColumnNumbers( gmpBB, Vars );
For example: ColNrs = {3,4,…,10,20,21,…,43} index: c
for (c) do Lev(c) := GMP::Column::GetColumnValue( gmpBB, 1, c ); HalfGap(c) := abs( Lev(c) - 0.5 );endfor;
MostFractionalColumn := ArgMin( c, HalfGap(c) );
www.aimms.com
Branching - Improved Vars := AllIntegerVariables;ColNrs := GMP::Instance::GetColumnNumbers( gmpBB, Vars );
For example: ColNrs = {3,4,…,10,20,21,…,43} index: c
for (c) do Lev(c) := GMP::Column::GetColumnValue( gmpBB, 1, c ); HalfGap(c) := abs( Lev(c) - 0.5 );endfor;
MostFractionalColumn := ArgMin( c, HalfGap(c) );
www.aimms.com