ilp a gyakorlatban - budapest university of technology and...
Post on 16-Jan-2020
2 Views
Preview:
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