adamik réka - web.cs.elte.huweb.cs.elte.hu/blobs/diplomamunkak/bsc_matelem/2017/adamik_reka.pdf ·...
TRANSCRIPT
Eötvös Loránd Tudományegyetem
Természettudományi Kar
Áruszállítási feladat optimalizálása egészértékű
programozási modellekkel
Adamik Réka
BSc szakdolgozat
Témavezető:
Bérczi-Kovács Erika
Adjunktus
Operációkutatási Tanszék
Budapest, 2017
Köszönetnyilvánítás
Ezúton szeretnék köszönetet mondani témavezetőmnek, Bérczi-Kovács Erikának, a ren-
geteg támogatásért, biztatásért és motiváló hozzáállásáért. Köszönet illeti, amiért mindig
bizalommal fordulhattam hozzá kérdéseimmel. Nélküle nem jöhetett volna létre ez a dol-
gozat.
Hálával tartozom családomnak, akik tanulmányaim alatt végig támogattak és nyugodt
hátteret biztosítottak számomra.
Végül, de nem utolsó sorban szeretném megköszönni a barátaimnak és páromnak a sok
támogatást, amit az elmúlt években kaptam tőlük és a biztatást a szakdolgozatom meg-
írása alatt.
2
Tartalomjegyzék
1. Bevezetés 5
1.1. Alapfogalmak . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2. Utazó ügynök probléma - TSP 9
3. Különböző egészértékű programozási modellek vizsgálata az aszimmet-
rikus utazó ügynök problémára 10
3.1. A 8 modell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
3.1.1. Hagyományos modell - C . . . . . . . . . . . . . . . . . . . . . . . . 11
3.1.2. Szekvenciális modell - S . . . . . . . . . . . . . . . . . . . . . . . . 11
3.1.3. Folyamalapú modell 1 árura - F1 . . . . . . . . . . . . . . . . . . . 12
3.1.4. Folyamalapú modell 2 árura - F2 . . . . . . . . . . . . . . . . . . . 13
3.1.5. Folyamalapú modell több árura - F3 . . . . . . . . . . . . . . . . . 13
3.1.6. Időalapú modell - T1 . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3.1.7. Időalapú modell - T2 . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3.1.8. Időalapú modell - T3 . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3.2. A modellek összegzése . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3.3. Az LP formulák összehasonlítása . . . . . . . . . . . . . . . . . . . . . . . 16
4. Áruszállítási feladat optimalizálása 19
4.1. Alkatrész kiszállítási feladat megfogalmazása, pontosítása . . . . . . . . . . 19
4.2. Matematikai kapcsolatok . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
4.3. A modellalkotás . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
4.3.1. Két kör esete fix körméretekkel . . . . . . . . . . . . . . . . . . . . 22
4.3.2. Független körméret esete . . . . . . . . . . . . . . . . . . . . . . . . 24
4.3.3. Több kör esete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
4.3.4. Időkorlát megadása . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
5. Futási eredmények 27
6. Összefoglalás 28
3
7. Függelék 29
8. Hivatkozások 32
4
1. Bevezetés
A szakdolgozatom célja, hogy egy olyan problémát, ami a nagyvállalatok életében folya-
matosan fent áll, átvezessek a matematika és a programozás világába és ott egy minél
pontosabb, minél könnyebben megvalósítható megoldást találjak.
Ez a probléma nem más, mint az utazó ügynök probléma (TSP-Traveling Salesman
Problem) egy változata, ennek finomításával jutottam a későbbiekben ismertetett megol-
dáshoz.
A feladat egy konkrét, valós probléma, ami egy alkatrészekkel kereskedő vállalat életé-
ben van jelen. Rengeteg partnerük van, többségében szerelőműhelyek és részükre szállíta-
nak alkatrészeket. Jelenleg egy megszokáson alapuló algoritmusuk van azzal kapcsolatban,
hogy a rendelkezésükre álló 10 darab furgon mely utakon induljon el a kiszállításnál, hogy
a lehető legolcsóbban bejárják a partnereiket és leszállítsák a megrendelt alkatrészeket.
Azt a problémát fogom vizsgálni, hogy milyen algoritmus lehet a segítségükre, hogy az épp
aktuális adatok alapján ki tudják számolni a legrövidebb vagy legolcsóbb utat megadott
kritériumok mellett.
Az első fejezetben néhány, a témához kapcsolódó tételt, definíciót és összefüggést te-
kintünk át. A második fejezetben mutatom be az utazó ügynök problémát valamint annak
két válfaját. Ezt követően a harmadik fejezetben 8 megoldási modellt mutatok be a TSP
feladat aszimmetrikus változatára, majd azok összehasonlítását ismertetem. A negyedik
fejezetben konkretizálom a megoldásra váró feladatot. Részletesen bemutatom a problé-
mát, megfogalmazom, hogy milyen kapcsolódási pontjai vannak a matematikához, majd
a modellalkotás lépéseit vizsgáljuk. Ezt követően az ötödik fejezetben futási eredménye-
ket és kimutatásokat mutatok be a megoldással kapcsolatban. A hatodik fejezetben pedig
ismertetem végső eredményem és a konklúziót.
5
1.1. Alapfogalmak
Mindenekelőtt szükség van olyan fogalmak definiálására, amik elengedhetetlenek a felada-
tok bemutatásánál és megértésénél. Először a gráfelmélet néhány definícióját ismertetem,
melyek az utazó ügynök probléma nélkülözhetetlen alapjai.
1. Definíció. (Gráf egy útja) Útnak nevezzük a gráf egymáshoz csatlakozó éleinek olyan
sorozatát, amely egyetlen ponton sem megy át egynél többször.
2. Definíció. (Gráf egy köre) Körnek nevezzük a gráf egymáshoz csatlakozó éleinek olyan
sorozatát, amely a kezdőpontjába tér vissza és benne minden él csak egyszer szerepel,
valamint minden belső pontot maximum egyszer érint.
3. Definíció. (Hamilton-út) Egy utat Hamilton-útnak nevezünk, ha a gráf összes pontját
érinti.
4. Definíció. (Hamilton-kör) Egy G gráfban Hamilton-körnek nevezünk egy kört, ha a
gráf összes pontját érinti.
A Hamilton-kör a nevét Sir William Rowan Hamiltonról kapta.1972-ben Richard Karp
bebizonyította, hogy a probléma NP-nehéz, azaz nem várható polinom idejű algoritmus
a megoldására.([4], [7]) A következőkben szükséges és elégséges feltételeket mutatok be a
Hamilton kör létezésével kapcsolatban.
1. Tétel. (Szükséges feltétel Hamilton-út létezésére)([6]) Ha egy Hamilton-utat tartalma-
zó gráfból k csúcsot kitörlünk (a belőle kiinduló élekkel együtt), akkor a maradék gráfnak
legfeljebb k + 1 komponense van.
A következőkben 3 olyan tételt ismerhetünk meg, melyek elégséges feltételt adnak
Hamilton-kör létezésére egy gráfban.
2. Tétel. (Ore-tétel)([6]) Legyen G = (V,E) egy egyszerű gráf, melyben teljesül a kö-
vetkező feltétel: bármely két x, y ∈ V pontra, melyekre d(x) + d(y) < n, teljesül, hogy
(x, y) ∈ E. Ekkor G-ben létezik Hamilton-kör.
6
Bizonyítás: Tegyük fel indirekt, hogy a gráf kielégíti a feltételt, de nincsen benne Hamilton-
kör. Ez az ellenpélda gráfunk legyen G′. Húzzunk be G′-be további éleket úgy, hogy az új
gráf is ellenpélda legyen (továbbra sincs benne Hamilton-kör). Így kapunk egy G gráfot,
ami továbbra is ellenpélda, hisz új élek behúzásával "rossz pontpárt" nem lehet létrehoz-
ni, de ha még egy élet akárhogyan behúzunk, akkor már tartalmaz a gráf Hamilton-kört.
Biztosan van két olyan pont, hogy x, y /∈ E(G), hiszen egy n csúcsú teljes gráfban van
Hamilton-kör. Ekkor viszont a G ∪ {x, y} gráfban van Hamilton-kör, tehát G-ben van
Hamilton-út. Legyenek a P Hamilton-út csúcsai: v1, v2, ..., vn, és v1 = x és vn = y. Ha x
szomszédos a P út valamely vi+1 pontjával, akkor y nem lehet összekötve vi-vel, mert ez
esetben (v1, v2, ..., vi, vn, vn−1, ..., vi+1, v1) egy Hamilton-kör lenne. Így tehát y nem lehet
összekötve legalább d(x) darab ponttal, ezért
d(y) ≤ n− 1− d(x)
d(y) + d(x) ≤ n− 1
ami viszont ellentmondás, hiszen d(y) + d(x) ≥ n volt feltéve.
3. Tétel. (Dirac-tétel)([6]) Ha egy n(> 2) csúcsú egyszerű gráfban minden pont foka
legalább n/2, akkor a gráfban van Hamilton-kör (azaz olyan kör, amely minden ponton
átmegy).
Bizonyítás: A Dirac-tétel feltétele teljesíti az Ore-tétel feltételeit, így abból következik.
4. Tétel. (Pósa-tétel)([6]) Legyenek G n csúcsú egyszerű gráf fokszámai nagyság szerint
d1 ≤ d2 ≤ ... ≤ dn. Ha minden k < n2-re dk ≥ k+1 teljesül, akkor G-ben van Hamilton-kör.
Az eddig megismert fogalmakkal már le tudjuk írni, valamint meg tudjuk érteni az
utazó ügynök problémát és annak különböző megoldási modelljeit. Ahhoz azonban, hogy
a formulák jóságát és egymáshoz viszonyított erősségét vizsgáljuk, szükség van a következő
fogalmak megismerésére.
5. Definíció. (Egészértékű programozási feladat) Amennyiben egy optimalizálási problé-
ma minden változójáról megköveteljük, hogy egészértékű legyen, akkor egészértékű progra-
mozási feladatról beszélünk. Alapfeladat:
max cx,
7
Ax ≤ b
x ∈ Zn, A ∈ Zn×n, b ∈ Zn
6. Definíció. (IP feladat LP relaxációja) Az előző definícióban szereplő IP feladat LP-
relaxáltja:
max cx
Ax ≤ b
x ∈ Rn, A ∈ Rn×n, b ∈ Rn
7. Definíció. (Poliéder, politóp) Lineáris egyenlőtlenség-rendszer megoldáshalmaza. A
korlátos poliédert politópnak nevezzük.
8. Definíció. (Fourier-Motzkin elimináció) Az elimináció egy véges, bár exponenciális
futásidejű eljárás a lineáris egyenlőtlenség-rendszerek megoldására. A módszer alapgondo-
lata, hogy egy n változós esetet előbb n-1 változós , majd ennek a lépésnek megismétléseivel
egy egyváltozós esetre vezet vissza.
A fejezetet a [4], [5] és a [6] jegyzetek, valamint a véges matematika és optimalizálás órai
jegyzetek alapján dolgoztam fel.
8
2. Utazó ügynök probléma - TSP
9. Definíció. (Utazó ügynök probléma) Adott n db város, továbbá azok egymástól mért
távolsága és egy ügynök. Adott városból indulva, minden egyes pontot érintenie kell az
ügynöknek pontosan egyszer, majd vissza kell érnie a kiinduló városba. A feladat, hogy ezt
a legrövidebb úton tegye meg.
Tehát az utazó ügynök definícióját a gráfelméletbe átültetve láthatjuk, hogy amennyi-
ben a városokat egy gráf pontjainak feleltetjük meg és a városok közötti távolságokat a gráf
súlyozott éleinek, akkor a feladat az adott gráfban a legolcsóbb Hamilton-kör megkeresése.
A pontosabb kép érdekében először is két nagy csoportra bontom a TSP alapfelada-
tot, a szimmetrikus és az aszimmetrikus utazó ügynök problémára. Alapvető különbség
közöttük, hogy a szimmetrikus TSP-ben a távolság két város között mindkét irányban azo-
nos, azaz vi városból vj városba ugyanolyan hosszú út vezet, mint vj-ből vi-be. Ilyenkor
a feladatot irányítatlan gráffal modellezhetjük. Az aszimmetrikus TSP irányított gráffal
modellezhető: itt két város között az oda-vissza út nem biztos, hogy azonos hosszúságú,
sőt nem is biztos, hogy létezik mindkettő. Ilyenre példa a forgalmi dugó vagy az egyirányú
út esete.
A feladat típusától függően más-más módszer vezethet a jó megoldáshoz. A folytatás-
ban bemutatok néhány formulát az aszimmetrikus TSP-re, ami valamelyest közelebb áll a
későbbiekben definiált feladathoz, hiszen ott is egy olyan áruszállítási problémáról fogok
beszélni, ami Magyarország útjain zajlik, ahol előfordulhatnak akár egyirányú utak is.
A fejezetet az [1] jegyzet segítségével dolgoztam fel.
9
3. Különböző egészértékű programozási modellek vizs-
gálata az aszimmetrikus utazó ügynök problémára
Ebben a fejezetben 8 különböző egészértékű programozási formulát ismerünk meg az
aszimmetrikus utazó ügynök problémára, valamint azok összehasonlítását vizsgáljuk. A
TSP feladatot innentől gráfelméleti feladatként kezeljük, tehát a későbbiekben a csúcs/pont
fogalom egy-egy várost takarnak az él pedig két várost (közvetlenül) összekötő utat jelöl.
Emellett az 1-es város lesz a kiinduló-, valamint a végpontja az ügynök útjának.
3.1. A 8 modell
Minden formulában a következő jelöléseket használjuk:
N = 1, 2, ..., n
xi,j ∈ 0,1 lineáris változó (1 ≤ i,j ≤ N, i 6= j)
xi,j=
1, ha vi, vj közti él része a túrának és i 6= j
0, egyébként és i 6= j
ci,j= vi és vj pontok közti út hossza
célfüggvény:
min(c · x) (1)
A formuláknál alapvető hasonlóság, hogy különböző megkötéseket adunk, amelyek segít-
ségével eljutunk a megoldáshoz. A különbség köztük ott rejtőzik, hogy milyen feltételeket
adunk, mely irányból próbáljuk erősíteni a kikötéseket.
∑j
xi,j = 1, (j 6= i) ∀i ∈ N (2)
∑i
xi,j = 1, (i 6= j) ∀j ∈ N (3)
Az előző két feltétel minden modellben benne van. A kikötésekkel azt mondjuk, hogy
minden csúcsba pontosan 1 olyan él vezet be (2) és pontosan 1 olyan él hagyja el (3),
10
melyek benne vannak az ügynök útjában. Azonban ez a két feltétel még nem biztosan
vezet jó megoldásra, ugyanis hozhat olyan eredményt, ami több diszjunkt kör unióját
adja és nem egy Hamilton-kört talál meg a gráfon. Ennek a kiküszöbölésére kell még
plusz feltételeket adnunk, amiket a következőkben ismertetek.
3.1.1. Hagyományos modell - C
A következő kikötéseket tartalmazza a modell:∑i, j∈M, i 6=j
xi,j ≤ |M | − 1, ∀M ⊂ N, 1 /∈M, |M | ≥ 2 (4)
A csúcsok halmazának egy M részhalmazára igaz, hogy a benne található csúcsok
között maximum |M | − 1 db olyan él vezet (4), melyen áthalad az ügynök.
A fenti formula 2n + 2n − 2 db kikötést tartalmaz és n(n − 1) db bináris változót. Az
exponenciális számú kikötés nem teszi lehetővé, hogy direkt oldjuk meg a feladatot.
Ennek a módszernek egy másik változata is létezik, mely a vágásokon értelmezett. Ezt
úgy kapjuk, hogy a (4)-est helyettesítjük a következővel:∑i∈M, j∈M ′
xi,j ≥ 1, ∀M ⊂ N, ahol 1 ∈M valamint M ′ = N −M (5)
Mint láthatjuk, az (5) kikötést megkaphatjuk, ha a (2) megkötést összeadjuk ∀i ∈ M -re
és kivonjuk a (4)-ből. Mivel a két verzió egymásra átírható, ezért nem definiáljuk külön
őket.
3.1.2. Szekvenciális modell - S
(2)-es és (3)-as kikötések mellett bevezetünk egy folytonos változót. Az ui változó jelöli,
hogy az i. várost hányadikként látogatja meg az ügynök.(i 6= 1) Formulához tartozó
kikötés ((2) és (3) mellett):
ui − uj + nxi,j ≤ n− 1 ∀i, j ∈ N − {1}, i 6= j (6)
(6)-os kikötéssel azt határozzuk meg, hogy amennyiben i és j csúcsok közötti él benne van
az ügynök útjában, úgy ui értéke legalább 1-gyel legyen kisebb mint uj értéke (hiszen akkor
xi,j = 1, és ezt behelyettesítve kapjuk, hogy ui−uj ≤ −1). Amennyiben i, j csúcsok között
11
nem vezet él az ügynök körében, úgy is igaz a becslés, mert n csúcsú gráfban n darab
élből áll a Hamilton-kör így ha két csúcsra vizsgálódunk ui és uj különbsége maximum
n− 1 lehet.
Ebben a formulában n2−n+2 feltétel, n(n− 1)db bináris és (n− 1) db folytonos változó
található.
3.1.3. Folyamalapú modell 1 árura - F1
A (2)-es és (3)-as kikötések megmaradnak és bevezetünk melléjük egy yi,j folytonos válto-
zót. Tegyük fel, hogy az ügynök autókat árul és minden városban 1 darab autót szeretne
eladni. Kezdetben n darab autóval rendelkezik. Az yi,j változó azt fogja jelenteni, hogy
hány darab autója van még az ügynöknek az (i, j) élen, tehát miután elhagyta i csúcsot
de még nem ért j-be (i 6= j).
yi,j ≤ (n− 1)xi,j ∀i, j ∈ N i 6= j (7)∑j, j 6=1
y1,j = n− 1 (8)
∑i, i6=j
yi,j −∑k, i 6=k
yj,k = 1 ∀j ∈ N − {1} (9)
A (7)-es kikötés jelentése, hogy amennyiben egy olyan élt vizsgálunk, ami eleme az ügynök
körének, úgy ott maximum n− 1 darab autóval rendelkezhet (hiszen ilyenkor már 2 csúcs
között jár, azaz egyet elhagyott, ahol már eladott egy autót). (8)-as és (9)-es kikötések
hozzák azt a korlátozást, hogy minden egyes városban pontosan 1 autót ad el az ügynök.
A (7)-es feltételt tudjuk tovább szorítani(F1’):
yi,j ≥ (n− 2)xi,j ∀i, j ∈ N − 1, i 6= j
Ebben a formulában n(n + 2) darab kikötés, n(n − 1) darab bináris és n(n − 1) darab
folytonos változó található.
Ezzel a modellel a későbbiekben még találkozni fogunk a feladatmegoldással kapcso-
latban.
12
3.1.4. Folyamalapú modell 2 árura - F2
Az F2 modell nagyban hasonlít az F1-re. Különbség a kettő között, hogy az F2 formulában
nem 1 áru (autó) mozgását vizsgáljuk, hanem 2 áruét. Ennek megfelelően az yi,j folytonos
változó meghagyása mellett bevezetjük a zi,j változót.∑j, j 6=1
y1,j − yj,1 = n− 1 (10)
∑j
(yi,j − yj,i) = −1 ∀i ∈ N − {1}, i 6= j (11)
∑j, j 6=1
(z1,j − zj,1) = −(n− 1) (12)
∑j
(zi,j − zj,i) = 1 ∀i ∈ N − {1}, i 6= j (13)
∑j
(yi,j + zi,j) = n− 1 ∀i ∈ N (14)
(yi,j + zi,j) = (n− 1)xi,j ∀i, j ∈ N (15)
A (10)-es, (11)-es, (12)-es és (13)-as kikötésekkel határoztuk meg, hogy minden egyes vá-
rosban pontosan 1-1 db áru legyen mindkét fajta termékből. A (14)-es feltétel azt mondja,
hogy egy adott (i, j) élen pontosan n− 1 az összege a két áru azon élen felvett értékének.
Végül a (15)-ös kikötés azt mondja, hogy csak azokon az éleken legyen értéke yi,j-nek és
zi,j-nek, amelyeken áthalad az ügynök. Az y változó a kezdő 1-es csúcsba n autóval indul,
addig a z változó 0 darab termékkel, és minden egyes meglátogatott csúcsot követő élen
egyre nő az értéke, egészen visszaérkezéséig a kiinduló csúcsba.
3.1.5. Folyamalapú modell több árura - F3
A (2)-es és (3)-as kikötést ismételten felhasználjuk ebben a formulában is valamint mel-
léjük bevezetünk egy új yki,j folytonos változót. Ennél a modellnél n− 1 darab külön áru-
szállítást végzünk, minden egyes csúcsba egyet és k ∈ N . A változó értéke 1, amennyiben
i, j él benne van a k csúcshoz való áruszállítás útjában.
A formulához tartozó további kikötések:
yki,j ≤ xi,j ∀i, j, k ∈ N (16)
13
∑i
yk1,i = 1 ∀k ∈ N − {1} (17)
∑i
yki,1 = 0 ∀k ∈ N − {1} (18)
∑i
yki,k = 1 ∀k ∈ N − {1} (19)
∑j
ykk,j = 0 ∀k ∈ N − {1} (20)
∑i
yki,j −∑i
ykj,i = 0 ∀j, k ∈ N − {1}, j 6= k (21)
A (16)-os kikötés miatt az yki,j csak azon az élen vehet fel 1-et, ahol az ügynök áthalad
rajta, minden más esetben értéke 0. Tehát csak ott folyhat áru, ahol az ügynök áthalad.
A (17)-es feltétel miatt minden áru pontosan 1 élen haladhat át az 1-es csúcsból és nem
folyhat be az 1-es csúcsba a k=2,3,..., n csúcshoz tartó áru ((18)-as feltétel). Ezzel tehát
meghatároztuk, hogy mindig az 1-es csúcsból induljon, hiszen mindenképp indul ki belőle
él, de be nem érkezik. A (19)-es és a (20)-as feltételekkel azt mondjuk, hogy a k. áruból a k.
városba 1 folyjon be, de ki egy sem. Végül a (21)-es feltétellel egy egyensúlyt teremtünk,
hogy ha egy városba (ami nem a k. város) befolyik a k. áru, akkor onnan haladjon is
tovább.
Ebben a formulában n3 + n2 + 6n − 3 megkötés, n(n-1) bináris és n(n − 1)2 folytonos
változó volt.
3.1.6. Időalapú modell - T1
Annak érdekében, hogy a későbbiekben könnyebb legyen az összehasonlítás a többi mo-
dellel hasznos (de nem szükséges), hogy megtartsuk az xi,j változót. Ennél a modellnél
bevezetünk egy új, bináris változó típust:
yti,j=
1, ha az (i,j) él keresztül megy a t. szakaszon
0, egyébként
Ahol t = 1, 2, ..., n jelöli a t. szintet, ami alatt azt kell érteni, hogy hányadik lépés, azaz
hányadik alkalommal hagyunk el egy pontot. Azért n darab értéket vehet fel t, mert egy
n csúcsú gráfban keressük a Hamilton-kört, így n darab élt fog tartalmazni, így pontosan
14
n alkalommal kell "szintet lépni". Ehhez kapcsolódó kikötések:∑i, j, t
yti,j = n (22)
∑j, t,t≥2
tyti,j −∑k, t
tytk,i = 1 ∀i ∈ N − {1} (23)
xi,j −∑t
yti,j = 0 ∀i, j ∈ N, i 6= j (24)
yti,1 = 0 ∀t 6= n, yti,j = 0 ∀t 6= 1, y1i,j = 0 ∀i 6= 1, i 6= j (25)
Annak érdekében, hogy minden pontot pontosan egyszer látogassunk, felírtuk a (22)-es
feltételt. A (23)-es feltételnek köszönhetően, garantáljuk, hogy ha egy városba a t. szinten
beléptünk, akkor a t + 1-ik szinten kilépünk belőle. A (25)-os feltétel pedig az első város
korlátozását mondja ki, azaz azt a várost az első szinten hagyjuk el és az n. szinten lépünk
be.
Ebben a modellben n(n+ 2) feltételt és n(n− 1)(n+ 1) bináris változót találunk.
3.1.7. Időalapú modell - T2
A T2 formulánál ugyanazokat a változókat használjuk, mint korábban a T1 formulánál és
a(2), (3) valamint a (25) feltételt a következőkkel együtt:∑i, t, i 6=j
yti,j = 1 ∀j ∈ N (26)
∑j, t, j 6=i
yti,j = 1 ∀i ∈ N (27)
∑i, j 6=i
yti,j = 1 ∀t ∈ N (28)
∑j, t, t≥2
tyti,j −∑k, t
tytk,i = 1 ∀i ∈ N − {1} (29)
Ez a T1 formula egy kibontott alakja, ahol 4n − 1 feltétel valamint n(n − 1)(n + 1)
bináris változó található.
15
3.1.8. Időalapú modell - T3
Ebben a formulában is a korábban (T1-ben és T2-ben) látott változókat használjuk va-
lamint ismét megtartjuk a (2), (3) és a (25) feltételeket. Néhány új feltétel bevezetésével
tesszük teljessé a modellt. ∑j
y11,j = 1 (30)
∑i
yni,1 = 1 (31)
∑j
yti,j −∑k
yt−1k,i = 0 ∀i, t ∈ N − {1} (32)
A (30)-as feltétel kényszeríti az 1. várost, hogy az első szinten hagyjuk el és a (31)-es
feltétel kényszeríti, hogy az n. szinten lépjünk bele. A (32)-es feltétel hatása megegyezik
a (23)-as feltétel hatásával, azaz, hogy ha a t. szinten lépünk egy városba, akkor a t+1-ik
szinten hagyjuk el.
Ebben a formulában 2n2 − n+ 3 feltétel és n(n− 1)(n+ 1) bináris változó található.
A három időalapú formulában amennyiben elhagyjuk a (25)-ös feltételt valamint az xi,j
változót, akkor le tudnánk csökkenteni a változók számát. Emellett az yti,j változókat
tekinthetnénk folytonos változóként.
3.2. A modellek összegzése
A hagyományos(C) formula kivételével mindegyik esetben polinomikus számú (n-ben)
feltételünk volt, így azok sokkal vonzóbbak, mint a hagyományos. A feltételek száma
azonban még így is nagy és az LP relaxáció gyenge lehet, ezt a tényezőt vizsgáljuk a
következő alfejezetben.
3.3. Az LP formulák összehasonlítása
Mind a 8 formula, amit korábbiakban láthattunk felírható a következő formában:
min(cx)
Ax+By ≤ b (33)
x, y ≥ 0
16
Az xi,j változók vektora x, valamint az y a különböző vektorok, amiket S, F és T
formulákban használtunk. A szekvenciális és a folyamalapú formuláknál az y folytonos
változót jelent, míg az időalapú formulánál egészértékű változó.
Az összehasonlítás megkönnyítése érdekében el tudjuk hagyni az y változókat úgy, hogy
csak x változókat tartalmazó modellünk legyen. Mivel 0 ≤ xi,j ≤ 1, ezért a kapott poliéder
politóp és az LP relaxációk politópjainak nagysága összehasonlíthatóvá válik ezután. Egy
M modellből származó LP relaxáció politópja P(M).
T1 formulában az y változónak egész értékűnek kell lennie. Itt a változó kihagyása
sokkal komplexebb és nem biztos hogy jó megoldásra vezetne később (nem feltétlenül
egészértékűre), de az LP relaxációból el tudjuk hagyni az y változót és egy IP (egészérté-
kű programozás) feladatot kapunk. Ennek az IP feladatnak az LP relaxációja gyengébb
lesz mint az eredmény amit az eredetiből kapnánk, azonban még mindig egy helyes össze-
hasonlításra fogunk jutni, ha IP-n alapuló LP-relaxációt használunk. Ezért a P(M) jelölés
használatát folytatjuk a kapott politópra, amit abból az LP relaxációból kaptunk, ahol
kihagyjuk az y változót a T1-ben.
Az y változó elhagyására a Fourier-Motzkin elimináció segjségével történik. Célunk
megtalálni az összes olyan valós w vektort, amire igaz a következő egyenlőtlenség:
w′ B ≤ 0 (34)
Azon w-k halmaza amik kielégítik a (34)-es feltételt egy konvex kúpot alkotnak, melyet
extremális sugarakkal jellemezhetünk. Ezeket a sugarakat egy Q mátrix soraiként adjuk
meg. A Q mátrixot a (33)-as feltételbe behelyettesítve a következőt kapjuk:
QAx ≥ Qb, (35)
,ami egy alternatív formula C-re.
A Q mátrix hatása az S, F és T modellekre:
Szekvencilis modell:
A Q mátrix hatására eltávolítjuk az u2, u3, . . . un változókat a (6)-os egyenlőtlenségből.
Ezt úgy érjük el, hogy összeadunk mindent, ahol M ⊂ N , ahol 1 /∈ M . Az eredmény
egyenlőtlensége (minden M ⊂ N , (2) és (3) feltételekkel)
xi1,i2 + xi2,i3 + . . .+ xi|M|,i1 ≤ |M | −|M |n
(36)
17
A (2) és (3) egyenletekkel valamint nemnegatívitással együtt:
|M | − 1 < |M | − |M |n, M ⊂ N
Mivel a körök részhalmazai a összekapcsolt halmazuknak, így:
P (S) ⊃ P (C) (37)
Emiatt a szekvenciális formulához tartozó LP relaxáió gyengébb, mint a hagyományos
formuláé.
F1 modell: Minden M ⊂ N halmazra, ahol 1 /∈M :∑i,j∈M
xi,j ≤ |M | −|M |n− 1
(38)
|M | − 1 < |M | − |M |n− 1
< |M | − |M |n
Tehát, ebből láthatjuk, hogy
P (S) ⊃ P (F1) ⊃ P (C) (39)
(F1’) modellt vizsgálva:
1
n− 1
∑i∈M−1, j∈M
xi,j +∑i,j∈M
xi,j ≥ |M | −|M |n− 1
(40)
P (F1) ⊃ P (F1′) (41)
F2 modell Ha a zi,j változót laza változónak tekintjük a (15)-ben, akkor ezt felhasznál-
hatjuk, hogy behelyettesítve lecsökkenthetjük F1 formulára. Tehát:
P (F2) = P (F1) (42)
F3 modell M ⊂ N , ahol 1 /∈M : ∑i,j∈M
xi,j ≤ |M | − 1 (43)
P (F3) = P (C) (44)
Időalapú modellek
P (S) ⊂ P (T1)
P (T2) ⊂ P (F1′)
P (C) ⊂ P (T3) ⊂ P (T2)
A fejezetet a [2] és a [3] jegyzet alapján dolgoztam fel.
18
4. Áruszállítási feladat optimalizálása
Most, hogy megismertük az utazó ügynök problémát és annak asszimetrikus formájának
megoldására szolgáló különböző modelleket lássuk, hogy az itt megszerzett tudást hogyan
tudjuk átültetni a való életbe. Átlagos hétköznapokon is több helyen megjelenik a TSP-re
épülő feladat. Ezekre néhány példa:
• Tömegközlekedés megszervezése
• Áramköri lapok nyomtatása
• Postás napi útjának megtervezése
• Anyagmozgatás optimalizálása
• Áruházi kiszállítások optimalizálása
A fentebb említett példák közül az áruházi kiszállításokkal kapcsolatos optimalizálás-
ról fogok bővebben írni. Ez egy olyan terület, ami jelentős szerepet játszik minden olyan
vállalat életében, akik foglalkoznak bármiféle áruszállítással. Az ilyen cégek a költsége-
ik jelentős hányadát fordítják a különböző szállítási folyamatok finanszírozására, ezért
hatalmas előnyt jelenthet, ha sikerül a jelenleg használt algoritmusukat, megszokásukat
egy jobban működő folyamattá alakítani. Dolgozatom következő felében egy adott cég
áruszállítási problémáját fogom vizsgálni.
4.1. Alkatrész kiszállítási feladat megfogalmazása, pontosítása
A következőkben egy olyan cégről lesz szó, amely egy közvetítő szerepet tölt be a gyártók
valamint a kis- és nagykereskedelmek között és Magyarországon 23 telephellyel rendelkez-
nek. A cég életében több területen is fenn áll az áruszállítás/árumozgatás optimalizálásá-
nak feladata. Egy részről minden egyes telephely kiszállít a vonzáskörzetébe tartozó kis-
és nagykereskedő partnereinek, más részről pedig a telephelyek közti áruszállítást is meg
kell tudni oldaniuk, mert előfordulhat, hogy egy termék csak egy adott telephelyen van,
de egy másik telephelyhez tartozó partner rendelte meg.
19
A dolgozatban egy adott telephely áruszállítási problémáját fogom vizsgálni, azzal
kapcsolatban, hogy a különböző partnereknek milyen módon tudja a leghatékonyabban
kiszállítani a megrendelt árut. Egy alaptulajdonságuk, hogy naponta többször is szállíta-
nak, így akár az aznap megrendelt árut (amennyiben van készleten) már aznap ki is tudják
szállítani a partnernek. A feladat megoldásához szükség van további tényadatokra.
• k darab furgon van, amiket be tudunk vonni az áruszállítás folyamatába(rendelt áru
mennyiségétől változó, k értéke maximum 10)
• naponta h alkalommal történik áruszállítás (ez változó, de átlagosan h=7)
• adott azon partnerek (valamint címük) listája, akiknek megrendelés esetén szállítani
kell
A cél egy olyan általános modellt találni, ahova csak az épp aktuális szállítási adatokat
kell betáplálni (éppen az adott körben hova kell szállítani és hova nem) és megtalálja a
legköltséghatékonyabb megoldást.
A modell megalkotása során fel kell készülni olyan jelenségekre, amik problémát okoz-
hatnak:
• ad hoc jellegű problémák, például: útlezárás, torlódás
• adott időre vissza kell érni a furgonoknak, hiszen naponta többször szállítanak, így
a következő szállítási időpontra újra a telephelyen kell lennie a kisteherautóknak
• van néhány kiemelt partner, akik már megszokták, hogy mikor kapnak árut, így a
programot úgy kell megírni, hogy hozzájuk adott időre kell az egyes köröknél odaérni
• folyamatos rendelésfelvétel van, tehát indulás előtt kb. 15 perccel tudják meg, hogy
pontosan kik rendeltek és így mely címekre kell szállítani
Amennyiben az adott címeket megfeleltetjük városoknak a furgont pedig ügynöknek,
úgy láthatjuk, hogy a feladat az utazó ügynök problémán alapszik, hiszen a furgonnak
vissza kell érnie a kiinduló helyre miközben adott pontokat meglátogatott. A feladat
megoldását nehezítik a speciális körülmények.
Feltételezhetjük, hogy az egyes idősávokban, amikor a rendelt áru kiszállítását végzik,
akkor a paraméterekkel megadott feladat megegyezik.
20
4.2. Matematikai kapcsolatok
Azért, hogy jobban lássuk, miért tekinthetünk erre a feladatra matematikai problémaként
szükséges párhuzamba állítani a feladatot a matematikai ismereteinkkel. Az átláthatóság
érdekében egy kisebb adathalmazon mutatom be a problémát és a modellt.
A feladatban adott címekről és a köztük lévő utak hosszáról van szó, ezért a leg-
célszerűbb a feladatot egy gráffal szemléltetni. Innentől a városokat a gráf pontjainak,
halmazukat N halmaznak, a köztük lévő utakat pedig a gráf súlyozott éleinek tekintjük
(ci,j).
Célunk az utazó ügynök probléma továbbfejlesztése, amit egy már korábban ismerte-
tett megoldási modell kiegészítésével, azaz további feltételek megadásával érünk el és így
a kiszállítási problémánkra illesztjük. A továbbiakban l darab ügynökre vizsgálom a TSP
feladatot, ahol az ügynök útját megfeleltetjük a furgon útjának.
4.3. A modellalkotás
Az F1 modell szolgál alapjául a megoldásomnak, így azt bővítve a továbbiakban több
változóval dolgozunk egyszerre, és különböző feltételek közé szorítjuk őket, hogy ezzel
szűkítsük a megoldáshalmazt.
xki,j: bináris változó, értéke 1, amennyiben az i, j csúcsok közti él része a k. ügynök túrá-
jának és 0, amennyiben nem (k ∈ Z, i, j ∈ N , i 6= j)
yki,j: hány eladásra kínált terméke van még a k. ügynöknek, amikor eljött i. csúcsból de
még nem ért j.-be (k ∈ Z, i, j ∈ N)
τi: mennyi utat tett meg az ügynök, mire az i. csúcsba ér (i ∈ N)
bki : bináris változó értéke 1, ha az i. csúcs a k. ügynök túrájában van, 0 egyébként (k ∈ Z,
i, j ∈ N)
ak: jelentése, hogy hány csúcs tartozik a k. ügynök útjába (k ∈ Z)
Természetesen jelenleg is folyik kiszállítás, tehát van egy fajta metódus, amit a ki-
szállításnál követnek nap mint nap, de az sokkal inkább megszokáson és tapasztaláson
alapszik, mint bármiféle számításon. Ebből adódóan a feladatom nem egy algoritmus ja-
vítása, hanem egy modell megalkotása.
A modellem elkészítését a GUSEK nevű programban kezdtem meg. Segítségemre volt
21
az alap utazó ügynök problémára egy megoldást nyújtó GUSEK-ben megírt kód, ami az
F1 modell beprogramozásának felel meg. Az alap modell azt a feladatot oldja meg, hogy
egy bediktált adathalmazból kiszámolja, hogy mely utakon végighaladva juthat vissza
a legrövidebb úton a kiinduló pontból ugyanoda úgy, hogy közben minden pontot érin-
tett pontosan egyszer. Ezt a modellt lépésenként javítottam tovább, hogy egyre közelebb
jussunk a végső megoldáshoz.
4.3.1. Két kör esete fix körméretekkel
Az adott telephely egyszerre több autóval tud szállítani árut, így elsőként azt a pontosítást
végeztem el a modellen, hogy 2 kisteherautóra vizsgálódjon, amikre igaz, hogy mindkét
autó ugyanazon adott városból induljon (1-es város), minden egyes pontot érintsen va-
lamelyik furgon és visszaérjenek a kiindulási helyre, mindezt úgy, hogy az összköltség a
lehető legkisebb legyen.
Ennek megvalósítása érdekében be kellett vezetni a modellbe több új változót többek
között y2i,j-t, ami működését tekintve olyan, mint az yi,j, de diszjunkt élhalmazban mozog
úgy, hogy az 1-es csúcson kívül nincsenek közös végpontjai sem az 1 értékű éleknek. Erre a
változóra is különböző feltételeket kellett adni, melyek részben hasonlítanak az yi,j változó
feltételeire. Szükség van további kikötésekre, melyekkel elérjük, hogy a két változó egy-
mástól is függjön, ezáltal biztosítva, hogy ne keresztezzék egymást mégis minden pontot
lefedjenek. A másik újonnan bevezetett változó x2i,j mely egy olyan bináris változó, ami
azokon az éleken vesz fel 1 értéket, amin a második kör megy keresztül. (x1i,j azokon az
éleken vesz fel 1-et,amik az első körben vannak benne). Végül harmadikként bevezetésre
került a b1i változó. Egy fontos tényező, hogy az a1 itt egy paraméter, melynek manuálisan
tudunk értéket adni. Ekkor a modellünk a következőképp épül fel:
Az új változók miatt megváltozott a célfüggvény is:
min(c · [x1 + x2]), ,ahol x1 =∑i,j
x1i,j és x2 =∑i,j
x2i,j (45)
N = 1, 2, ..., n
x1i,j ∈ {0,1} lineáris változó (1 ≤ i,j ≤ N, i 6= j)
x2i,j ∈ {0,1} lineáris változó (1 ≤ i,j ≤ N, i 6= j)
22
x1i,j=
1, ha i, j közti él része a 1. ügynök túrájának és i 6= j
0, egyébként és i 6= j
x2i,j=
1, ha i, j közti él része a 2. ügynök túrájának és i 6= j
0, egyébként és i 6= j
ci,j= i és j pontok közti él hossza
Ekkor a következő feltételeket használjuk:∑j
x1i,j + x2i,j = 1, j 6= i, j 6= 1 ∀i ∈ N (46)
∑j
x1i,1 + x2i,1 = 2, ∀i ∈ N (47)
∑i
x1i,j + x2i,j = 1, i 6= j, i 6= 1 ∀j ∈ N (48)
∑i
x1i,j + x2i,j = 2, ∀j ∈ N (49)
b1i ≥ x1i,j i, j ∈ N (50)∑i
b1i = a1 (51)
1− b1i ≥ x2i,j j 6= i, i 6= 1 (52)
1− b11 + 1 ≥ x21,j (53)∑i,j
x1i,j = a1 (54)
∑i,j
x2i,j = n− a1 + 1 (55)
y1i,j ≤ (a1 − 1)x1i,j (56)
y2i,j ≤ (n− a1)x2i,j (57)∑i,j
y1j,i =∑i,j
y1i,j + b1i i 6= 1 (58)
∑j
y1j,1 + a1 =∑j
y11,j + b11 (59)
∑i,j
y2j,i =∑i,j
y2i,j + 1− b1i i 6= 1 (60)
∑j
y2j,1 + n− a1 =∑j
y21,j + 1− b11 i 6= 1 (61)
23
4.3.2. Független körméret esete
Ebben a modellben előre meg kellett adni az a1 értékét tehát, hogy az első körben hány
csúcs legyen, ezért ennek javítása érdekében egy a1 számtól független modellt állítottam
fel. Ezt úgy tudtam elérni, hogy az új modellben a1 nem egy paraméter, hanem a1 ∈ Z+,
a1 < n változó. Ennél a pontosításnál azonban kezdett a program futásideje ugrásszerűen
megnőni, bár jó eredményre jutott.
4.3.3. Több kör esete
Ekkor tettem egy lépést visszafelé és továbbiakban a1-et paraméterként használtam, ami-
nek értékét előre megadtam. Másik irányban javítottam tovább a programot, ugyanis
most már nem 2 hanem 3 kört kerestem, melyek összességében minden pontot lefednek és
egyetlen közös pontjuk van, az 1-es csúcs (ami a telephelyet jelöli). Innen már csak egy
kis korrekcióra volt szükség, és 10 körre (mint a 10 furgon) megírtam a programot. Ah-
hoz, hogy 3 kört tudjon keresni a program újabb változókra volt szükség, így bevezetésre
kerül az x3i,j, b2i és az y3i,j változó valamint az a1 paraméter mellé bevezetésre kerül az a2
paraméter. Ekkor a célfüggvény a következőképp épül fel:
min(c · [x1 + x2 + x3]), ,ahol x1 =∑i,j
x1i,j , x2 =
∑i,j
x2i,j és x3 =
∑i,j
x3i,j (62)
Az új változó: x3i,j ∈ {0,1} lineáris változó (1 ≤ i,j ≤ N, i 6= j)
x3i,j=
1, ha i, j közti él része a 3. ügynök túrájának és i 6= j
0, egyébként és i 6= j
Ekkor a következő feltételeket használjuk:∑j
x1i,j + x2i,j + x3i,j = 1, j 6= i, j 6= 1 ∀i ∈ N (63)
∑j
x1i,1 + x2i,1 + x3i,j = 3, ∀i ∈ N (64)
∑i
x1i,j + x2i,j + x3i,j = 1, i 6= j, i 6= 1 ∀j ∈ N (65)
∑i
x1i,j + x2i,j + x3i,j = 3, ∀j ∈ N (66)
24
∑i
b1i = a1 (67)
∑i
b2i = a2 (68)
b1i ≥ x1i,j i, j ∈ N (69)
b2i ≥ x2i,j i, j ∈ N (70)
1− b1i − b1i ≥ x3i,j j 6= i, i 6= 1 (71)
1− b11 − b1i + 2 ≥ x31,j (72)∑i,j
x1i,j = a1 (73)
∑i,j
x2i,j = a2 (74)
∑i,j
x3i,j = n− a1 − a2 + 2 (75)
y1i,j ≤ (a1 − 1)x1i,j (76)
y2i,j ≤ (a2 − 1)x2i,j (77)
y3i,j ≤ (n− a1 − a2 + 1)x3i,j (78)∑i,j
y1j,i =∑i,j
y1i,j + b1i i 6= 1 (79)
∑j
y1j,1 + a1 =∑j
y11,j + b11 (80)
∑i,j
y2j,i =∑i,j
y2i,j + b2i i 6= 1 (81)
∑j
y2j,1 + a2 =∑j
y21,j + b21 (82)
∑i,j
y3j,i =∑i,j
y3i,j + 1− b1i − b2i i 6= 1 (83)
∑j
y3j,1 + n− a1 − a2 + 1 =∑j
y31,j + 1− b11 − b2i + 1 i 6= 1 (84)
Itt is azt tapasztaltam, hogy a futásidő megnövekedett.
25
4.3.4. Időkorlát megadása
Korábban említettem, hogy vannak olyan partnerek, akiket kiemelten kezelnek és adott
időre oda kell érni hozzájuk. Annak érdekében, hogy ez ne a véletlenen vagy az indulási
idő eltolásán múljon a következő módosítást végeztem a programban. Bevezettem egy új
τi változót, melynek segítségével tudtam egy olyan feltételt adni a modellnek, hogy az
adott csúcshoz legkésőbb mikor érjenek oda. Ekkor a modellünk felépítése olyan, mint a
több kör esetében néhány plusz feltétellel együtt, amit a következőek:
τ1 = 0 (85)
τi + ci,j ≤ τj +m(1− x1i,j) (86)
A korlát megadása a következőképp néz ki: ha azt szeretnénk, hogy a 13. csúcshoz maxi-
mum 25 kilométer megtétele után érjen, akkor:
τ13 ≤ 25 (87)
A formulában m szám egy általunk választott valós paraméter. Nem időben, hanem tá-
volságban van a kikötés, hogy maximum mekkora összutat tegyen meg egy furgon, mire
odaér az adott csúcshoz. Természetesen, ha az alap adatokat nem távolságban, hanem
időben adjuk meg, akkor azzal fog számolni a program.
26
5. Futási eredmények
Ebben a fejezetben néhány kimutatást láthatunk. Az első diagram azt mutatja meg, hogy
a modellem négyféle javítása hogyan oszlik el a futásidejük nagyságrendjét tekintve. Az
egyetlen javítás, ami perceken belül lefutott, az a két kör esete fix körmenet esetén. Ebben
az esetben is volt 2 kiugró eset, az a1 = 7 valamint az a1 = 8 esete. Ezeken kívül gyorsan
lefutott a program:
Abban az esetben, amikor független körmenetet vizsgáltam a program futásideje kö-
rülbelül 1 órára nőtt és eredményként az a1 = 2 esetet hozta. Több kör vizsgálata esetén
is a megnövekedett futásidő elérte az 1 órát. Hasonlóan viselkedett a modell, amikor idő-
korlátot adtam meg.
27
6. Összefoglalás
Az elkészült program, melynek programkódját a függelékben olvashatjuk, a következő fel-
adatra nyújt megoldást. Egy adott adathalmazon, ami tartalmazza a pontokat és az éleket
(amelyek adott partnerek címeit jelölik egymástól mért távolsággal együtt), megkeresi a
legkisebb összsúlyú körhalmazt, ahol minden egyes pontot pontosan egyszer látogattunk
meg, összesen 3 autóval egyszerre indulva és adott partnerekhez időben (vagy távolságban)
megadva, hogy legkésőbb mikor érjenek oda.
A korábban felsorolt problémákat figyelembe véve ha megvizsgáljuk a modellt, akkor
ezeket a következtetéseket szűrhetjük le. Bármely ad hoc jellegű probléma ellen véde-
kezhetünk azzal, hogy ha tudomásunkra jut útlezárás stb., akkor azt az adott élt, mely
ezt az útszakaszt jelöli, egyszerűen elrejtjük a program elől és így nem egy teljes gráffal
hanem ez az él nélkül fog számolni a program. Azt a problémát is kiküszöböltük, hogy
adott időre kell valahova odaérni, így már csak egyetlen maradt a felsoroltak közül. A
cégnek néhány perce marad lefuttatni a programot, ami kiszámolja, hogy melyik autónak
melyik irányba kell elindulnia. A GUSEK-ben futó glpk egy gyenge solver, így a futási
idők nagyon megnőttek. Annak érdekében, hogy ezt gyorsítani tudjuk érdemes gyorsabb
solverekkel kipróbálni, hogy a gyakorlatban is alkalmazhatóvá váljon.
28
7. Függelék
A következőkben láthatjuk az elkészült GUSEK-ben megírt programkódot.
Az elkészült programkód
param n, integer, >= 3;
param m, integer;
param a1, integer, >=2;
param a2, integer, >=2;
set V := 1..n;
var tau{i in V}, >=0;
set E, within V cross V;
param c{(i,j) in E};
var x1{(i,j) in E}, binary;
var x2{(i,j) in E}, binary;
var x3{(i,j) in E}, binary;
var b1{i in V}, binary;
var b2{i in V}, binary;
minimize total: sum{(i,j) in E} (c[i,j] * x1[i,j]+c[i,j] * x2[i,j]+c[i,j] * x3[i,j]);
s.t. elso: tau[1]=0;
s.t. odaer{(i,j) in E}: tau[i]+c[i,j]<=tau[j]+m*(1-x1[i,j]);
s.t. ottvan: tau[15]<=2000;
s.t. leave{i in V }: sum{(i,j) in E} (x1[i,j]+x2[i,j]+x3[i,j]) = 1
+ (if i = 1 then 2);
s.t. enter{j in V}: sum{(i,j) in E} (x1[i,j]+x2[i,j]+x3[i,j]) = 1
+ (if j = 1 then 2);
s.t. melyikkor1: sum{j in V} b1[j]=a1;
s.t. melyikkor2: sum{j in V} b2[j]=a2;
s.t. elsokor{(i,j) in E}:b1[i]>=x1[i,j];
s.t. masodikkor{(i,j) in E}:
b2[i]
>=
29
x2[i,j];
s.t. harmadikkor{(i,j) in E}:
1-b2[i]-b1[i]
+
(if i = 1 then 2)
>=
x3[i,j];
s.t. eldiszjunktx1: sum{(i,j) in E} x1[i,j]=a1;
s.t. eldiszjunktx2: sum{(i,j) in E} x2[i,j]=a2;
s.t. eldiszjunktx3: sum{(i,j) in E} x3[i,j]=n-a1-a2+2;
var y1{(i,j) in E}, >= 0;
var y2{(i,j) in E}, >= 0;
var y3{(i,j) in E}, >= 0;
s.t. cap1{(i,j) in E}: y1[i,j] <= (a1-1) * x1[i,j];
s.t. cap2{(i,j) in E}: y2[i,j] <= (a2-1) * x2[i,j];
s.t. cap3{(i,j) in E}: y3[i,j] <= (n-a1-a2+1) * x2[i,j];
s.t. node1{i in V}:
sum{(j,i) in E} y1[j,i]
+ (if i = 1 then a1)
=
sum{(i,j) in E} y1[i,j]
+ b1[i];
s.t. node2{i in V}:
sum{(j,i) in E} y2[j,i]
+ (if i = 1 then a2)
=
sum{(i,j) in E} y2[i,j]
+b2[i];
s.t. node3{i in V}:
sum{(j,i) in E} y3[j,i]
30
+ (if i = 1 then (n-a1-a2+1))
=
sum{(i,j) in E} y3[i,j]
+(1-b1[i]-b2[i])
+ (if i=1 then 1);
solve;
printf "\n";
printf "Optimal tour has length %d\n",
sum{(i,j) in E} c[i,j] * (x1[i,j]+x2[i,j]+x3[i,j]);
printf("From node To node Distance\n");
printf{(i,j) in E: x1[i,j]+x2[i,j]+x3[i,j]} " %3d %3d %8g\n",
i, j, c[i,j];
data;
param n := 16;
param m := 70000;
param a1 :=5;
param a2 :=5;
param : E : c :=
[adatok megadása: csúcs...csúcs...köztük lévő út hossza];
end;
31
8. Hivatkozások
Hivatkozások
[1] http://www.tankonyvtar.hu/en/tartalom/tamop425/0046_operaciokutatas_2/
ch06s02.html
[2] Erricson John Kontoghiorghes, Cristian Gatu: Optimisation, Econometric and Fi-
nancial Analysis(99.-107. oldal)
[3] Oman, A. J. and Williams, H. Paul: A survey of different integer programmind for-
mulations of the travelling salesman problem.
[4] Frank András, Király Tamás: Operációkutatás
[5] Jordán Tamás, Recski András, Szeszlér Dávid: Rendszeroptimalizálás
[6] http://www.cs.elte.hu/ szonyi/hami.pdf
[7] http://mathworld.wolfram.com/HamiltonianCycle.html
32