ilp a gyakorlatban - budapest university of technology and...

Post on 16-Jan-2020

2 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

1

ILP a gyakorlatban

Tapolcai János

tapolcai@tmit.bme.hu

Az utazó ügynök probléma

• Traveling Sales Person (TSP)

• Bemenet

– irányított, összefüggő gráf G(V,E)

– Éleken költségfüggvény c

• Cél

– a gráf legrövidebb Hamilton-körét keressük (c

szerint)

• NP-nehéz

2

TSP felírása ILP-ként

• Változók – Élekhez rendelve x

• 1 – ha az él része az útnak

• 0 – különben

• Költségfüggvény – Az él költsége

• Kényszerek (Hamilton-kör)

– a gráf minden pontján pontosan egyszer

megy át • minden pont be-foka 1

• minden pont ki-foka 1

• a pontok minden S ⊂ V részhalmazának ki-foka legalább 1

3

ILP

• Exponenciális számú feltétel 4

TSP polinom méretű ILP-ként

• Miller-Tucker-Zemlin, 1960

• Feszültség kényszer

– vezessünk be egy új segédváltozót

• zi: a i ∈ V pont a Hamilton-kör éppen zi -edik

állomása legyen zv = 1

5

1

2 3 4

5

6

7

8

Feszültség kényszer

6

TSP polinom méretű ILP-vel

7

FELÍRTUK AZ ILP FELADATOT,

MI A KÖVETKEZŐ LÉPÉS?

8

ILP megoldó

9

http://plato.asu.edu/ftp/path.html

27 Mar 2014 =========================================

MILP cases that are slightly pathological

=========================================

H. Mittelmann (mittelmann@asu.edu)

Scaled shifted geometric mean of runtimes and problems solved (25 total)

--------------------------------------------------

CBC CPLEX FSCIP GUROBI SCIP XPRESS

--------------------------------------------------

15.1 1.04 8.36 1 13.4 2.29

7 25 15 25 12 19

--------------------------------------------------

28 Mar 2014 =======================================================

Mixed Integer Linear Programming Benchmark (MIPLIB2010)

=======================================================

H. Mittelmann (mittelmann@asu.edu)

Shifted geometric means of times

All non-successes are counted as max-time.

The second line lists the number of problems (87 total) solved.

1 thr CBC CPLEX GLPK GUROBI LPSOLVE SCIPC SCIPL SCIPS XPRESS

-------------------------------------------------------------------------------

scaled 12.4 1 26.5 1.04 22.8 4.03 11.3 5.57 1.34

solved 36 82 1 82 5 63 39 60 82

--------------------------------------------------------------------------------

4 thr CBC CPLEX FSCIPC FSCIPS GUROBI XPRESS

-------------------------------------------------------------

scaled 15.6 1.13 6.75 10.9 1 1.17

solved 50 84 68 64 87 86

-------------------------------------------------------------

12 thr CBC CPLEX FSCIPC FSCIPS GUROBI XPRESS

-------------------------------------------------------------

scaled 15.6 1 9.29 16.7 1 1.04

solved 57 87 69 63 87 87

-------------------------------------------------------------

http://plato.asu.edu/ftp/milpc.html 10

11

A következő lépés

• A solver-ek lényegében mátrixos formában várják az ILP feladatot

• Érdemes valami modellező nyelvet használni – AMPL

• An Algebraic Modeling Language for Mathematical Programming

• CPLEX

– GNU MathProg modeling language • Egyszerűsített AMPL GLPK-hoz

• Ingyenes

– LEMON MILP interfész

12

Működési felépítés

AMPL

solver

(CPLEX)

MPS Format

Convert to MPS Read MPS file

Call Solver Model

User Application

C++,

JAVA,

VB,

Etc…

Callable

Libraries,

API

13

AMPL model fájl

var x1 >= 0;

var x2 >= 0;

minimize total_cost:

20*x1 + 15*x2;

subject to gasoline_reqt:

0.3*x1 + 0.4*x2 >= 2.0;

subject to jetfuel_reqt:

0.4*x1 + 0.2*x2 >= 1.5;

subject to lubricant_reqt:

0.2*x1 + 0.3*x2 >= 0.5;

subject to saudi_avail:

x1 <= 9;

subject to venezuelan_avail:

x1 <= 6;

vity)(nonnegati 02,1

avail.)n (Venezuela 62

ty)availabili (Saudi 91

reqt.) (lubricant 5.023.012.0

reqt.) fuel(jet 5.122.014.0

reqt.) (gasoline 0.224.013.0 s.t.

cost) (total 1520min 21

xx

x

x

xx

xx

xx

xx

.mod kiterjesztésű txt fájl

14

AMPL futtatása 1. AMPL licensz (fizetős szoftver)

2. C:\APML101\ampl.exe

AMPL TSP feladatra (tsp.mod) param n >= 1, integer; # number of vertices

param m >= 1, integer; # number of edges

set V := 1..n;

set E within {V,V};

param c{E}; # edge weights

var x{E} binary;

var z{E} integer;

minimize lenght :

sum{(u,v) in E} x[u,v] * c[u,v];

subject to befok {v in V} :

sum{u in V: (u,v) in E} x[u,v] <= 1;

15

AMPL TSP feladatra

param n := 10; # of nodes

param m := 12; # of arcs

# edge : cost indicator

param : E : c :=

4 9 1

6 10 1

7 10 1

2 8 1

8 7 1

4 1 1

5 3 1

;

model tsp.mod;

data graph.dat;

option solver cplex;

solve;

display x;

model tsp.mod;

data graph.dat;

option solver cplex;

solve;

display x;

16

Graph.data Graph.data

LEMON

• ELTE-n fejlesztik

– http://lemon.cs.elte.hu

• C++ template könyvtár gráfokhoz

– Nyílt forráskódú

• Graphviz

– http://www.graphviz.org/

• Boost Graph Library

– http://www.boost.org/doc/libs/1_42_0/libs/graph/doc/index.html

• igraph

– http://igraph.sourceforge.net/introduction.html

• OGDF

– http://www.ogdf.net/ogdf.php?id=

17

Gráfok LEMONban

• Gráf létrehozása

using namespace lemon;

ListDigraph g;

• Élek és pontok hozzáadása

ListDigraph::Node u = g.addNode();

ListDigraph::Node v = g.addNode();

ListDigraph::Arc a = g.addArc(u,v);

• És törlése

g.erase(a);

g.erase(v);

18

Map-ek LEMONban

• Map létrehozása

– Ha változókat akarunk élekhez vagy pontokhoz

rendelni ListDigraph::NodeMap<std::string> label(g);

ListDigraph::ArcMap<int> cost(g);

• Accessing map values label[s] = "source";

cost[e] = 2 * cost[f];

• Automatikus

– Pl. törlődik, ha élt törölsz 19

.lgf LEMON fájl formátum

@nodes

label coordinate

0 (20,100)

...

41 (600,100)

@arcs

label cost

0 1 0 16

...

36 41 123 21

@attributes

source 0

• Egy paranccsal beolvasható a

gráf using namespace lemon;

ListDigraph g;

Graph::ArcMap<int> cost(g);

Graph::NodeMap<dim2::Point<int>>

coord(g);

digraphReader(g, "input.lgf")

.nodeMap("coord", coord)

.arcMap("cost", cost)

.run();

20

LEMON MILP interfész

• Solver-ek

– GLPK: open source (GNU license)

– Clp, Cbc: open source (COIN-OR LP and MIP

solvers)

– CPLEX: commercial

– SoPlex: academic license

– Gurobi: free academic licence

• Fordításnál össze kell linkelni a solver lib-jével

– Callable library

21

Példa LP feladat

Lp lp;

Lp::Col x1 = lp.addCol();

Lp::Col x2 = lp.addCol();

lp.max();

lp.obj(10 * x1 + 6 * x2);

lp.addRow(0 <= x1 + x2 <= 100);

lp.addRow(2 * x1 <= x2 + 32);

lp.colLowerBound(x1, 0);

lp.solve();

std::cout << "Solution: " << lp.primal() << std::endl;

std::cout << "x1 = " << lp.primal(x1) << std::endl;

std::cout << "x2 = " << lp.primal(x2) << std::endl;

22

Példa MIP TSP

Mip mip;

Graph::ArcMap<Mip::Col> x(g);

for(ArcIt e(g);e!=INVALID;++e){

x[e]=mip.addCol();

mip.colBounds(x[e],0,1);

mip.colType(x[e], Mip::INTEGER);

}

for(NodeIt n(g);n!=INVALID;++n){

Mip::Expr eq;

for(OutArcIt e(g,n);e!=INVALID;++e) eq+=x[e];

mip.addRow(eq==1);

}

23

Példa MIP (folyt) mip.min();

Mip::Expr obj;

for(ArcIt e(g);e!=INVALID;++e)obj+=x[e]*cost[e];

mip.obj(obj);

mip.solve();

if (mip.type() == Mip::OPTIMAL) {

cout<< "Objective function value: " << mip.solValue();

ListDigraph::ArcMap<int> res(g);

for(ArcIt e(g);e!=INVALID;++e)

res[a]=mip.sol(x[e]);

IdMap<Graph,Node> idn(g);

graphToEps(g,„result.eps").

nodeTexts(idn).

coords(coords).

arcWidths(res).run();

}

24

C++ környezetben könnyen

értelmezhetjük az eredményt

ILP SOLVER MŰKÖDÉSE

25

26

[www.ilog.com ]

Branch-and-Bound módszere

May 22, 2007 27

Branch and Bound fa

• Megfelelő tört változó kiválasztása

• Megfelelő BB pont kiválasztás

• Cutting plane módszerekkel ötvözve – Branch and cut

Hatékonyság

• ILP-t akkor lehet hatékonyabban

megoldani ha a relaxált és az egész

megoldás között kicsi a GAP

28

Chvátal-Gomory vágások

29

n

j

ijji bxa1

,

n

j

ijji ubxua1

,0u

n

j

ijji ubxua1

,

egész

n

j

ijji ubxua1

,

0,

591110..

65min

21

21

21

xx

xxts

xx

10

1521 uxx

.

. .

. . .

. . . .

. . . . .

x1

x2

CPLEX log

31

Aktuálisan

megoldott LP

költsége

Itt vágásokat

generál

Best Node

32

Jól választott

BB pontot

Best Integer

33

Egyre jobb

megoldásokat talál.

Jól választott kerekített

változókat

Heurisztikák

34

MITŐL JÓ EGY ILP FELÍRÁS?

35

Facility location

• Bement:

– n lehetséges terület raktár építésére, melyeknek ára cj.

– m darab bolt szállítási költség dij (i. bolttól a j. raktárba)

• Kimenet

– Melyik területeken építsünk raktárakat?

– Az egyes boltok melyik raktárból kapják az árut?

36

Facility location - ILP

• PF1 PF2

– Ahol PX a relaxált LP-hez tartozó polyhedront jelenti

37

i

i,j

i,j

i

j

i,j

n+nm kényszer n+m kényszer

F1 F2

Geometriai ábrázolása

38

x1 ≤ y

x2 ≤ y x1+ x2 ≤ 2y

Minimális költségű feszítő fa

• Változók – Élekhez rendelve x

• 1 – ha az él része a fának

• 0 – különben

• Költségfüggvény – Az él költsége

39

Él-független feszítőfák

• Bement: G gráf

• Kimenet: két él-független feszítőfa

• Változók – x minden élhez

• 1 – ha az él része az egyik fának

• 0 – különben

– y minden élhez

• 1 – ha az él része a másik fának

• 0 – különben

• Kényszerek

– Mint feszítő fáknál x-re és y-ra

– xe+ye 1 minden e-re

40

1 1

1 1

1 1

1 1

1

Pont-független feszítőfák

• A gráf tetszőleges két u és v pontja között

a két fában vezető út pont-független

– Hasunuma, 2000

– NP-nehéz

• ILP-t írjuk fel rá

– Jelölje Tx és Ty a két fát

41

Észrevétel

• Adott Tx vagy Ty pont-független fában a gráf

bármely v pontja legfeljebb egy fában lehet

belső pont.

– Biz: Indirekt.

• Vissza felé is igaz: ha a gráf minden v pontja

legfeljebb egy fában belső pont és a két fa él-

független, akkor Tx vagy Ty pont-független.

– Biz: Indirekt 42

Példa

43

top related