18
www.aimms.com Solving MINLP problems with AIMMS Pittsburgh June 4, 2014 Marcel Hunting AIMMS Software Developer

Www.aimms.com Solving MINLP problems with AIMMS Pittsburgh June 4, 2014 Marcel Hunting AIMMS Software Developer

Embed Size (px)

Citation preview

Page 1: Www.aimms.com Solving MINLP problems with AIMMS Pittsburgh June 4, 2014 Marcel Hunting AIMMS Software Developer

www.aimms.com

Solving MINLP problems with AIMMS

PittsburghJune 4, 2014

Marcel Hunting AIMMS Software Developer

Page 2: Www.aimms.com Solving MINLP problems with AIMMS Pittsburgh June 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

Page 3: Www.aimms.com Solving MINLP problems with AIMMS Pittsburgh June 4, 2014 Marcel Hunting AIMMS Software Developer

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

Page 4: Www.aimms.com Solving MINLP problems with AIMMS Pittsburgh June 4, 2014 Marcel Hunting AIMMS Software Developer

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

Page 5: Www.aimms.com Solving MINLP problems with AIMMS Pittsburgh June 4, 2014 Marcel Hunting AIMMS Software Developer

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

Page 6: Www.aimms.com Solving MINLP problems with AIMMS Pittsburgh June 4, 2014 Marcel Hunting AIMMS Software Developer

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)

Page 7: Www.aimms.com Solving MINLP problems with AIMMS Pittsburgh June 4, 2014 Marcel Hunting AIMMS Software Developer

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);

Page 8: Www.aimms.com Solving MINLP problems with AIMMS Pittsburgh June 4, 2014 Marcel Hunting AIMMS Software Developer

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

Page 9: Www.aimms.com Solving MINLP problems with AIMMS Pittsburgh June 4, 2014 Marcel Hunting AIMMS Software Developer

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

Page 10: Www.aimms.com Solving MINLP problems with AIMMS Pittsburgh June 4, 2014 Marcel Hunting AIMMS Software Developer

www.aimms.com

Results AOA - COA

Problem AOA COA

BatchS151208M 17 6

BatchS201210M 41 6

CLay0205H 17 5

CLay0305H 31 8

FLay04H 33 2

FLay05H > 3hr 172

fo7_2 54 11

fo9 1161 5183

netmod_dol2 388 63

netmod_kar1 142 5

no7_ar3_1 142 265

Problem AOA COA

o7 4494 629

o7_ar4_1 2923 643

RSyn0840M04H 7 8

RSyn0840M04M 33 15

SLay08H 63 5

SLay09M 48 5

SLay10H > 3hr 505

Syn40M04H 2 2

trimloss4 356 17

Water0303 13 5

Water0303R 22 12

Page 11: Www.aimms.com Solving MINLP problems with AIMMS Pittsburgh June 4, 2014 Marcel Hunting AIMMS Software Developer

www.aimms.com

Results COA: 1 versus 4 Threads

Problem 1 thr 4 thr

CLay0305H 8 3

FLay05H 172 62

fo7_2 11 5

fo9 5183 937

netmod_dol2 63 22

no7_ar3_1 265 33

o7 629 323

Problem 1 thr 4 thr

o7_ar4_1 643 432

RSyn0840M04H 8 8

RSyn0840M04M 15 7

SLay09H 17 24

SLay10H 505 191

trimloss4 17 13

Water0303R 12 13

Page 12: Www.aimms.com Solving MINLP problems with AIMMS Pittsburgh June 4, 2014 Marcel Hunting AIMMS Software Developer

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

Page 13: Www.aimms.com Solving MINLP problems with AIMMS Pittsburgh June 4, 2014 Marcel Hunting AIMMS Software Developer

www.aimms.com

Linearize quadratic constraints

Constraint ( binary, and continuous or integer)

Linearization:

∑𝑘

𝑎𝑘𝑧𝑘=𝑥∑𝑖

𝑑𝑖 𝑦 𝑖with𝐿≤∑𝑖

𝑑𝑖 𝑦 𝑖≤𝑈

Page 14: Www.aimms.com Solving MINLP problems with AIMMS Pittsburgh June 4, 2014 Marcel Hunting AIMMS Software Developer

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

Page 15: Www.aimms.com Solving MINLP problems with AIMMS Pittsburgh June 4, 2014 Marcel Hunting AIMMS Software Developer

www.aimms.com

Branching

for (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 := …

Page 16: Www.aimms.com Solving MINLP problems with AIMMS Pittsburgh June 4, 2014 Marcel Hunting AIMMS Software Developer

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) );

Page 17: Www.aimms.com Solving MINLP problems with AIMMS Pittsburgh June 4, 2014 Marcel Hunting AIMMS Software Developer

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) );

Page 18: Www.aimms.com Solving MINLP problems with AIMMS Pittsburgh June 4, 2014 Marcel Hunting AIMMS Software Developer

www.aimms.com