You are on page 1of 76

SZEGEDI TUDOMÁNYEGYETEM

Juhász Gyula Pedagógusképző Kar


INFORMATIKA ALKALMAZÁSAI TANSZÉK

A Közlekedésinformatika Rendszerek Áttekintése


és a
Matematikai Modellel Kapcsolatos Elméleti
Eredmények Bemutatása

a
Kombinált Járműütemezés és Járműhozzárendelés a Közösségi Közlekedésben
c. projekt keretén belül

Készítette: Dr. Békési József főiskolai tanár


Dr. Galambos Gábor egyetemi tanár

Szeged, 2015

1
Köszönetnyilvánítás
TÁMOP-4.2.2/C-11/1/KONV-2012-0004 Nemzeti kutatóközpont fejlett infokommunikációs
technológiák kidolgozására és piaci bevezetésére. A projekt a Magyar Állam és az Európai
Unió támogatásával, az Európai Szociális Alap társfinanszírozásával valósul meg.

2
Tartalom

1. Bevezetés ................................................................................................................................ 5
2. Matematikai alapfogalmak, a felhasznált legfontosabb matematikai módszerek .................. 8
2.1. Gráfok.............................................................................................................................. 8
2.2. Alapvető algoritmusok gráfokon ................................................................................... 12
2.2.1. Szélességi keresés .................................................................................................. 12
2.2.2. Mélységi keresés .................................................................................................... 13
2.2.3. Topológikus rendezés ............................................................................................. 14
2.2.4. Erősen összefüggő komponensek........................................................................... 14
2.2.5. Minimális költségű feszítőfa .................................................................................. 15
2.2.6. Legrövidebb utak problémája................................................................................. 16
2.2.7. Fokozatos közelítés ................................................................................................ 16
2.2.8. Dijkstra algoritmusa ............................................................................................... 17
2.2.9. Bellmann-Ford algoritmus ..................................................................................... 18
2.2.10. Irányított körmentes gráfok .................................................................................. 18
2.2.11. Legrövidebb utak meghatározása minden csúcspárra .......................................... 19
2.2.12. Floyd-Warshall algoritmus ................................................................................... 19
2.3. Hálózati folyamok ......................................................................................................... 21
2.4. Lineáris és egészértékű programozás ............................................................................ 22
2.4.1. A szimplex módszer ............................................................................................... 23
2.4.2. Belsőpontos algoritmusok ...................................................................................... 26
2.4.3. Metszősíkok módszere ........................................................................................... 30
2.4.4. A korlátozás és szétválasztás módszere ................................................................. 31
2.4.5. Lagrange relaxáció ................................................................................................. 33
2.4.6. Megoldó szoftverek ................................................................................................ 35
2.4.7. Oszlopgenerálás ..................................................................................................... 38
2.4.8. A halmazlefedési és halmazosztályozási probléma ............................................... 39
2.5. A dinamikus programozás módszere ............................................................................ 40
2.6. Metaheurisztikák ........................................................................................................... 42
3. A közösségi közlekedés járműütemezési feladata: szakirodalmi áttekintés ........................ 45
3.1 Az egydepós járműütemezési feladat (SDVSP) ............................................................. 46
3.2. A többdepós járműütemezési feladat (MDVSP) ........................................................... 48
3.3 Robusztus járműütemezési feladat ............................................................................ 50
4. Jármütemezési feladat: megoldási módszerek ..................................................................... 51
4.1. A kapcsolatalapú többtermékes hálózati folyam modell ............................................... 51
4.2. Az idő-tér hálózati modell ............................................................................................. 53
4.3. Heurisztikus algoritmusok............................................................................................. 55
5. A javasolt, új jármű-hozzárendelő modell és megoldási módszere ..................................... 58
5.1. A matematikai modell ................................................................................................... 58

3
5.2. A legkisebb negatív költségű eszközfordák generálása ............................................... 62
5.3. A matematikai modell megoldása ................................................................................. 63
5.3.1. A cimkézési algoritmus .......................................................................................... 63
6. Egy kombinált eszköz-emberforda optimalizáló modell ..................................................... 65
6.1. A szubgradiens algoritmus, a Lagrange duális megoldása ........................................... 68
6.2. Az árazási probléma megoldása .................................................................................... 68
6.3. A munkaszakaszok generálása ...................................................................................... 69
6.4. Az emberfordák generálása ........................................................................................... 70
7. Irodalomjegyzék ................................................................................................................... 71

4
1. Bevezetés

Az operatív költségek jelentik a közösségi közlekedési szolgáltató vállalatok kiadásainak


nagy részét. Ezekhez a költségekhez tartoznak a járműflotta beszerzési költségei, a járművek
üzemanyag- és karbantartási költségei és a járművezetők fizetése is.

Ennek egyenes következménye, hogy az operatív költségekben jelentkező megtakarítások


alapvetően befolyásolják a közösségi közlekedési szolgáltató vállalatok költségvetését. A
költségek csökkentését napjainkban elsősorban úgy érik el, hogy hatékony információs
rendszereket alkalmaznak.

Az IKT (információs és telekommunikációs technológia) fejlődésének köszönhetően


napjainkra a jelentősebb közösségi közlekedési társaságok rendelkeznek saját információs
rendszerrel. Egy ilyen információs rendszerben természetesen jelen vannak, az un. üzleti
alkalmazások, amelyek magukba foglalják a különböző könyvelési, számviteli modulokat, de
tartalmazniuk kell olyan – a tömegközlekedés szervezéséhez, működtetéséhez tartozó
részrendszereket is. Ez utóbbi részrendszerek legfontosabb feladatai között találhatjuk azokat
a modulokat, amelyek

– a járművek ütemezését készítik elő a vállalat által kiszolgált vonalakhoz,


 a járművek és a járművezetők műszakjainak ütemezését illesztik a vonalakhoz,
 napi rendszerességgel nyomon követik és monitorozzák a járműflottát,
 jelzik a diszpécsernek a szokatlan eseményeket (meghibásodás, késés, stb.),
 mérik és dokumentálják a járműflotta járműveinek állapotát, és elkészítik a járművek
karbantartási tervét.

A fent vázolt IKT-környezet képezi sok esetben a hatékony logisztikai irányítás szervezett
hátterét (lásd pl. [Meilton2001]), azonban a folyamatban jelen van egy következő lépés is,
amelynek az a feladata, hogy megtalálja a szervezésnek és az üzemeltetésnek azon részeit,
amelyek az operatív műveleti költségek szempontjából csökkenthetők.

Ha gyakorlati oldalról közelítjük a problémát, akkor megfigyelhetjük, hogy a költségek


csökkentését különböző szinteken próbálják elérni a közösségi közlekedési szolgáltató
vállalkozások:

 Stratégiai tervezést alkalmaznak akkor, ha a buszok (járatok) útvonalát akarják


meghatározni. A stratégiai tervezés egyes elemeit Desaulniers és Hickman ismerteti
áttekintő tanulmányában [Desaulniers+2007]. Tárgyalja a hálózattervezést, a járatok
útvonalainak kialakítását, és az utasok ún. utashozzárendelését a várható utazási igények
alapján. Friedrich és Nökel [Friedrich+2004] más részproblémákat helyez a vizsgálat
középpontjába. Tárgyalja a megálló pontok megtervezését, a napi futások ütemezését
különböző napokon (ünnepnapokon, héten belül, stb.), és vizsgálja az útvonaltervek és
menetrendek problématukáját is.

 Taktikai tervezésről beszélünk akkor, ha a cél egy optimális menetrend elkészítése, és a


taktikai tervezéshez sorolható a járatok sűrűségének kialakítása. Emellett olyan előírások

5
teljsítését is itt kell kezelni, mint például a vonalak kapacitására, vagy egy-egy járaton a
szolgáltatást ellátó járművek milyenségére is (pl. melyik vonalon milyen időközzel
közlekedjenek alacsonypadlós járművek) lehetnek előírások.

 Operatív tervezés esetében a szolgáltatás ellátásához a buszok és a vezetők, a műszakok


ütemezését végzik el. Az operatív tervezés egyes problémáinak a kezelésére számos
megoldás született. Néhány cikk, amely ezeket a problémákat tárgyalja: [Bertossi+1987,
Bodin+1983, Cappanera+2004, Dell’Amico+1993, Dias+2002, Löbel+1997]. Elméleti
szempontból vizsgálva a problémákat megállapíthatjuk, hogy a legtöbb részprobléma NP-
teljes, ami nehézzé teszi az egzakt vagy közel egzakt megoldások megkeresését a
gyakorlatban felmerülő problémák esetén. Már néhány százezer fős városok esetén is
nehezen kezelhető, összetett feladattal állunk szemben, amely tovább bonyolódhat, ha a
jogszabályok, az egyéni igények, és munkavállalói érdekek figyelembe vétele is kívánatos
a probléma megoldása során. Ilyen korlátozó feltételek lehetnek a munkaidőre, a
járművezetés idejére, a járművezetők munkaszüneteire vonatkozó előírások, de egyes
esetekben tekintettel kell lenni a telephelyek kötöttségeire is. Érdekességként említjük
meg, hogy találkoztunk olyan modellel is, amelyek tekintetbe vették azt is, hogy a
vezetőknél megfelelő mértékben legyenek vegyítve a kedvelt és nem kedvelt műszakok
(járatok) [lásd pl. Abbink+2007].

Mindenképpen érdemes megjegyezni, hogy van arra is kísérlet, hogy a stratégiai és a taktikai
tervezést közös, ún. szolgáltatástervezési modellben egyesítsék. Borndörfer
[Borndörfer+2008] vizsgál más kapcsolódó – a szolgáltatástervezés körébe sorolható –
feladatokat (pl. jegyárazás, tarifatervezés és -kialakítás), amelyek az utas-hozzárendelés
kapcsolódó problémái lehetnek, és az utazási igényeket is meghatározhatják.

A döntéstámogatási rendszerek fejlődésének egyik fontos iránya volt az elmúlt évtizedekben


az olyan programcsomagok kifejlesztése, amelyek a logisztikai rendszertervezési és
optimalizálási feladatok komplett megoldását tekintik fő feladatuknak. Mégis, a gyakorlat azt
mutatja, hogy az alkalmazói oldalon számos vállalat-specifikus elvárás és a vállalkozások
speciális helyzetéből adódó korlátozó feltétel is jelen van, amelyek fontosak a közlekedési
vállalatok számára, és amelyeket a kifejlesztett általános rendszerek nem képesek egységesen
kezelni. Az általunk vizsgált rendszerek egyik jellemző példája az, amikor egy közlekedés
társaság alternatív üzemanyagú járműveket [Rabl2002, Li+2009] is alkalmaz flottájánál, és
ezek ütemezésénél figyelembe kell venni a szaknyelven „rádiusznak” nevezett egy tankolással
megtehető kilométerek számát. Az ilyen esetben a problémát az okozza, hogy az alternatív
üzemanyagú járművek rádiuszi egyes esetekben jelentősen kevesebb lehet, mint a
hagyományos üzemanyagokat használó gépjárművek futási teljesítménye. Emellett az ilyen
jármű flottáknál azt is figyelembe kell venni, hogy az alternatív üzemanyagot használó
járművek esetében szignifikánsan eltérő a tankolás időtartama is: amíg hagyományos
üzemanyagoknál (pl. diesel üzemanyag) a tankolás kb. 5 perc, addig CNG (compressed
natural gas) vagy más üzemanyagok esetén a feltöltés ideje rendszerint ennek többszöröse is
lehet [Árgilán+2012, Balogh+2009]. Ezek olyan további feltételek, amelyeket figyelembe kell
venni a napi ütemezést elkészítő eljárásoknál annak érdekében, hogy megfelelő
járműütemezést tudjunk készíteni. Ismereteink szerint napjaink általánosan használt ütemező
szoftverei nem kezelnek külön ilyen típusú feltételeket.

Jelen tanulmányban csak operatív tervezési részfeladatok tárgyalására szorítkozunk. Tárgyalni


fogjuk a buszflotta járműveinek ütemezését, a járművezetők (a műszakok) ütemezését és

6
beosztását vizsgáljuk. Ennek egyrészt terjedelmi oka van, másrészt ezt az is indokolja, hogy a
közösségi közlekedési szolgáltató vállalatoknak a stratégiai és taktikai tervezési feladatra
kevés befolyásuk van: ezeket általában más – állami, kormányzati vagy önkormányzati (pl.
városi) – szinten kerülnek meghatározásra. Amennyiben ezek a paraméterek rögzítésre
kerülnek, akkor csak a közlekedési társaságok döntésétől függ, hogy járműflottájukat hogyan
ütemezik, és a járművezetőiket hogyan osztják be műszakokba rövid- és hosszútávon
egyaránt. Az operatív tervezésnek van két fázisa, amelyet a korai rendszerekben elkülönítve
kezeltek. Két különálló fázisban került megvalósításra a tervezés és az ütemezés kezelése.
Megjegyezzük, hogy ennek ellenére a tervezés és az ütemezési fázis, ha nem is szorosan, de
általában mégis hat egymásra annak érdekében, hogy globálisan hatékonyabb (illetve
lehetséges, fízibilis) megoldás legyen nyerhető.

A tanulmány felépítése a következő:

 A 2. fejezetben először a matematikai alapokat, a matematikai háttérül szolgáló


legfontosabb alapfogalmakat és az alkalmazott matematikai módszereket tekintjük át.
Említésre kerülnek gráfelméleti alapfogalmak, hálózati folyamok, halmazlefedési és
halmazparticionálási problémák, LP-k, IP-k, az oszlopgenerálás, az alkalmazott
fontosabb módszerek.

 A 3. fejezetben a szakirodalom korábbi eredményeit ismertetjük a tömegközlekedési


operatív tervezés optimalizálási feladataira fókuszálva. Ebben a fejezetben először
általánosan – moduláris szerkezetben – vizsgáljuk a feladatokat, majd alfejezetenként
részletesen tárgyaljuk az ismert megoldási módszereket.

 A 4. és 5. fejezetben ismertetjük a speciális járműütemezési feladatot, illetve az annak


megoldására kifejlesztett megoldási módszerünket.

 A 6. fejezetben egy kombinált eszköz- emberforda optimalizáló modellt mutatunk be.

7
2. Matematikai alapfogalmak, a felhasznált legfontosabb
matematikai módszerek

A jelen fejezetben a szükséges matematikai alapismeretek áttekintésére, valamint az


alapfogalmak definiálásán túl néhány alapvető jelölés bevezetésére kerül sor. Elsőként
halmazelméleti alapok segítségével tekintjük át a gráfelméleti alapokat, majd néhány
nevezetes probléma megoldási módszereit ismertetjük.

2.1. Gráfok
A vizsgálódások során többször előfordul, hogy a megoldáshoz egy adott halmaz elemeiből
képzett párokkal kell dolgozni. Egy ilyen problémához a gráfelmélet jó modellalkotási
lehetőséget nyújt. Feleltessük meg a halmaz elemeit pontoknak a síkban, a vizsgált pároknak
megfelelő pontokat pedig kössük össze egy éllel. Az élek nem mehetnek keresztül további
pontokon (1. ábra). Egy ilyen rajzot szokás gráfnak nevezni.

2.1. ábra Ugyanazon gráf két (un. izomorf) rajza

Az operációkutatásban, illetve a számítástechnikában a fenti alakzatok nem használhatók.


Formális definíciókra, illetve számítógépeken is használható gráfreprezentációra van szükség.
Ilyen lehet az élek felsorolása, a szomszédsági mátrix vagy az incidenciamátrix, amelyek már
jól kezelhetővé teszik a gráfokat egy-egy elemzés során.

Legyen N elemek egy véges halmaza, valamint E az N elemeiből képzett rendezetlen párok –
esetleg üres – halmaza. Irányítatlan gráfnak nevezzük az N és E által meghatározott struktúrát.
Az így létrehozott struktúrát irányítatlan gráfnak nevezzük, és G(N,E)-vel jelöljük, ahol
N=N(G)-t a gráf csúcsainak halmaza (a csúcsokat pontoknak vagy szögpontoknak is szokták
nevezni) és E=E(G) a gráf éleinek a halmaza.

Amennyiben az éleknek irányítást adunk, egyik csúcstól a másikig, azaz minden él rendezett
pár lesz, akkor irányított gráfról, vagy más néven digráfról beszélünk. Akár irányított, akár
irányítatlan gráfról van szó, az i-ből j-be vezető élt (i,j)-vel jelöljük, – az (i,i) élt hurokélnek
nevezzük – az i és j csúcsokat szomszédos csúcsoknak, az i csúcsból kiinduló éleket pedig

8
szomszédos éleknek nevezzük. Azokat a gráfokat, melyekben nem található többszörös él
(többszörös élről beszélünk, ha az i,j csúcsokat több él köti össze) egyszerű gráfoknak
nevezzük, egyéb esetekben általános gráfokról beszélünk. Definiálható továbbá a gráf rendje,
mely N(G) elemeinek száma, amelyet n(G)-vel jelölünk, valamint a gráf mérete, mely E(G)
elemeinek száma, amelynek jelölése: m(G). Az n-ed rendű és m méretű G(N,E) gráfot G(n,m)-
mel vagy Gn,m-mel jelöljük.

Tekintsük azokat a gráfreprezentációkat, melyek a számítógépes feldolgozásban


használhatók. Az első, legegyszerűbb eset az élek felsorolása, amely egy lista: minden
meglévő élre egy-egy bejegyzést tartalmaz. A 2. ábrán található gráf esetében ez a lista a
következő: (1,2);(1,3);(1,4);(1,5);(2,5);(3,4). Programozási szempontból jól használhatók a
különböző mátrixok. Egy irányítatlan gráf leírására két mátrixot adunk meg, a szomszédsági
mátrixot, és az incidenciamátrixot.

Legyen A=(aij)nxn szomszédsági mátrix a következőképpen definiálva:

1, ha i és j csúcsok között létezik (i, j) él, azaz szomszédos csúcsok


aij  
0, különben

A definícióból adódik, hogy az A mátrix szimmetrikus. A 2. ábrán található gráf


csúcsmátrixa:

0 1 1 1 1
 
1 0 0 0 1
A  1 0 0 1 0
 
1 0 1 0 0
1 1 0 0 0 

Legyen B=(bik)nxm incidenciamátrix a következőképp definiálva:

1, ha az i csúcs illeszkedik a k. élre,


bik  
0, különben

A 2. ábrán található gráf incidenciamátrixa:

1 1 1 1 0 0
 
1 0 0 0 1 0
B  0 1 0 0 0 1
 
0 0 1 0 0 1
0 0 0 1 1 0 

9
Jegyezzük meg, hogy mindkét mátrix definiálható digráfok esetében is, ettől azonban most
eltekintünk, mert célunk annak bemutatása, hogy a gráfok segítségével megoldható
problémák számítógépes környezetbe interpretálhatók.

Számos olyan probléma van a gyakorlati életben, amely gráfokkal jól modellezhető. Egyszerű
gráfokkal megoldható feladatokra jó példa egy úthálózat, melyben azt kell eldönteni, hogy el
lehet e jutni egyik helyről a másikra. Abban az esetben, ha költséget is akarunk számolni, az
egyes élekhez súlyokat rendelhetünk, melyek megadják, hogy mekkora költséggel lehet a gráf
egyik csúcsából egy másik csúcsába eljutni. Azokat a gráfokat, melyeknél a gráf csúcsaihoz
vagy éleihez numerikus értéket rendelünk, súlyozott gráfnak vagy hálózatnak nevezzük.
Tekintsünk éleknek egy (i,j) (j,k) (k,l)… egymáshoz csatlakozó sorozatát, egy ilyen sorozatot
sétának nevezünk a gráfban. Az olyan sétákra, melyekben minden él csak egyszer fordul elő
szokás a vonal elnevezést használni, továbbá azokra a vonalakra, melyek minden csúcson
pontosan egyszer mennek át használatos az út elnevezés. Léteznek olyan vonalak, melyekben
a kezdő és a végpont megegyezik. Amennyiben egy ilyen vonal minden más ponton csak
egyszer megy át, körnek nevezzük. A fenti fogalmak segítségével definiálható az összefüggő
gráf, melynek bármely két pontja között van út. Az úthálózatos példánál csak azt vizsgáltuk,
hogy el lehet e jutni egyik csúcsból a másikba, de azt nem elemeztük, hogy a két csúcs között
milyen útvonalat választottunk. Van-e több megoldás? Ha több út van, akkor melyik a
legkisebb költségű? Stb.

Az egyik legismertebb algoritmus gráfokon az út keresése két csúcspont – i és j – között. Két


algoritmus terjedt el ennek megoldására:

 A gráfbejárás során az i pontból elérhető összes pontot felsorolják, azaz megadják az


adott j pontot tartalmazó maximális összefüggő részgráfot, és ha j benne van ebben a
részgráfban, akkor van út i-ből j-be.
 A szélességi keresésnél vesszük az i pont összes szomszédját, majd ezeknek a pontoknak
is az összes szomszédját, és így tovább. Így végül az összes olyan pont felsorolásra kerül,
mely i-ből elérhető. Ha j köztük van, akkor van út i és j között.

Abban az esetben, ha találtunk utat, felmerülhet a kérdés melyik a legrövidebb út? A


legrövidebb út megtalálására egy mohó algoritmust fejlesztett ki E. W. Dijkstra holland
matematikus. Dijkstra algoritmusa irányított illetve irányítatlan gráfokra is működik.

A gráfok színezhetőségének kérdése egy további, gráfelméletből ismert probléma, melynek


két esetével foglalkozunk. Az első eset a gráf 2-színezése, mely azt jelenti, hogy kiszínezhető-
e úgy egy gráf két színnel úgy, hogy az egyszínű pontok ne legyenek szomszédosak? A
második esetben az a kérdés, hogy kiszínezhető-e egy gráf három színnel úgy, hogy az
egyszínű pontok ne legyenek szomszédosak? A két feladat nagyon hasonlít egymásra,
komplexitásuk azonban eltérő, míg a gráf 2-színezése egy polinomiális probléma, addig a gráf
3-színezésére nem ismeretes exponenciálisnál gyorsabb algoritmus, azaz a probléma NP-
nehéz.

Számunkra érdekes gráfok az úgynevezett páros gráfok. Azokat a gráfokat, melyek


csúcsainak halmazát fel lehet bontani két diszjunkt halmazra – N= (U,V) – úgy, hogy az egyes
halmazokba tartozó csúcsok között nincs él, azaz nincsenek a halmazokon belül szomszédos
csúcsok, páros gráfoknak nevezzük.

10
2.2. ábra Egy páros gráf kétféle módon lerajzolva

Amennyiben a G(N,E) gráf páros, akkor szokás a G(U,V,E) jelölést használni, ahol
N  U V és U V  Ø . Az U és V halmazokat szokás a G gráf színosztályainak is nevezni.
Páros gráfok esetében legtöbbször az úgynevezett párosítási feladattal találkozhatunk,
melynek bevezetéséhez szükséges a független élek bevezetése. Egy G gráfban két él akkor
független, ha végpontjaik négy különböző csúcsban vannak. A G gráf éleinek egy M halmaza
párosítás, ha a benne lévő élek páronként függetlenek. Egy G gráf maximális párosítás
méretének meghatározása egy jól ismert optimalizálási feladat, formálisan:

(G)  max  M : M párosítás G  ben .

Ha az M párosítás a G gráf összes pontját lefedi, akkor M egy teljes párosítás, vagy 1-faktor.
Az elmúl évtizedek során számos hatékony, polinomális megoldási algoritmust dolgoztak ki
maximális párosítások keresésére.

11
2.2. Alapvető algoritmusok gráfokon

2.2.1. Szélességi keresés

Sok algoritmus alapszik a szélességi keresésen. A program egy sor segítségével fedezi fel a
gráfot, és épít fel egy fát. Induláskor a kezdőpontot feketére színezi, majd a fekete csúcsok
mindegyikének megkeresi a még nem feketére színezett szomszédjait. Ezeket feketére színezi,
és felveszi egy sorba. Miután a fekete csúcs minden szomszédját meghatároztuk, feketére
színezzük. Az algoritmus pszuodókódját a 2.3 ábra mutatja.

Procedure SZÉLESSÉGI-KERESÉS (G,s)

Input: G gráf
Output: a gráf alapján egy fát generál

1 forall the u ∊ V − {s} do


2 u.szín = FEHÉR
3 u.táv = ∾
4 u.apa = Null
5 endforall
6 s.szín = FEKETE
7 s.táv = 0
8 s.apa = Null
9 SORBA(Q,s)
10 while not ÜRES(Q) do
11 u = Q.fej
12 forall the v ∊ Adj(u) do
13 if v.szín == FEHÉR then
14 v.szín = FEKETE
15 v.táv = u.táv + 1
16 v.apa = u
17 SORBA(Q,v)
18 endif
19 endforall
20 SORBÓL(Q)
21 u.szín = FEKETE
22 endwhile

2.3. ábra A szélességi keresés pszeudokódja

12
2.2.2. Mélységi keresés

Mélységi keresés során az éppen elért, még kimenő élekkel rendelkező csúcs éleit járjuk be.
Ha az összes kimenő élt bejártuk, akkor a csúcs szülőjének kimenő éleit vizsgáljuk tovább.
Ezt addig folytatjuk, míg a kiinduló csúcsból elérhető összes csúcsot fel nem fedeztük. Ezek
után a még meg nem talált csúcsok közül választunk egyet, s megkeressük az innen elérhető
csúcsokat. Ezt ismételjük mindaddig, amíg az összes csúcsot be nem jártuk. Mikor a bejárás
során feketére festjük a csúcsot, az időpontot a pont be változójában tároljuk. A pont feketére
festésének időpontját pedig ki változójában tároljuk.

Procedure MÉLYSÉGI-KERESÉS (G)


Inpu
Output: a gráf alapján egy erdőt generál

1 forall the u ∊ V do
2 u.szín = FEHÉR
3 u.apa = Nil
4 endforall
5 idő = 0
6 forall the u ∊ V do
7 if u.szín == FEHÉR then
8 MÉLYSÉGI-BEJÁR(u)
9 endif
10 endforall

2.4. ábra A mélységi keresés pszeudokódja

Procedure MÉLYSÉGI-BEJÁRÁS (u)

Input: u csúcs
Output: a csúcsból elérhető, még fel nem fedezett csúcsok alapján
felépít egy fát

1 u.szín = SZÜRKE
2 u.be = idő
3 idő = idő + 1
4 forall the v ∊ Adj(u) do
5 if v.szín == FEHÉR then
6 v.apa = u
7 MÉLYSÉGI-BEJÁR(v)
8 endif
9 endforall
10 u.szín = FEKETE
11 u.ki = idő
12 idő = idő + 1

2.5. ábra A mélységi bejárás pszeudokódja

13
2.2.3. Topológikus rendezés

Egy G = (V,E) irányított gráf topológikus rendezése a V elemeinek egy olyan sorbarendezése,
hogy ha (u, v) ϵ E, akkor u megelőzi a sorban v-t. Ha a gráf tartalmaz irányított kört, akkor
nincs topológikus rendezése. Az algoritmusnak megfelelően a bonyolultság O(V + E).

Function TOPOLÓGIKUS-RENDEZÉS (G)

Input: G gráf
Output: L láncolt listája a topológikus rendezettségű csúcsoknak

1 MÉLYSÉGI-KERESÉS (G) meghívása, az u.ki értékek


meghatározása.
2 LISTÁBA-SZÚR (L,u) meghívása a csúcs elhagyásakor
3 return L

2.6. ábra A topológikus rendezés pszeudokódja

2.2.4. Erősen összefüggő komponensek

Egy G irányított gráf erősen összefüggő komponense a csúcsok egy maximális U halmaza,
melynek bármely két u és v csúcsára teljesül a következő: u-ból vezet út v-be és v-ből vezet út
u-ba. A gráfot erősen összefüggő komponenseire bontó algoritmus felhasználja a G gráf GT
transzponáltját. A GT -nek akkor és csak akkor éle az (u, v), ha G-nek éle (v, u). Az
összefüggő komponenseket a csúcsok és élek számának összegével arányos bonyolultságú
algoritmussal határozhatjuk meg. A megadott algoritmus tetszőleges végrehajtásával
meghatározhatjuk az összefüggő komponenseket.

Function ERŐSEN-ÖSSZEFÜGGŐ-KOMPONENSEK (G)

Input: G gráf
Output: a gráf alapján felépít egy erdőt, ahol egy fa felel meg egy
komponensnek

1 MÉLYSÉGI-KERESÉS (G) meghívása, az u.ki értékek


meghatározása.
2 GT meghívása, a G gráf transzponáltjának meghatározása
3 MÉLYSÉGI-KERESÉS (GT ) meghívása, ám a for ciklusban a
pontokat u.ki szerinti csökkenő sorrendben kell végigjárni.
4 Az így kapott mélységi fák csúcsai alkotnak egy-egy összefüggő
komponenst.

2.7. ábra A Erősen összefüggő komponensek előállításának pszeudokódja

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

A G gráf egy összefüggő, körmentes F = (V,E0) részgráfja a G gráf feszítőfája. A G gráf F


feszítőfája minimális költségű, ha a benne szereplő élek súlyának az összege minimális a G
feszítőfái között.

A. Kruskal feszítőfa algoritmusa. Ez az algoritmus súly szerint növekvő sorrendben sorra


veszi az összes élt, s ha a két él különböző komponensekhez tartozik, összekapcsolja a
komponenseket. Megfelelő adatszerkezet használatával az algoritmus bonyolultsága O(E
ln(E)).

Procedure KRUSKAL-FESZÍTŐFA (G,súly)

Input: G gráf
Output: Az A tartalmazza a feszítőfát

1 A=∅
2 forall the v ∊ V do
3 HALMAZT-KÉSZÍT (v)
4 endforall
5 forall the (u, v) ∊ E (Súly szerint növekvő sorrendben) do
6 if HALMAZT-KERES(u)!=HALMAZT-KERES(v) then
7 A = A ⋃ {(u, v)}
8 EGYESÍT (u,v)
9 endif
10 endforall

2.8. ábra Kruskal feszítőfa algoritmusának pszeudokódja

B. Prim algoritmusában használunk egy segédtömböt is, amely azt adja meg, hogy milyen
messze vannak a gyökértől a fában még nem szereplő csúcsok. (Ezt a távolságot kezdetben
végtelenre állítjuk.) Majd sorra átvesszük a fába a legközelebbi csúcsot. Természetesen
ekkor be kell állítani ezen csúcs szomszédjainak távolságát és a távolsághoz tartozó szülőt.
Az algoritmus speciális adatszerkezettel O(E + V ln(V )) lehet.

15
Procedure PRIM-FESZÍTŐFA (G,súly,r)

Input: G gráf, súly az élek súlyozása, r kezdőcsúcs


Output: r gyökerű faként állítja elő a feszítőfát

1 Q=V
2 forall the v ∊ Q do
3 v.kulcs = ∾
4 endforall
5 r.kulcs = 0
6 r.apa = Null
7 while Q != ∅ do
8 u = KIVESZ-MIN(Q)
9 forall the v ∊ Adj(u) do
10 if v ∊ Q and súly(u, v) ≤ v.kulcs then
11 v.apa = u
12 v.kulcs = súly(u, v)
13 endif
14 endforall
15 endwhile

2.9. ábra Prim feszítőfa algoritmusának pszeudokódja

2.2.6. Legrövidebb utak problémája

Adott egy G = (V, E) gráf és egy súlyfüggvény, amely az élekhez egy nemnegatív valós
számot rendel. Egy út költsége az utat alkotó élekhez tartozó számok összege. A legrövidebb
út súlya a minimális költségű út költsége. A feladatok természetétől függően más és más
értékek iránt érdeklődünk. A jellemző problémák a következők:

– Adott csúcsból induló legrövidebb utak keresése.


– Adott csúcsba érkező legrövidebb utak keresése.
– Adott csúcspár közötti legrövidebb út keresése.
– Összes csúcspár közti legrövidebb utak keresése.

2.2.7. Fokozatos közelítés

A gráf minden egyes pontjához hozzárendelünk egy valós számot, amely majd az adott
csúcstól mért távolságát fogja tartalmazni. Ezt kezdetben az induló csúcs kivételével
végtelenre állítjuk. Továbbá felépítünk egy fát, mely az apák fele mutató mutatókból áll
össze, melynek a gyökere a kezdő csúcs. A kezdőértékek beállítását a KEZDŐ ÉRTÉK rutin
végzi.

A legrövidebb utakat meghatározó módszerek lényege a következő: sorra vesszük az éleket, s


ha az adott élt használva rövidebb utat találunk, akkor frissítjük a megfelelő adatokat. Ehhez a
frissítéshez a KÖZELÍT rutin tartozik.

16
Procedure KEZDŐÉRTÉK (G,s)

Input: G gráf, s kezdőcsúcs


Output: a gráf csúcsaihoz végtelen távolságot rendel

1 forall the v ∊ V do
2 v.táv = ∾
3 v.apa = Null
4 endforall
5 s.táv = 0

Procedure KÖZELÍT (u,v,súly)

Input: u, v csúcsok, súly élek súlyozása


Output: a v távolságát frissíti az u távolsága alapján

1 if v.táv ≥ u.táv + súly(u, v) then


2 v.táv = u.táv + súly(u, v)
3 v.apa = u
4 endif

2.10. ábra A fokozatos közelítés eljárásainak pszeudokódja

2.2.8. Dijkstra algoritmusa

Dijkstra algoritmusa egy S halmazt alkalmaz, mely azokat a csúcsokat tartalmazza,


melyeknek már ismerjük a pontos távolságát. A Q tartalmazza a maradék csúcsokat. Ezeket a
csúcsokat olyan adatszerkezetben tároljuk, melyet a csúcsok távolság értékei alapján
rendeztünk. Az algoritmus sorra megkeresi az S halmazhoz legközelebbi csúcsot, ezzel a
csúccsal bővíti az S halmazt, majd ezen csúcs szomszédjainak kiszámítja a távolságát. Ha Q
tárolására tömböt használunk, a bonyolultság O(V2). Kupac használata esetén a bonyolultság
O((V + E) ln(V )).

Procedure DIJKSTRA(G,s)

Input: G gráf, s kezdőcsúcs


Output: a gráf csúcsainak az adott csúcstól mért távolsága

1 KEZDŐÉRTÉK(G,s)
2 S=∅
3 Q=V
4 while Q != ∅ do
5 u = KIVESZ-MIN(Q)
6 S = S ⋃ {u}
7 forall the v ∊ Adj(u) do
8 KÖZELÍT(u,v,súly)
9 endforall
10 endwhile

17
2.11. ábra Dijkstra algoritmusának pszeudokódja
2.2.9. Bellmann-Ford algoritmus

A Bellmann-Ford algoritmus azokban az esetekben is működik, ha egyes élekhez negatív


súlyok tartoznak. Ha negatív súlyú kör szerepel a gráfban, akkor a minimális távolság nem
definiálható. A külső ciklus annyiszor fut le, amilyen hosszú lehet a leghosszabb út. Minden
egyes ciklusmagban eggyel messzebb található csúcsok távolságát határozzuk meg. Végül
teszteljük, hogy van-e negatív súlyú kör. A két ciklusnak megfelelően a bonyolultság O(E V ).

Function BELLMANN-FORD (G,súly,s)

Input: G gráf, súly élek súlyozása, s kezdőcsúcs


Output: IGAZ, ha meghatározhatóak a minimális távolságok,
HAMIS, ha nem
Eredmény: a gráf csúcsainak az adott csúcstól mért távolsága

1 KEZDŐÉRTÉK (G,s)
2 forall the i = 1 to |V|-1 do
3 forall the (u, v) ∊ E do
4 KÖZELÍT(u,v,súly)
5 endforall
5 endforall
6 forall the (u, v) ∊ E do
7 if v.táv ≥ u.táv + súly(u, v) then
8 return HAMIS
9 endif
10 endforall
11 return IGAZ

2.12. ábra A Bellmann-Ford algoritmus pszeudokódja

2.2.10. Irányított körmentes gráfok

Egy irányított körmentes gráfot topológikusan rendezhetünk a már ismertetett módszerrel.


Ezek után a legrövidebb utak meghatározásához csupán e rendezés alapján kell haladni a
csúcsokon, s meghatározni a szomszédjaik távolságát.

Procedure IKG-LEGRÖVIDEBB-ÚT (G,súly,s)

Input: G gráf, súly élek súlyozása, s kezdőcsúcs


Eredmény: a gráf csúcsainak az adott csúcstól mért távolsága

1 KEZDŐÉRTÉK(G,s)
2 forall the u ∊ V a topológikus rendezésnek megfelelően do
3 forall the v 2 Adj(u) do
4 KÖZELÍT(u,v,súly)
5 endforall
6 endforall

18
2.13. ábra A Bellmann-Ford algoritmus pszeudokódja

2.2.11. Legrövidebb utak meghatározása minden csúcspárra

A soron következő négy algoritmus bemenő adata egy W n × n-es mátrix. Ezen mátrix
főátlójában 0 értékek szerepelnek, míg ha a jelzett két pont között él található, akkor a mátrix
adott pozíciójában az él súlya szerepel, egyébként végtelen. Az algoritmusok kimenete egy
n×n-es mátrix, mely a megfelelő csúcsok közötti távolságot adja. Az ÚTBŐVÍTÉS rutin
minden egyes végrehajtásakor az eddig már kiszámolt utakat egy éllel bővíti. Ha egy, a
főátlójában 0, egyébként végtelen értékeket tartalmazó mátrixból indulnánk ki, akkor ez a
nulla hosszúságú utakat tartalmazná. Az ÚTBŐVÍTÉS rutint kell végrehajtani erre a mátrixra
n−1-szer, miután a gráfban legfeljebb n−1 hosszú út található. Ezzel az algoritmus
bonyolultsága O(V4). Ha a kiinduló mátrix a W, akkor a bővítést csak n−2-szer kell
végrehajtani (LASSÚ-LEGRÖVIDEBB-ÚT). Az útbővítés során egyszer már kiszámolt
útsorozatokat is fel lehet használni, s a D mátrixot nem a W alapján frissítjük, hanem saját
magát használva (GYORSABBLEGRÖVIDEBB- ÚT). Ezzel a bonyolultság O(V3lnV)-re
csökken

2.2.12. Floyd-Warshall algoritmus

Egy másik megközelítésben a gráf csúcsait csak korlátozottan vesszük igénybe, a k


növekedésével egyre több és több csúcsot használhatunk az utak felépítésére. A három
egymásba ágyazott ciklusnak megfelelően O(V3) az algoritmus bonyolultsága.

Function FLOYD-WARSHALL (W)

Input: W távolságmátrix az élek alapján


Output: D a gráf csúcsainak egymástól mért távolságaiból álló mátrix

1 n = sorok száma a W mátrixban


2 D=W
3 forall the k = 1 to n do
4 forall the i = 1 to n do
5 forall the j = 1 to n do
6 dij = min(dij , dik + dkj)
7 endforall
8 endforall
9 endforall
10 return D

2.14. ábra A Floyd-Warshall algoritmus pszeudokódja

19
Function ÚTBŐVÍTÉS (D,W)

Input: D számolt távolságmátrix, W távolságmátrix az élek alapján


Output: D’ továbbszámolt távolságmátrix

1 n = sorok száma a W mátrixban


2 D' = (d"ij) // n × n-es mátrix
3 forall the i = 1 to n do
4 forall the j = 1 to n do
5 d'ij = ∾
6 forall the k = 1 to n do
7 d'ij = min(d'ij , dik + wkj)
8 endforall
9 endforall
10 endforall
11 return D'

Function LASSÚ-LEGRÖVIDEBB-ÚT (W)

Input: W távolságmátrix az élek alapján


Output: D a gráf csúcsainak egymástól mért távolságaiból álló mátrix

1 n = sorok száma a W mátrixban


2 D=W
3 forall the m = 2 to n − 1 do
4 D = ÚTBŐVÍTÉS(D,W)
5 endforall
6 return D

Function GYORSABB-LEGRÖVIDEBB-ÚT (W)

Input: W távolságmátrix az élek alapján


Output: D a gráf csúcsainak egymástól mért távolságaiból álló mátrix

1 n = sorok száma a W mátrixban


2 D=W
3 m=1
4 while n − 1 ≥ m do
5 D = ÚTBŐVÍTÉS(D,D)
6 m = 2m
7 endwhile
8 return D

2.15. ábra
Az összes csúcs közötti legrövidebb utakat meghatározó algoritmus függvényeinek
pszeudokódjai

20
2.3. Hálózati folyamok

A gráfoknál megemlítettük a hálózatok fogalmát, most ennek korrekt definícióját is


megadjuk. Legyen adott egy irányított G(N,E) gráf, és legyen a gráfban két kitüntetett pont s
és t. Nevezzük s-et forrásnak, t-t nyelőnek, továbbá a gráf minden éléhez legyen megadva egy
c(i,j)>0 kapacitás. Jelőlje c = cij | (i,j)  E  a kapacitások vektorát. Ekkor a (G,c,s,t)
négyest hálózatnak nevezzük. Szükségünk van még a hálózati folyam (röviden csak folyam)
definíciójára is, mely egy függvény, ami a gráf éleiből a pozitív valós számok halmazába
képez. Két alapvető tulajdonsággal kell rendelkeznie: a kapacitáskorlátozási feltétellel és a
folyammegmaradási szabállyal, azaz:

f : E  R
f (i, j )  c(i, j )  (i, j )  E
 f (i, j ) |(i, j )  E  f ( j, i) |( j, i)  E  0 i  N (G) \ s, t
Általánosságban elmondható, hogy a folyam értéke a forrásból kiáramló anyagmennyiség
illetve a visszaáramló anyagmennyiség különbsége.

f   f (s, i) |(s, i)  E  f (i, s) |(i, s)  E

A továbbiakban feltesszük, hogy s-be nem lép be él, illetve t-ből nem lép ki él. Ezekben az
esetekben az s-ből kilépő f(s,i) értékek összegét, ahol i  N (G) nevezzük a folyam értékének.


Legyen adott egy hálózat és egy r R érték. A feladat egy adott hálózatban eldönteni, hogy
van-e benne r értékű folyam. Az így megfogalmazott problémákat szokás folyamproblémának
nevezni. Definiálható továbbá egy úgynevezett maximális folyamprobléma is, mely egy adott
hálózatban maximális értékű folyamot keres. Ennek a problémának több polinomiális futási
idejű algoritmusa ismert:

 Edmonds-Karp-algoritmus,
 Goldberg és Tarjan általános előfolyam algoritmusa.

Vizsgáljuk meg a folyamprobléma megoldhatóságának feltételét. Ehhez be kell vezetni a


vágás fogalmát: legyen adva egy (G,c,s,t) hálózat, továbbá legyen U  N (G) és V  N (G)
ahol U V   (azaz diszjunktak) valamint U V  N (G) , ahol s U és t V . Ekkor az
U,V halmazpárt s,t-vágásnak (röviden vágásnak, vagy forrás-nyelő vágásnak) nevezzük. Egy
vágás kapacitásán az U-ból a V-be vezető élekhez tartozó kapacitások összegét értjük. A
folyamprobléma megoldhatóságának szükséges és elégséges feltétele az, hogy minden forrás-
nyelő vágásra a vágás kapacitása legalább akkora, mint a folyam értéke. Ezt nevezzük vágási
feltételnek. A gyakorlati életben többször előfordul, hogy a probléma modellezésénél a
hálózatban több forrás-nyelő pár található. Az ilyen jellegű hálózatokhoz is megfogalmazható
a hálózati folyamprobléma, melyben mindegyik forrás-nyelő párhoz adott egy-egy érték, a
feladat pedig annak eldöntése, hogy minden párra található-e adott értékű folyam úgy, hogy
az egyes folyamok anyagmennyiségeinek összege nem haladhatja meg a megfelelő él
kapacitását. Ezeket a problémákat szokás többkövetelményű hálózati folyam problémának
nevezni. Definiálható továbbá a többtermékes folyamprobléma, ahol minden egyes termék

21

egy (s,t,d) hármas, ahol s a forrás, t a nyelő és d R az igény mértéke. Legyen adott egy
(G,c,s,t) hálózat valamint k darab termék. Feladat elvezetni a termékek fn folyamait úgy, hogy
összegük nem haladhatja meg a kapacitásokat, azaz:

fn : E  R
k
f (i, j )   f n (i, j )  c(i, j )  (i, j )  E
n 1

 f (i, j ) |(i, j)  E  f ( j, i) |( j, i)  E  0 i  N (G) \ s , t 


n n n n

Többtermékes folyamproblémánál a legfontosabb kérdés, hogy minden termék elvezethető-e?


Ilyen folyamproblémák jelentős szerepet kapnak a közlekedési hálózatoknál, logisztikai
feladatoknál, stb. Az általános többtermékes folyamproblémának létezik polinomiális futási
idejű egzakt megoldása, azonban a gyakorlati problémák nagy részénél mégis közelítő
megoldások használatosak a problémák méretei miatt. A feladat megoldása nehezebb lesz, ha
a függvényértékre és a kapacításokra csak egész értékek megengedettek. Ilyenkor egészértékű
többtermékes folyamproblémáról beszélünk. Az egészértékű többtermékes folyamprobléma
NP-nehéz. A többtermékes folyamprobléma speciális esete a többtermékes osztatlan folyam
probléma, mely annyiban különbözik a többtermékes folyamproblémától, hogy minden
termék fn folyamát egy úton vezetjük el. A többtermékes osztatlan folyam probléma már két
termékre is NP-nehéz. A valós problémák bonyolultsága, valamint a megoldások
komplexitása szükségessé teszi hatékony heurisztikák, illetve approximációs algoritmusok
használatát.

Különböző approximációs algoritmusokat adnak meg a [Goemans+1998, Kleinberg1996,


Skutella2000] publikációk, míg heurisztikákakat tárgyalnak a [Gajowniczek+1994,
Kodialam+2000, Plotkin1995] cikkek.

2.4. Lineáris és egészértékű programozás

A lineáris programozási (LP) feladatok egy lineáris célfüggvény szélső értékének


megkeresését (minimumát vagy maximumát) valósítják meg egy olyan halmazon, melyet
lineáris egyenlőségek és egyenlőtlenségek határoznak meg. Informálisan szólva, az LP
feladatok meghatározzák azt a módot, ahogy a legjobb kimenet elérhető olyan előírások által
meghatározott korlátok között, melyeket lineáris egyenlőtlenségek reprezentálnak.
Bebizonyítható, hogy minden LP – ekvivalens átalakításokkal – a következő általános alakra
hozható:

a
j 1,..., X
ij x j  bi i  1,..., n

x j , bi  0 j  1,..., X , i  1,..., n

c
j 1,..., X
j x j  min

22
ahol X a változók halmaza. A minimalizálandó (vagy maximalizálandó, ekvivalens módon
kifejezhetően) kifejezés a célfüggvény. Bizonyítható, hogy az egyenlőségek által
meghatározott halmaz – a lehetséges megoldások halmaza – egy konvex poliédert alkot. A
lehetséges megoldások halmazán a célfüggvényen felvett minimális (vagy maximális) értéket
optimumnak nevezzük, míg azon lehetséges megoldásokat, melyek a célfüggvénybe
helyettesítve az optimumot szolgáltatják, optimális megoldásoknak hívjuk. A feladat
megoldásának egyik klasszikus módszere az úgynevezett szimplex módszer.

2.4.1. A szimplex módszer

Az LP feladatokat először George B. Dantzig vizsgálta, aki 1947-ben megalkotta a szimplex


módszert, mely mind a mai napig a legszélesebb körben alkalmazott megoldási módszer. A
szimplex módszer olyan lehetséges megoldásokat konstruál az eljárás során, amelyek az
előzőekben említett poliéder csúcspontjaiban fekszenek. Az eljárás iteráción alapszik, az
egyes lépések során a poliéder élein a szomszédos csúcspontok között olyan módon tér át a
következő lehetséges megoldásra, hogy az új pontban felvett célfüggvény érték ne legyen
távolabb az optimumtól. Azt az módszert, amely egyik csúcspontról átmegy a konvex
poliéder egy vele szomszédos csúcsára, bázistranszformációnak nevezzük. A fenti iteráció
addig ismétlődik, míg el nem érjük az optimumot.

A módszer pontosabb megadásához tekintsük a következő formájú LP feladatot:

a
j 1,...,m
ij x j  bi i  1,..., n

x j , bi  0 j  1,..., m, i  1,..., n

c x
j 1,...,m
j j  max

A feltételrendszer mátrixa a következő:

𝑎11 ⋯ 𝑎1𝑚
𝐴=( ⋮ ⋱ ⋮ ).
𝑎𝑛1 ⋯ 𝑎𝑛𝑚

A mátrix oszlopvektorait a következőképpen jelöljük:

𝑎1𝑗
𝐴𝑗 = ( ⋮ ) , 𝑗 = 1, … , 𝑚.
𝑎𝑛𝑗

A feltételek jobb oldalán álló vektor a következő:

23
𝑏1
𝑏 = ( ⋮ ).
𝑏𝑛

Végül a célfüggvény vektora az alábbi:

𝑐 = (𝑐1 , … , 𝑐𝑚 ).

Az 𝐴𝑗 vektorokat tartalmazó
𝐵 = (𝐴𝑘1 , … , 𝐴𝑘𝑛 )

vektor-rendszert bázisnak nevezzük, ha az 𝐴𝑘𝑖 , 𝑖 = 1, … , 𝑛 oszlopvektorok lineárisan


függetlenek. Az

𝐼𝐵 = {𝑘𝑖 |𝑖 = 1, … , 𝑛}

indexeket bázisindexeknek nevezzük.

Bázismegoldásnak nevezzük azt az

𝑥 = (𝑥1 , … , 𝑥𝑚 )

vektort, amelyre 𝑥𝑖 = 0, ha 𝑖 ∉ 𝐼𝐵 , azaz 𝑥𝑖 nem bázisváltozó és

Ax
iI B
i i b

ha 𝑖 ∈ 𝐼𝐵 , azaz 𝑥𝑖 bázisváltozó.

Az LP feladat L lehetséges megoldásainak halmazának x pontja extremális pont, vagy más


szóval csúcspont, ha nem létezik másik két olyan x' és x'' pont L-ben, amelyeknek az x pont
konvex kombinációja, azaz

𝑥 ≠ 𝜆𝑥 ′ + (1 − 𝜆)𝑥 ′′ , ∀𝑥 ′ , 𝑥 ′′ ∈ 𝐿 esetén (0 ≤ 𝜆 ≤ 1).

Belátható, hogy egy 𝑥 ∈ 𝐿 pont akkor és csak akkor extremális, ha x egy bázismegoldás. Ez
alapján a szimplex módszer a következő lépésekből áll:

1. Az A mátrix oszlopai közül keresünk egy bázist.


2. Meghatározzuk a bázishoz tartozó bázismegoldást.
3. Ha a kapott bázismegoldás optimális, akkor az eljárás befejeződik.
4. Kiválasztunk egy új oszlopvektort, amely a bázisba bekerül egy másik, a bázisban lévő
vektor helyett úgy, hogy az optimum értéke nem csökken, majd folytatjuk a 2.
lépéssel.

Kérdés, hogyan kell az eljárásban a báziscseréhez a megfelelő oszlopvektort kiválasztani,


illetve hogyan tudjuk eldönteni, hogy az éppen aktuális bázismegoldás optimális-e.

24
Tegyük fel adott egy B bázis a hozzá tartozó x bázismegoldással. Vegyünk egy 𝐴𝑘 vektort és
vigyük be a bázisba! Ekkor az új bázismegoldásban 𝑥𝑘 értéke már nem nulla lesz. Legyen az
új érték 𝛼. Az eddig bázisváltozók új értékeit a bázismegoldásban jelölje 𝑥𝑖′ , 𝑖 ∈ 𝐼𝐵 . Ekkor

 A x  A   b.
iI B
'
i i k

𝐴𝑘 elemeit – mivel eredetileg bázison kívül volt – előállíthatjuk a korábbi bázisvektorok


lineáris kombinációjaként:

Ak   Ai aik .
iI B

Ebből adódik, hogy

 A x   A a   b.
iI B
'
i i
iI B
i ik

A jobboldalt kifejezve a régi bázismegoldással kapjuk, hogy:

 A x   Aa    A x .
iI B
'
i i
iI B
i ik
iI B
i i

Ebből adódik, hogy:

xi'  xi  aik .

Mivel sem 𝑥𝑖′ , sem 𝑥𝑖 nem lehet negatív, ezért


𝑥
0 ≤ 𝛼 ≤ min𝑎𝑖𝑘 >0 𝑎 𝑖 .
𝑖𝑘

A bázisból kilépő vektort úgy kell megválasztani, hogy az új bázismegoldásban a hozzá


𝑥
tartozó érték 0 legyen, ezért az 𝛼 = min𝑎𝑖𝑘 > 0 𝑎 𝑖 választás szükséges. Ha nincs olyan sor,
𝑖𝑘
amire az 𝑎𝑖𝑘 > 0 feltétel tejesül, akkor a célfüggvény nem korlátos.

Vizsgáljuk most meg a célfüggvény alakulását a báziscsere során:

 
𝑐(𝑥 ′ ) =  c ( x  a
i i ik )  ck =  c x     c a
i i i ik  ck  .
iI B iI B  iI B 

Ebből látható, hogy a báziscsere hatására a célfüggvény csak akkor növekedhet, ha a

c a
iI B
i ik  ck

25
kifejezés értéke negatív. Ezért a bázisba belépő oszlopvektort úgy kell megválasztani, hogy a
fenti kifejezés értéke negatív legyen. Ha nincs ilyen oszlopvektor, akkor a bázismegoldás
optimális.

2.4.2. Belsőpontos algoritmusok

A szimplex módszer lényege, hogy az optimális megoldást bázismegoldásokon történő


lépésekkel éri el. Mivel minden bázismegoldás a lehetséges megoldások tartományának egy
extremális pontja, a legrosszabb esetekben előfordulhat, hogy nagyon sok, sőt akár az összes
ilyen pontot meg kell vizsgálni. Ezek száma exponenciális függvénye is lehet a probléma
méretének, így az ilyen szélsőséges esetekben ez jelentősen ronthatja a módszer
hatékonyságát. A gyakorlatban a szimplex módszer meglepően jól működik, általában lineáris
komplexitást mutat a probléma méretéhez viszonyítva. A kutatók azonban már a kezdetek óta
próbálkoztak olyan módszert kifejleszteni, amelynek hatékonysága elméletileg is bizonyítható
módon polinomiális. Az első ilyen eredmény egy orosz matematikus, Khachian nevéhez
fűződik, aki kidolgozta az úgynevezett ellipszoid-módszert.

Bár a módszer elméletileg hatékony, a fejlesztőknek nem igazán sikerült a szimplex


módszerhez hasonló hatékonyságú kódot fejleszteniük ezen módszer alapján. Ezt követően
Karmarkar módszere (Karmarkar 1984) hozott előrelépést, aki az optimális megoldás
közelítését a lehetséges megoldási tartomány belső pontjain keresztül képzelte el. Így
alakultak ki az úgynevezett belsőpontos algoritmusok, amelyek gyakorlati szempontból is
érdekesnek bizonyultak, mert megoldást hoztak több olyan ipari problémára, amelyek
korábban megoldhatatlanok voltak. A belsőpontos módszereknek több változata létezik. Itt
most az úgynevezett primál-duál útkövető módszert ismertetjük részletesebben, amely az
elmélet és a gyakorlat egy érdekes kombinációja.

A módszer bemutatásához a már ismert, úgynevezett primál feladat mellett a duál feladat
definíciója is szükséges. Ha feltételezzük, hogy a primál problémának n változója van,
amelyhez m nem redundáns feltétel tartozik, akkor a duál feladatnak m változója lesz,
amelyeket π-vel jelölünk. A feltételek száma n lesz. Hogy a duál feladat is egyenlőség
formában legyen, szokásos egy nemnegatív, n dimenziós z vektort használni. Ezek alapján a
primál és a duál feladat az alábbi formába írható.

Primál feladat:
𝑐𝑥 → 𝑚𝑎𝑥
𝐴𝑥 = 𝑏
𝑥≥0

Duál feladat:
𝜋𝑏 → 𝑚𝑖𝑛
𝜋𝐴 − 𝑧 = 𝑐
𝑧≥0

A primál-duál útkövető módszer 3 ötleten alapszik:

26
1. Az úgynevezett Lagrange módszer használata a korlátokkal rendelkező optimalizálási
probléma korlátok nélküli formára hozásához.
2. Az egyenlőtlenség típusú korlátok logaritmikus függvénnyel történő eltüntetése.
3. A kapott nemlineáris egyenletek Newton módszerrel történő megoldása.

A megoldás során az egyes lépésekben az optimális megoldások egy jól meghatározott utat
követnek, ezért is nevezték el az algoritmust útkövető módszernek.

Az 1. és 2. módszerek alkalmazása után a primál és a duál feladat Lagrange függvénye a


következő formájú lesz.

Primál feladat:
𝑛

𝐿𝑃 = 𝑐𝑥 + 𝜇 ∑ log(𝑥𝑗 ) − 𝜋(𝐴𝑥 − 𝑏)
𝑖=1

Duál feladat:
𝑛

𝐿𝐷 = 𝜋𝑏 − 𝜇 ∑ log(𝑧𝑗 ) − (𝜋𝐴 − 𝑧 − 𝑐) 𝑥
𝑗=1

Az optimális megoldás kiszámításához szükséges feltételek felírása és matematikai


számítások után adódik, hogy az alábbi egyenletrendszer megoldásával kereshető meg az
eredeti primál és duál feladat optimális megoldása.

1. A primál fizibilitás egyenletei:


𝑛

∑ 𝑎𝑖𝑗 𝑥𝑗 = 𝑏𝑖
𝑗=1
𝑖 = 1, … , 𝑚

2. A duál fizibilitás egyenletei:


𝑛𝑚

∑ 𝑎𝑖𝑗 𝜋𝑗 − 𝑧𝑗 = 𝑐𝑗
𝑖=1
𝑗 = 1, … , 𝑛

3. A kiegészítő lazasági feltételek egyenletei:

𝑧𝑗 𝑥𝑗 = 𝜇

𝑗 = 1, … , 𝑛

A feladat ezek után a fenti n+m lineáris és n nemlineáris egyenletből álló egyenletrendszer
megoldása úgy, hogy közben a μ paramétert 0-hoz tartatjuk. A belsőpontos módszerek
elmélete alapján a megoldás így az eredeti rendszer optimális megoldásához tart.

27
Az egyenletrendszer megoldására a Newton módszert használjuk, így az alábbi algoritmust
kapjuk.

28
Input adatok:

– Az eredeti probléma adatai (A,b,c) formában, ahol A mxn-es mátrix melynek sorai
függetlenek.
– A kezdeti fizibilis primál és duál megoldások : 𝑥 0 > 0, 𝑧 0 > 0, 𝜋 0 .
– Az optimalitás küszöbszáma, 𝜀 > 0 és a lépéshossz paraméter 𝛾 ∈ (0,1).

Az algoritmus:

1. lépés: Induljunk az adott 𝑥 0 > 0, 𝑧 0 > 0, 𝜋 0 kezdeti megoldásból és legyen k=0.

2. lépés: Az optimalitás ellenőrzése: Ha (𝑧 𝑘 )𝑇 𝑥 𝑘 < 𝜀, akkor álljunk le, megtaláltuk az


optimális megoldást.

3. lépés: Számoljuk ki az új Newton irányokat! Legyen

𝑋 𝑘 = 𝑑𝑖𝑎𝑔{𝑥1𝑘 , … , 𝑥𝑛𝑘 }

𝑍 𝑘 = 𝑑𝑖𝑎𝑔{𝑧1𝑘 , … , 𝑧𝑛𝑘 }

𝑘
(𝑧 𝑘 )𝑇 𝑥 𝑘
𝜇 =
𝑛

Oldjuk meg a következő egyenletrendszert, hogy megkapjuk 𝑑𝑥𝑘 , 𝑑𝜋𝑘 , 𝑑𝑧𝑘 értékét:

𝐴𝑑𝑥 = 0

𝐴𝑇 𝑑𝜋 − 𝑑𝑧 = 0

𝑍𝑑𝑥 + 𝑋𝑑𝑧 = 𝜇𝑒 − 𝑋𝑌𝑒

4. lépés: A lépéshosszak kiszámítása. Legyen

−𝑥𝑗𝑘
𝛼𝑃 = 𝛾 ∙ min ( : (𝑑𝑥𝑘 )𝑗 < 0)
𝑗 (𝑑𝑥𝑘 )𝑗

−𝑧𝑗𝑘
𝛼𝐷 = 𝛾 ∙ min ( 𝑘 : (𝑑𝑧𝑘 )𝑗 < 0)
𝑗 (𝑑𝑧 )𝑗

5. lépés: Megoldás aktualizálása. Hajtsunk végre egy lépést a megadott irányokban a számolt
lépéshosszal, azaz legyen

𝑥 𝑘+1 = 𝑥 𝑘 + 𝛼𝑃 𝑑𝑥𝑘
𝜋 𝑘+1 = 𝜋 𝑘 + 𝛼𝐷 𝑑𝜋𝑘
𝑧 𝑘+1 = 𝑧 𝑘 + 𝛼𝐷 𝑑𝑧𝑘

Legyen k=k+1 és folytassuk a 2. lépéssel!

29
Elméleti szempontból bizonyították, hogy ahhoz, hogy a megoldás pontosságát 𝜀 0 -ról 𝜀-ra
𝜀0
csökkentsük a legrosszabb-esetben √𝑛𝑙𝑜𝑔 ( 𝜀 ) lépés szükséges. A gyakorlati tapasztalatok
szerint viszont azt mutatják, hogy a konvergencia gyakran független a probléma méretétől és
általában 20 és 80 iteráció elegendő lehet a megfelelő konvergenciához. Az implementáció
legmunkaigényesebb része az egyenletrendszer megoldása a 3. lépésben. A megoldás az
alábbi formulákkal írható le:

𝑑𝜋 = (𝐴𝑍 −1 𝑋𝐴𝑇 )−1 (−𝑏 + 𝜇𝐴𝑍 −1 𝑒)


𝑑𝑧 = 𝐴𝑇 𝑑𝜋
𝑑𝑥 = 𝑍 −1 (𝜇𝑒 − 𝑋𝑍𝑒 − 𝑋𝑑𝑧 )

Amennyiben az LP feladat változóinak mindegyikére fennáll, hogy csak egész értékeket


vehetnek fel, egészértékű programozási feladatról (IP - Integer Programming) beszélünk. Sok
olyan alkalmazás van, amikor a változók csak 0 vagy 1 értéket vehetnek fel; ezt az esetet 0-1
egészértékű programozásnak (bináris egészértékű programozásnak) nevezzük. Amennyiben a
változóknak csak egy része esetén áll fenn az egészértékűségre vonatkozó megkötés, kevert
egészértékű programozási feladatról (MIP – Mixed Integer Programming) beszélünk.
Az egészértékű feladatok megoldására Ralph Gomory 1958-ban publikált egy elegáns eljárást,
az úgynevezett metsző síkok módszerét. Később ezt a MIP feladatokra is kiterjesztették.
Sajnos a kezdeti tapasztalatok alapján az eljárás nem volt kielégítő gyakorlati hatékonyság
szempontjából, így a Gomory féle metszősíkok módszerét – elméleti szépsége ellenére – nem
ajánlották gyakorlati alkalmazásra. Néhány évvel ezelőtt Balas, Ceria, Cornuejols, and Natraj
számítógép segítségével bebizonyították, hogy az eljárást mégis érdemes használni. A
számítógépek rohamos fejlődése sokat segített a módszer alkalmazhatósága szempontjából.
Az elmúlt évtizedek során a korlátozás és szétválasztás módszere (branch-and-bound) vált a
legáltalánosabb eljárássá egészértékű programozási feladatok megoldására mind a kutatás,
mind az ipari alkalmazások területén.

2.4.3. Metszősíkok módszere

Mivel az egészértékű feladat NP nehéz, ezért kézenfekvő gondolat valamely módon


felhasználni azt, hogy a feladat LP relaxációját (azt a lineáris programozási feladatot, amit
úgy kapunk, hogy eltekintünk a változók egészségére vonatkozó feltételektől) hatékonyan
meg tudjuk oldani. Az első gondolat, hogy vegyük az LP relaxáció megoldását és kerekítsük a
kapott értékeket. Ha ezt a kerekítési szabályok alapján tesszük, akkor könnyen előfordulhat,
hogy nem lesz lehetséges megoldás, amit kapunk, de még abban az esetben sem feltétlenül
kapunk jó közelítést, ha a kerekített megoldások lehetséges megoldások maradnak. Másrészt
fontos megjegyeznünk, hogy amennyiben az LP relaxáció megoldása egész értékekből áll,
akkor az biztosan optimális megoldása lesz az egészértékű feladatnak is. Ez abból következik,
hoyg az egészértékű feladat megoldásai részhalmazát adják az LP relaxáció megoldásainak.
Eredményesnek bizonyult viszont a relaxáció következő felhasználása, amit a geometriai
reprezentációja miatt vágósíkok módszerének neveznek. Ha a relaxáció x optimális

30
megoldása nem egész, akkor bővítsük a feladat feltételrendszerét egy további olyan feltétellel,
amelyet az az x nem egész megoldás nem elégít ki, de az egészértékű változat minden
megoldása kielégíti. Így egész megoldást nem veszítünk el, és az új feladatra illetve annak
relaxációjára áttérve, már az x megoldás nem lesz lehetséges, és ezt a lépést ismételve addig,
amíg egész megoldását nem kapjuk az LP relaxációnak egy megoldó algoritmushoz jutunk.

Így az a kérdés merül fel miként tudunk megfelelő vágósíkokat, azaz további feltételeket
generálni. Ennek az egyik legelterjedtebb módszere a Gomory vágás néven ismert eljárás
(Gomory 1958). Az algoritmus első lépésként megoldja a feladat LP relaxációját a szimplex
algoritmus valamely változatával. Amennyiben a kapott megoldás egész, akkor megkaptuk az
egészértékű feladat optimális megoldását is, ellenkező esetben rátérünk az iterációs részre.

Az r-edik iteráció a következőképpen néz ki. Vegyük az első olyan egyenletet, amelyben
valamely xi a bázisváltozóra az egyenlet jobboldala nem egész. Legyen ez az egyenlet:

xi+as1v1+... +asmvm=bs

amelyből xi elhagyásával képezzünk egyenlőtlenséget, és abból vegyük a

t(as1)v1+... +t(asm)vm=t(bs)

Gomory-féle metszetet, ahol a t() függvény az adott elem törtrészét jelöli. Megszorozva az
egyenlőtlenség mindkét oldalát -1-gyel, \'es bevezetve egy új ur különbségváltozót az

ur - t(as1)v1 -... - t(asm)vm= - t(bs)

egyenletet kaphatjuk. Ez lesz a vágósík, és ezzel egészítsük ki a feltételrendszert. Oldjuk meg


az új feladat LP relaxációját (érdemes a duális szimplex algoritmussal). Ha a megoldás egész
kész vagyunk. Ha nem, akkor folytassuk az eljárást a következő iterációval.
A Gomory féle metszetnél léphetnek fel problémák a kerekítésnél, ezért az alapötletet
továbbfejlesztették a dual all integer eljárásban (Gomory 1960, Gomory 1963), ahol mindig
úgy választanak generáló elemet, hogy 1-gyel vagy -1-gyel kelljen osztani.

2.4.4. A korlátozás és szétválasztás módszere

Az egészértékű programozási feladat megoldására a szimplex módszer önmagában nem


alkalmas, mivel nem garantálja, hogy a kapott megoldás egész értékeket tartalmaz. Ennek
kiküszöbölésére használhatjuk a most bemutatásra kerülő módszert. Tekintsünk most egy
általános egészértékű programozási feladatot:

c x
j 1,...,m
j j  max

a x
j 1,...,m
ij j  bi i  1,..., n

x j , bi  0, x j , bi , aij , c j egész, j  1,..., m, i  1,..., n

31
A korlátozás és szétválasztás módszerének lényege, hogy a feladatot szétbontjuk
részfeladatokra, méghozzá olyan módon, hogy a részfeladatok lehetséges megoldásai
diszjunkt halmazokat alkotnak és egyesítésük kiadja az eredeti feladat lehetséges
megoldásainak halmazát. Ilyen felbontás esetén az egyes részfeladatok optimum értékeinek
maximuma éppen az eredeti feladat optimális megoldását adja. A felbontás tetszőleges
mélységig folytatható, vagyis ha már van egy felbontásunk, akkor annak elemeit tovább
bonthatjuk. Az szétbontásokat fával ábrázolhatjuk, amelynek gyökerét az eredeti feladat
alkotja. A módszerben ez jelenti a szétválasztást. A korlátozás megvalósítása olyan módon
történik, hogy minden részfeladathoz egy felső, illetve alsó korlátot számolunk az optimumra.
Amennyiben a kiszámolt felső korlát kisebb, mint a más eddig megismert legjobb alsó korlát,
akkor annak ága biztos nem adhat optimális megoldást, tehát törölhetjük a fából. Kérdés,
hogyan számolhatjuk a korlátokat. Erre lehetőség van a relaxált LP feladat megoldásával,
vagyis elhagyva az egészértékűség feltételt. Ehhez használható a szimplex módszer. A
következőkben ismertetjük a korlátozás és szétválasztás módszerének algoritmusát. Előtte
vezessünk be néhány jelölést. Jelöljön R egy adott részfeladatot. Jelölje OPT(R) az adott
részfeladat relaxált optimum értékét, ami felső korlát az R részfeladat optimum értékére. Az
eredeti feladat legyen R0. Az algoritmus az alábbi:

1. Az R0 feladatot helyezzük el egy listában, amely választható feladatokat tartalmaz.


Számoljunk ki valamilyen heurisztikus módszerrel egy alsó korlátot a feladathoz. Legyen ez
K.

2. A választható feladatok listájából válasszunk egy R feladatot, amelyhez számoljuk ki


OPT(R)-t.

a. Ha OPT(R) nem létezik, vagy 𝑂𝑃𝑇(𝑅) ≤ 𝐾 akkor töröljük R-et a fából.

b. Ha 𝑂𝑃𝑇(𝑅) > 𝐾 és R-nek van egész megoldása, akkor jegyezzük meg ezt a
megoldást és K:=OPT(R).

c. Ha 𝑂𝑃𝑇(𝑅) > 𝐾 és R-nek nincs egész megoldása, akkor tekintsünk egy nem egész
megoldást és valamelyik komponensét (𝑥𝑖∗ ) tekintve válasszuk szét a részfeladatot két
részfeladatra, az 𝑥𝑖 ≤ ⌊𝑥𝑖∗ ⌋ illetve az 𝑥𝑖 ≥ ⌈𝑥𝑖∗ ⌉ feltételek hozzáadásával. A két
részfeladatot hozzáadjuk a fához úgy, hogy a két részfát az R feladathoz kapcsoljuk,
valamint az új részfeladatokat helyezzük el a részfeladatok listájában is.

3. Töröljük R-et a listából. Ha a lista nem üres, lépjünk a 2. lépésre, különben az optimális
megoldás az eltárolt eddigi legjobb megoldás.

Az algoritmusban több olyan választási lehetőség van, amelynél nincs definiálva


egyértelműen, melyik elemet válasszuk a lehetségesek közül. Például az egyik ilyen a listából
történő választás a 2. pontban. Itt többféle stratégiát követhetünk, például választhatjuk azt a
részfeladatot, amelyik a legmagasabb felső korlátot adja, vagy törekedhetünk arra, hogy minél
mélyebbre menjünk a fában az egymás után következő részfeladatok választása során. A
másik kérdés az lehet, hogy a 2.d lépésben melyik változó szerint történjen a szétválasztás.

32
Célunk ebben az esetben a korlátok minél jobban történő csökkentése lehet. Minden változót
végigvizsgálni, hogy melyik milyen korlátot ad túl időigényes lenne, azért lehetséges hogy
csak néhány lépést hajtunk végre a szimplex módszerrel és ez alapján döntünk. Vagy akár az
is elképzelhető, hogy csak egy lépést teszünk, ekkor rövidebb számolást igényel csak a
döntés.
Végezetül megjegyezzük, hogy a fenti megoldási módszerek meglehetősen elterjedtek, több,
akár ingyenesen is használható szoftver létezik, amelyek az ismertetett módszereket
alkalmazzák. Mi az algoritmusunknál a Symphony nevű programot használjuk.

2.4.5. Lagrange relaxáció

Egészértékű feladat megoldására használható az úgynevezett Lagrange-relaxáció


[Geoffrion1974]. Írjuk fel az egészértékű programozási feladatot un. mátrixos formában:

max cx
feltéve, hogy
Ax  b
Dx  d

ahol x, továbbá A; D; b; d; c; komponensei egészek. Legyen X  x | x  0, Dx  d  . Tegyük


fel, hogy az X halmazon könnyen kiszámítható a célfüggvény értéke, azonban az Ax  b
feltételek miatt a feladat megoldása időben bonyolult. Lehetséges lenne, hogy ezt a feltételt
elhagyjuk, azonban ez nem sokkal visz közelebb bennünket a megoldáshoz. Helyette inkább
egy olyan feladatot szokás megfogalmazni, ami legalább részben törekszik a kritikus
feltételek megtartására, büntetve azt, ha azok nem teljesülnek. Az új feladat felírásához
vegyünk egy  vektort, amelynek dimenziója megegyezik az eredeti feladatban szereplő b
vektor dimenziójával.

Ekkor a Lagrange-feladat a következőképpen néz ki:

L   : max cx  (b  Ax)

feltéve hogy x  X .

Mint látható az eredeti feladat nehéz feltételét beépítettük a célfüggvénybe, így azt
meglazítottuk, idegen szóval relaxáltuk. Nyilvánvaló, hogy ha az eredeti feladatnak van
optimális megoldása, akkor a Lagrange-feladat optimális megoldása felső korlátja lesz ez
előbbinek minden   0 -ra, mivel az új feladat lehetséges megoldásainak halmaza bővebb.

Érdemes megkeresni a lehető legjobb felső korlátot, mivel ezzel tudjuk legjobban
megközelíteni az eredeti feladat optimumát a módszer segítségével. L() tekinthető
függvénynek, amiről belátható, hogy konvex és szakaszonként lineáris. Célunk tehát a
következő optimalizálási feladat megoldása:

33
min L() ,
ahol   0 .

Ezt a feladatot szokás Lagrange-duálisnak is nevezni. A Lagrange-duális megoldására


különböző módszereket lehet alkalmazni, leggyakrabban az úgynevezett szubgradiens
módszert használják. Lásd [Held+1970,Held+1974].

2.16. ábra A szubgradiens algoritmus

34
2.17. ábra A szubgradiens szemléletes jelentése egyváltozós Lagrange függvény esetén

2.4.6. Megoldó szoftverek

Az egészértékű lineáris programozási feladat megoldására sok program létezik, amelyek


nagyon különbözőek funkcióikat, tudásukat illetően. A megoldandó problémák méretétől,
bonyolultságától függően kell megtalálnunk azt a szoftvert, amelyik a legalkalmasabb
számunkra. A rendelkezésre álló programok egy része úgynevezett nyílt forráskódú, azaz
szabadon felhasználható bármilyen üzleti, vagy egyéb programban. Vannak olyan megoldók,
amelyek csak kutatási, akadémiai célokra ingyenesek, üzleti célú felhasználás esetén speciális
licensz szükséges hozzá. A harmadik nagy csoport az üzleti célú megoldók csoportja. A
következőkben ismertetjük és röviden jellemezzük a legismertebb megoldókat.
Szabadon felhasználható megoldók:

GLPK (GNU Linear Programming Kit) [Makhorin, 2000]: ANSI C nyelven íródott
program, amely meghívható könyvtári függvények formájában áll rendelkezésre. A GLPK
csomag a következő fő komponensekből áll:
1. primál and duál szimplex módszer,
2. primál-duál belsőpontos módszer,
3. branch-and-cut módszer,
4. átalakító a GNU MathProg programhoz,
5. alkalmazás programozási interfész (API),
6. önálló LP/MIP megoldó.

LPSOLVE[Berkelaar et al., 2004]: Egy másik ANSI C nyelven íródott program, amely a
módosított szimplex módszert használja LP feladatoknál és korlátozás és szétválasztás
módszert egészértékűekre. Meghívható könyvtári függvényeket tartalmaz. A legfontosabb
jellemzői az alábbiak:
1. kevert egészértékű (MILP) megoldó,
2. nincs korlátozás a modell méretét illetően,
3. támogatja az egészértékű változók használatát,
4. képes úgynevezett MPS és LP formátumú adatok beolvasására,
5. a modellek felépíthetők a memóriában, állományok használata nélkül,
6. van alkalmazás programozási felülete (API) ,
7. könnyen hívható más programozási nyelvekből,
8. tartalmaz érzékenységvizsgálatot.

CLP/CBC/SYMPHONY[Achterberg, 2004]: A Coin-OR projekt keretében fejlesztett


megoldók, amelyek célja lineáris optimalizálási feladatokra megoldók fejlesztése C++
nyelven. A CLP az LP megoldó, a CBC (LP alapú branch and cut megoldó könyvtár) és a
SYMPHONY (kevert egészértékű megoldó) egészértékű problémák megoldására is alkalmas.

35
A fenti programok objektumorientált programozási technológiával készültek, meghívható
könyvtári rutinok formájában érhetők el, de önálló alkalmazásként is futtathatók. A CLP
alapvetően a szimplex algoritmust tartalmazza. A SYMPHONY különböző LP megoldókat
tud használni, alapértelmezésben a CLP-t tartalmazza.
Mind a szekvenciális, mind a párhuzamos változatait tartalmazza a szétválasztás és vágás
módszernek, amely a szétválasztás és korlátozás módszeréhez hasonló, de tartalmaz speciális
vágósík módszereket. A problémák felépíthetők a memóriában, vagy beolvashatók file-ból,
kezelni tudja az MPS és LP formátumokat. Lehetőség van arra is, hogy a megoldandó
probléma sajátosságait figyelembe véve a programozó saját eljárásokat építsen be, például
speciális vágósíkok előállítására, azonban ehhez megfelelő szakértelem szükséges. Alapszintű
problémák megoldására a beépített módszerek jól használhatók.

SCIP [Achterberg, 2004]: C könyvtári függvények és önálló program formájában


rendelkezésre álló egészértékű és korlátos matematikai programozási feladatok megoldására
használható megoldó. Támogatja más LP megoldók használatát is. A forráskód szabadon
elérhető, de üzleti célú felhasználáshoz külön licenszet igényel. Az SCIP tartalmaz C++
nyelven írt objektumorientált keretrendszert is. Az SCIP-nél a legfontosabb fogalom a korlát,
vagy idegen szóval constraint. 20 különböző típusú korlát használatát támogatja kevert
egészértékű lineáris és nemlineáris optimalizálási feladatokhoz, valamint egyéb, globális
korlátok is használhatók.

SoPlex [Konrad-Zuse-Zentrum für Informationstechnik Berlin, 2002]: A SoPlex egy


lineáris programozási fealadat megoldó, ami a módosított szimplex módszeren alapszik és
C++-ban készült. Használható önálló megoldóként, vagy C++ nyelven készült könyvtári
függvények formájában is elérhető. A forráskód szabadon elérhető, de üzleti célú
felhasználáshoz külön licenszet igényel.

Cplex [IBM, 2012]: Az IBM ILOG CPLEX Optimization Studio, amit gyakran röviden
csak Cplex-nek neveznek, egy üzleti célú megoldó nagy méretű kevert egészértékű
matematikai feladatok megoldására. A Cplex-et az IBM folyamatosan fejleszti. Különböző
csatlakozási lehetőségekkel rendelkezik, így többféle programnyelvből használható, de önálló
megoldóként is működik.

Xpress [Fico, 2012]: The Xpress Optimization Suite (vagy röviden Xpress) másik üzleti
megoldó, amely különböző számítógépes platformokon is rendelkezésre áll. Szintén többféle
programnyelvből használható, hívható könyvtári függvények formájában. Önálló
megoldóként is működik.

Gurobi [Gurobi Optimization Inc., 2012]: A Gurobi Optimizer egy modern megoldó
lineáris és nemlineáris kevert egészértékű optimalizálási problémák megoldására. C nyelven
készült, különböző számítógépes platformokon is rendelkezésre áll. Többféle
programnyelvből használható, hívható könyvtári függvények formájában, illetve önálló
megoldóként is.

36
A következő ábrák a különböző megoldók által elért futási időket, valamint a megoldott
tesztfeladatok arányát mutatják százalékosan, az egyes megoldókra. Az SCIP 3 különböző LP
megoldóval szerepel (SCIP-C: Cplex, SCIP-L: CLP, SCIP-S: SoPlex). Az adatok Meindl és
Templ kutatási jelentésen alapulnak.

Megoldás ideje
25

20

15

10

0
GUROBI XPRESS CPLEX SCIP-C SCIP-S SCIP-L CBC LP SOLVE GLPK

2.18. ábra Különböző megoldók átlagos futási ideje

Megoldott feladatok (%)


100
90
80
70
60
50
40
30
20
10
0
GLPK LP SOLVE CBC SCIP-L SCIP-S SCIP-C CPLEX XPRESS GUROBI

2.19. ábra A megoldott feladatok %-os aránya az egyes megoldók esetén

37
2.4.7. Oszlopgenerálás

A nagyszámú változóval rendelkező feladatok esetében adott egy technika, melyet


oszlopgenerálásnak neveznek. Az alapötlettel először Dantzig és Wolfe (1960) munkájánál
találkozhatunk. A javasolt eljárás vázlatosan a következő: olyan – méretében csökkentett –
problémák sorozatát kell megoldani, melyek az eredeti változókból csak keveset tartalmaznak
(ezek a változók alkotják a feltételi mátrixban az oszlopokat). Miután egy csökkentett
problémát megoldottunk, egy sor új oszlopot kapunk a megoldás információi alapján. Abban
az esetben, ha a megoldás nem javítható új oszlopok hozzáadásával, a csökkentett feladat
optimális megoldása egyben az eredeti feladat optimális megoldása is. A csökkentett feladatot
szokás master problem-nek, az új oszlopok generálásához szükséges feladatot pedig pricing
problem-nek nevezni, a továbbiakban mi is ezeket az elnevezéseket használjuk.

Tekintsük az általános lineáris programozási feladatot, ahol a X a változók halmaza, és |X| a


halmaz elemszáma, (ami a feltevés szerint most igen nagy). Amennyiben oszlopgenerálással
oldjuk meg a fenti feladatot, akkor vennünk kell változóknak egy X 0  X kezdőhalmazát
(oszlopok), melyek a csökkentett feladat egy fizibilis megoldását tartalmazzák. Megoldjuk ezt
a feladatot, és kiszámítjuk az optimális értékeket a duális változókhoz. Az új oszlopok
kiválasztásához azok a duális változók lesznek használhatók, amelyekhez rendelt redukált
költség, azaz

cj   a u b
i 1...n
ij i i

negatív lesz. A negatív költségű oszlopok kiválasztása a pricing probléma segítségével


0
történik, és az így kapott oszlopokat hozzáadjuk a kiinduló X halmazhoz. Ha már nem
maradt negatív redukált költségű oszlop, akkor belátható, hogy a redukált feladat optimális
megoldása egyben az eredeti feladat optimális megoldása is. Ez következik a szimplex
módszer szabályaiból (lásd pl. [Chvátal+1983]). Az oszlopgenerálást az teszi lehetővé, hogy,
ha a

 
min j 1... X c j   aij ui   0 ,
 i 1...n 

akkor minden oszlopnak pozitív redukált költsége van. Szokták ezeket a költségeket
árnyékáraknak is nevezni, és a minimalizálási feladat az ún. pricing probléma. Ezért
elegendő ezt a feladatot megoldani, nem szükséges, hogy az összes oszlopot egzaktan
ismerjük, és a szükséges bázistranszformációkat minden oszlopra elvégezzük. A megoldás
eredményeképpen az algoritmus következő lépéséhez szükséges oszlopok generálhatóak
implicit módon ezen optimalizálási probléma megoldásával.

A módszert gyakran alkalmazzák olyan problémák megoldására, ahol a feltételi mátrix


nagyon sok oszlopot tartalmaz, és ezért az eredeti szimplex algoritmus egy-egy
bázistranszformációjához sok időre lenne szükség. Ezeknek az eljárásoknak egy áttekintése
megtalálható a [Lübbecke+2005]-ben. Ez a hivatkozás azért is érdekes, mert a cikk
fókuszában a tömegközlekedés áll. Az oszlopgenerálás technikája alkalmazható a

38
járműútvonal tervezés és a vasút tervezés területén, ahol gyakran előfordul, hogy a feladatban
az oszlopok száma igen nagy. Ezt a módszert alkalmazzuk mi is az algoritmusunknál.

2.4.8. A halmazlefedési és halmazosztályozási probléma

Az ütemezési problémák általában megfogalmazhatóak úgynevezett halmazlefedési illetve


halmazosztályozási problémaként, ahol az alaphalmaz a végrehajtandó feladatok listája. A
következőkben ezen általános, diszkrét optimalizálási feladatokat ismertetjük.

Adott egy U = {u1, u2, …, un} halmaz, és nemüres részhalmazainak egy S = {S1, S2, …, Sm}
rendszere. E részhalmazok rendelkeznek súlyokkal is. Jelölje ezeket c1, c2,…, cm ≥ 0. A
halmazlefedési probléma esetén U egy minimális súlyú lefedését határozzuk meg, ahol F ⊆ S
egy lefedés, ha ⋃SjF Sj=U. A probléma az alábbi módon írható fel egy 0-1 egészértékű
programozási feladatként. Legyen 1 ≤ i ≤ n és j{1,2,…,m} indexekre

1, ha u i  S j
aij  
 0, különben

valamint
1, ha S j  F
xj  
 0, különben

A fentiek segítségével a halmazlefedési feladat egészértékű programozási modellje a


következő:

a x
j 1
ij j  1 i  1..n

x j  0,1 j  1..m
m

c x
j 1
j j  z  min

Hasonló feladatot kapunk, ha lefedés helyett U egy minimális súlyú osztályozását keressük.
Ekkor F ⊆ S egy osztályozás, ha az egyben lefedés (⋃SjF Sj = U) és pakolás is (Sj ∩ Sk ≠ ∅)
bármely Sj, Sk  F , j ≠ k , esetén.

A halmazosztályozási feladat egészértékű programozási modellje a következő:

39
m

a x
j 1
ij j  1 i  1..n

x j  0,1 j  1..m
m

c x
j 1
j j  z  min

Érdemes megfigyelni, hogy a két probléma matematikai modellje csak látszólag azonos. A két
feladatban az S halmazrendszerek eltérnek egymástól, és ezért a két feladat is különbözik. A
halmazlefedési- és osztályozási feladatokról bővebb információ a [Du+1998]-ban olvasható.
Mindkét probléma a klasszikus NP-teljes problémák közé tartozik [Karp1972]. A feladatok
lineáris programozási relaxációját úgy kapjuk, hogy az xj  {0,1} feltételt az xj ≥ 0 feltétellel
helyettesítjük. Az így kapott relaxáció megoldására általánosan a branch-and-bound módszer
használható. Míg azonban a hagyományos branch-and-bound technika alkalmazása a feladat
egyes szimmetrikus eseteinél nem hatékony, addig egy oszlopgeneráláson alapuló algoritmus
esetén a halmazosztályozási feladat jól alkalmazható master problémaként. A kombinatorikus
optimalizálási feladatok többsége megadható halmazosztályozási problémaként, és a
szakirodalomban található branch-and-price (korlátozás és árazás) módszerek többsége is
ilyen feladatok megoldásánál kerül alkalmazásra. Bizonyos problématípusoknál (pl. járművek
ütemezése) hasonló módon alkalmazható a halmazlefedési feladat is. A fenti modellek
alkalmazásáról nagyméretű feladatok oszlopgenerálással történő megoldása esetén további
információ a [Barnhart+1998]-ban olvasható.

2.5. A dinamikus programozás módszere

A dinamikus programozás módszere során részfeladatok egy olyan sorozatát kell


definiálnunk, amelyre teljesül, hogy az egyszerűbb feladatok optimális megoldása alapján
meg tudjuk határozni a bonyolultabb feladatok megoldását, és így lépésenként el tudunk jutni
a legbonyolultabb részfeladat megoldásához, ami az eredeti feladat. A részfeladatok általában
a teljes feladat valamilyen értelemben vett kezdőszeletei és a számításokat a feladatok között
rekurzív összefüggések alapján tudjuk felírni. Tehát a dinamikus programozás, mint
probléma-megoldási stratégia az alábbi öt lépés végrehajtását jelenti.

1. Az [optimális] megoldás szerkezetének elemzése.


2. Részproblémákra és összetevőkre bontás úgy, hogy az összetevőktől való függés
körmentes legyen. Minden részprobléma [optimális] megoldása kifejezhető legyen
(rekurzívan) az összetevők [optimális] megoldásaival.
3. Részproblémák [optimális] megoldásának kifejezése (rekurzívan) az összetevők
[optimális] megoldásaiból.
4. Részproblémák [optimális] megoldásának kiszámítása alulról-felfelé haladva. (A
részproblémák kiszámítási sorrendjének meghatározása. Olyan sorba kell rakni a
részproblémákat, hogy minden p részprobléma minden összetevője előrébb
szerepeljen a felsorolásban, mint p. A részproblémák kiszámítása a sorrendnek
megfelelően haladva, azaz táblázat-kitöltéssel.

40
5. Egy [optimális] megoldás előállítása a 4. lépésben kiszámított (és tárolt)
információkból. Visszafejtéses vagy feljegyzéses módszer.
Érdemes megjegyeznünk, hogy az 1-3 pontok lényegében egy rekurzív algoritmus
megtervezését jelentik. Felmerül a kérdés, hogy mikor lehet és mikor érdemes egy dinamikus
programozási algoritmust használni. Akkor van esélyünk dinamikus programozásra, ha a
megoldandó feladat optimális részstruktúrájú, ami azt jelenti, hogy a probléma egy
részfeladatának optimális megoldása önmagán belül a további részfeladatok optimális
megoldásait is tartalmazza. valójában ez ahhoz szükséges, hogy rekurzív algoritmussal
megoldható legyen a feladat. másrészt a rekurzív algoritmusok gyakran sokszor meghívják
magukat ugyanarra a paraméterre és ilyen esetekben egy teljes algoritmust végigfuttatnak. Ezt
küszöböli ki a dinamikus programozás azzal, hogy nem felülről lefele építi fel rekurzívan a
megoldást, hanem alulról felfele, így nem hajtja végre az ilyen hívásokból adódó, valójában
felesleges számításokat.

Tehát akkor érdemes rekurzív algoritmus helyett dinamikus programozást használni, ha


vannak átfedő részfeladatok, azaz egy rekurzív algoritmus, ismételten visszatérne
ugyanazokra a részfeladatokra. Például oszd meg és uralkodj típusú rekurzív algoritmusoknál
általában nincs ilyen probléma, ilyen esetekben általában lehet közvetlenül a rekurziót
használni.
Mint korábban említettük irányított körmentes gráfoknak létezik topológikus rendezése. A
topológikus rendezést felhasználva egyszerű dinamikus programozási algoritmussal
számolhatjuk ki egy ilyen gráfban a legrövidebb utakat a kezdőpontból az összes többi
csúcsba. A módszer lényegét egy példa gráfon mutatjuk be.

8
B C
2
4
3 E 7
A D

2 3 4

F 3 G

A fenti gráf egy lehetséges topológikus rendezésében a csúcsok sorrendje A,B,F,E,C,G,D


lehet. Tekintsük most a D csúcsot! Ebbe a csúcsba eljutni csak az őt közvetlenül megelőző
csúcsok valamelyikéből lehet. Így a hozzá vezető legrövidebb út is csak ezek valamelyikén
keresztül haladhat. Ezért ha dist(D) jelöli a D csúcsba vezető legrövidebb utat, akkor a
következő összefüggést írhatjuk fel:
dist(D) = min{dist(C) + 2, dist(E) + 7,dist(G)+4}
Hsasonló összefüggést írhatunk fel a gráf minden csúcsára. Ha a topológikus rendezés szerint
balról jobbra haldva végezzük el a számításokat, akkor biztosak lehetünk benne, hogy minden
lépésben adottak lesznek a szükséges értékek az új távolság számításához. Ezért a legrövidebb
utakat az alábbi egyszerű algoritmussal számolhatjuk:
inicializáljunk minden dist() értéket ∞-re
dist(A) = 0

41
for each 𝑣 ∈ 𝑉\{𝐴} topológikus rendezés szerint
dist(v) = 𝑚𝑖𝑛(𝑢,𝑣)∈𝐸 (dist(𝑢) + 𝑤(𝑢, 𝑣))
Láthatjuk, hogy a módszer {dist(𝑢): 𝑢 ∈ 𝑉} formájú részproblémákat old meg. A
legegyszerűbbel kezdi, amikor csak az A csúcsot tekinti és nyilvánvalóan ilyenkor az érték 0.
Ezután egyre bonyolultabb részproblémák megoldása szükséges, ahol a bonyolultság attól
függ, hogy hány kisebb részproblémát kell az eredmény megkapásához megoldani. Ez a
dinamikus programozás alaptechnikája, amikot a nagyobb problémák optimális megoldását a
kisebb problémák optimumaiból kapjuk, a közöttük lévő összefüggéseket alkalmazva.
Egy jól ismert feladat a diszkrét optimalizálásban az úgynevezett hátizsák feladat. Egy adott
hátizsákba tárgyakat akarunk pakolni. Adott n tárgy minden tárgynak van egy fontossági
értéke (f(i)) és egy súlya (s(i)) a hátizsákba maximum összesen S súlyt pakolhatunk. Az f(i)),
s(i) és S értékek egészek. Szeretnénk úgy választani tárgyakat, hogy az összfontosság
maximális legyen. Tehát feladatunk, hogy kiválasszuk a tárgyaknak olyan halmazai közül,
amelyekre az összsúly nem haladja meg S-t azt, amelyre maximális az összfontosság.
Definiáljuk az F(i,W) függvényt, minden i=1,...,n,W=0,...,S értékre. Ez a függvény azon
hátizsák probléma optimális függvényértékét adja meg, amelyben a tárgyak listája az első i
tárgyat tartalmazza, és a hátizsák mérete W. Ekkor a kezdeti értékekre F(1,W)=f(1), ha
s(1)≤W és 0 különben. Másrészt a következő rekurzió teljesül:
𝐹(𝑖 + 1, 𝑊) = 𝑚𝑎𝑥{𝐹(𝑖, 𝑊), 𝑓(𝑖 + 1) + 𝐹(𝑖, 𝑊 − 𝑠(𝑖 + 1))},
ha 𝑠(𝑖 + 1) ≤ 𝑊. Továbbá F(i+1,W)=F(i,W), ha s(i+1)>W.

Ez alapján a hátizsák problémát megoldó dinamikus programozási algoritmus a következő:

for x:=0 to S F[x,0]:=0


for x:=0 to s[1]-1 F[x,1]:=0
for x:=s[1] to S F[x,1]:=f[1]
for i:=2 to n
{
for x:=0 to S
{
F[x][i]:= F[x][i-1]
if (s[i]<=x and F[x][i]<F[x-s[i]][i-1]+f[i])
then F[x][i]:=F[x-s[i]][i-1]+f[i]
}
}

2.6. Metaheurisztikák

Az egzakt megoldások megtalálása nagyobb feladatok esetében a diszkrét optimalizálás –


különösen az ütemezési problémák – területén általában nem lehetséges a mindennapi
gyakorlat számára elfogadható időn belül. A legtöbb esetben azonban „jó” heurisztikák
adhatóak az optimális megoldást közelítésére. Egy algoritmust akkor tekintünk
heurisztikának, ha az optimumhoz „közeli” megoldást szolgáltat nehéz optimalizálási
problémákra a gyakorlat számára belátható időn belül (a „belátható idő” hossza természetesen
az alkalmazástól függ). A heurisztikák minőségét nehéz mérni, egy-egy konkrét feladat
esetében nem is lehet. Két elfogadott módszer van a hatékonyság mérésére: a legrosszabb eset
vizsgálat (worst-case analysis) eredményeként egy olyan mérőszámot kapunk, amely azt
mondja meg, hogy a heurisztika által szolgáltatott megoldás maximum milyen távol kerülhet
az optimális megoldástól. Ha statisztikai értelemben egy kicsit többet tudunk az adatainkról

42
(ismerjük az adatok eloszlását, szórását, stb), akkor vizsgálhatjuk az algoritmus által
szolgáltatott eredmény optimumtól való eltérésének várható értékét. Ez utóbbi elemzést
átlagos-eset vizsgálatnak (average-case analysis) nevezzük.

Általánosságban egy heurisztika lehet általános célú vagy problémaspecifikus.


Problémaspecifikus heurisztikákat speciális probléma osztályokra fejlesztenek ki, és általában
nem alkalmasak kisebb módosításokkal sem más probléma típusok hatékony megoldására. Az
általános célú heurisztikák fogalma, melyeket egyre elterjedtebben metaheurisztikáknak is
szokás nevezni, olyan technikákat takar, melyek csak néhány fő irányelvet, valamint egy
megfelelő keretrendszert rögzítenek a probléma megoldás sémáját illetően.

A metaheurisztikák tovább osztályozhatóak pont-alapú és populáció-alapú módszerekre. A


pont-alapú módszerek rendszerint egyetlen lehetséges megoldás iteratív javításán keresztül
próbálják az optimumot megtalálni, míg a populáció-alapú módszerek az eljárás alatt végig a
lehetséges megoldások egy halmazát tartják nyilván, és ezen megoldások ötvözésével állítják
elő a következő iteráció megoldás-halmazát. A legnépszerűbb pont-alapú metaheurisztikus
eljárásokat a lokális keresések [Aarts+1997], és ezek „természetes kiterjesztései”, mint a
szimulált hűtés [Aarts+1989] és a tabu keresések [Glover89, Glover90] alkotják. A
jelentősebb populáció-alapú metaheurisztikák közé a genetikus algoritmusok [Goldberg89], a
hangyakolónia optimalizáló eljárások [Colorni+1992], illetve a raj optimalizáló módszerek
tartoznak [Eberhart+1995, Dorigo+2005] .

Egy metaheurisztikában az alap lokális keresési módszert a következő hármas határozza meg:

 a szomszédsági struktúra (egy mechanizmus a szomszédos megoldások egy


részhalmazának megtalálására),
 az egyik megoldásról a másik megoldásra történő áttérés módszere,
 valamint az eljárás paraméterei.

A hegymászó eljárás a legalapvetőbb lokális keresési módszer. Alapötlete az, hogy minden
iteráció esetében a lehetséges jobb megoldásokat minden esetben el kell fogadni, át kell térni
rájuk. Ezáltal a lokális környezet „hegycsúcsa” garantáltan elérhető, amely egy lokális
optimumnak felel meg. Az eljárás egy véletlen megoldással indul és minden iterációban kis
változásokkal generálható egy szomszédos megoldás. Amennyiben ez a szomszédos
megoldás jobb, mint a jelenlegi, a szomszédos megoldásra térünk át. Az eljárás kiterjeszthető
„véletlen újraindítással”, amely a lokális optimumból való „kitörést” teszi lehetővé.

A tabu keresés fő ötlete, hogy egy adott pontból való elmozdulást megakadályozzunk egy
olyan pontba, amely korábban már vizsgálva volt. A tabu keresés alapvetően egy hegymászó
eljárás, azonban további stratégiák kerülnek alkalmazásra a lokális optimumokban való
„ragadás” elkerülésére. A szomszédsági struktúra egy úgynevezett tabu listával módosított,
amely a korábban vizsgált megoldásokat tartalmazza.

A szimulált hűtés módszertana a hegymászó eljárásokon alapuló megközelítésekkel szemben


egy adott megoldásra való áttérés esetén megengedi bizonyos valószínűséggel, hogy egy
költségfüggvény szerint rosszabb megoldást válasszunk. Ezen valószínűség az iterációk
növelésével fokozatosan csökken és nullához tart. Az alap szimulált hűtési eljárás esetén egy
áttérés megengedett exp(-Δf/T) valószínűséggel, ahol Δf adja meg a költségfüggvény
növekedését, míg T egy kontroll paraméter, amely nullához tart.

43
A genetikus algoritmusok a leggyakrabban alkalmazott populáció-alapú módszerek.
Alapötletük, hogy reprodukciót, keresztezést és mutációt alkalmaznak operátorként a
következő iteráció megoldáshalmazának előállítására. A genetikus algoritmusok alkalmasak
módszeresen bejárni a keresési teret, azonban a „jó” megoldások hatékony megtalálásában
nehézkesek.

A hangyakolónia optimalizáló eljárások a hangyáknak az élelemkeresési stratégiáját próbálják


másolni. A hangyák képesek gyorsan megtalálni a legrövidebb utat a fészküktől az élelem
forrásáig. A fentieket úgy érik el, hogy az úgynevezett ferromon elnevezésű anyagot hagyják
maguk után, a követőik pedig abban az irányban választják az útvonalukat, ahol erősebb
ferromon koncentrációt érzékelnek.

A raj optimalizáló módszerek a megoldások egy populációját – melyeket részecskéknek


nevezünk - kezelik az eljárás végrehajtása alatt, és ezen részecskéket viszik körbe a keresési
térben. Minden részecske a pozícióját és sebességét az adott részecske által talált legjobb
megoldás és a globálisan talált legjobb megoldás alapján változtatja. Más szóval, a keresési
térben utazva minden részecske frissíti a pozícióját és sebességét a saját és a teljes populáció
által tapasztalt legjobb lehetőségek alapján.

44
3. A közösségi közlekedés járműütemezési feladata:
szakirodalmi áttekintés

A tömegközlekedés ütemezési feladatai igen összetettek. Ha operációkutatási szemszögből


vizsgáljuk a problémát, elméletben olyan globális optimumot várunk, mely mind a
járművekkel kapcsolatos feladatoknak, mind a járművezetők ütemezésének költségeit
minimalizálja. Bár ez a kétfajta költség kihatással van egymásra, a gyakorlatban két külön
részproblémaként kezeljük őket: járművek és járművezetők ütemezését egymás után oldjuk
meg.
Az optimalizálási feladat részfeladatokra osztásával ezek a részproblémák szeparáltan jobban
kezelhetők, a matematikai modellezés jobban felépíthető, és a hatékony megoldási módszerek
is könnyebben meglelhetők. Elsőként röviden a tudományos szakcikkek gyakorlati operatív
tervezési környezetben alkalmazható eredményeit tekintjük át.

A járműütemezési problémánál (vehicle scheduling problem, VSP) adott a járatoknak és a


járműflottának a halmaza. Jelölje ezeket rendre T= {t1, t2,…, tn} és V = {v1, v2,…, vm}. Jelölje
cij azt a költséget, amivel az i. jármű a j. járat által előírt tevékenységet elvégzi. A feladat az,
hogy a járműflotta elemeit úgy rendeljük hozzá az egyes járatokhoz, hogy az összköltség
minimális legyen. (A feladat egzakt, matematika megfogalmazását később megadjuk.) Az
első pillanatban egyszerű hozzárendelési feladatnak tűnő probléma azért bonyolódik meg,
mert nem kell minden járművet járathoz rendelni, és egy jármű – a járatok időbeli eltolódása
miatt – több járathoz is hozzárendelhető.

A feladat tovább bonyolódik azzal, hogy a járatok előírt időintervallumokkal, indulási és


érkezési földrajzi helyekkel vannak megadva, míg a járművek különböző depókhoz
tartozhatnak, és az is elő lehet írva, hogy melyik járatot mely depókhoz tartozó járművek
hajthatják végre. A depók számától függően beszélhetünk egydepós (Single Depot Vehicle
Scheduling Problem, SDVSP) és többdepós (Multiple Depot Vehicle Scheduling Problem,
MDVSP) járműütemezési feladatról. A célfüggvényben az ütemezett járművek általános (pl. a
fenntartási költségekből adódó) és utazási (menetrendi- és rezsijáratainak) költségei
szerepelnek. Némileg könnyíti a feladatot, hogy a költség második komponense általában a
megfelelő út hosszával arányos, bár a menetrendi járatok és a rezsijáratok kilométereihez
eltérő költségek tartozhatnak. Természetesen a rezsijáratok költségei így függenek a
megfelelő földrajzi helyek közötti távolságoktól, következésképpen eltérő lehet a rezsijáratok
költsége attól függően, hogy egy adott menetrendi járat mely másik járatot követ.

Számos matematikai modell létezik erre a feladatra, amelyeket az előző évtizedekben


dolgoztak ki. A következő alfejezetben ismertetjük az egydepós és a többdepós
járműütemezési feladat megoldására szolgáló fontosabb matematikai modelleket és a
megoldási módszereket.

A napjainkban talán legszélesebb körűen használt modellekben a probléma egy egészértékű


többtermékes hálózati folyam problémaként fogalmazódik meg ([Bodin+1983,Kliewer+2006,

45
Löbel1997]). Ebben a modellben az optimális ütemezést egy egészértékű lineáris
programozási feladat megoldásaként számíthatjuk ki.

A feladat megoldására szolgáló egyéb modellek is léteznek. A probléma megfogalmazható


halmazlefedési feladatként is (lásd például [Ribeiro+1994, Hadjar+2001]).

Tapasztalatunk szerint a konkrét, gyakorlati ütemezésben a szakirodalomban tárgyalt és


alkalmazott modellek hátrányaként lehet megemlíteni, hogy csak azokat a szabályokat veszi
figyelembe, amelyek a menetrendi járatokkal, az azokhoz megkívánt busztípusokkal és
kapacitásokkal, valamint a menetrendi járatok közötti rezsijáratokkal kapcsolatosak. Nem
lehet viszont olyan specifikus feltételeket beépíteni, amelyek valós alkalmazási környezetből
származnak. A tömegközlekedés operatív feladatainak tervezésénél ilyen tipikus,
járműspecifikus korlátozó feltételek a tankolási követelmények, a különböző karbantartási
előírások (heti, havi, stb.), a parkolási szabályok. A parkolási szabályok vonatkozhatnak a
napon belüli és az éjszakai parkolásra egyaránt: melyik jármű esetén hol történhet a parkolás,
mekkora a parkolók kapacitása, stb. A parkolás időbeli hossza befolyással lehet arra, hogy az
hol, melyik földrajzi helyen hajtható végre. Utóbbiakat bizonyos modellek külön fázisba, a
jármű-hozzárendelés fázisába sorolják. A dolgozatunkban tárgyalt új módszer erre
vonatkozik.

A jármű-ütemezési probléma (vehicle scheduling) során járműveket rendelünk járatok egy


halmazához oly módon, hogy az alábbi feltételek teljesüljenek:

 minden járat pontosan egyszer kerül végrehajtásra,


 a megadott feltételek alapján minden jármű képes végrehajtani a hozzá tartozó járatokat,
 a feladathoz tartozó költség minimális legyen.

Ehhez a következő jelöléseket kell bevezetnünk: legyen V a járművek halmaza. Ebbe a


halmazba tartozó minden vV jármű azonos típusba tartozik. Jelölje T a járatok halmazát, ahol
minden tiT járatra adott a járat d(ti) indulási- és a(ti) érkezési ideje, valamint dg(ti) indulási-
és ag(ti) érkezési földrajzi helye. Két ti és tj járatot kompatibilisnek (összefűzhetőnek, egymás
után végrehajthatónak) nevezünk, ha ugyanaz a vV jármű képes kiszolgálni egymás után
őket. Ez a kompatibilitás a járatok indulási- és érkezési idejétől, valamint az ezekhez tartozó
földrajzi helyektől függ.

A szakirodalom a járműütemezési probléma több különböző változatát tárgyalja, általában az


eszközök típusainak a száma, valamint az adott telephelyek száma alapján bontják szét a
problémát. Az alábbiakban először az egydepós jármú-ütemezési problémát (Single Depot
Vehicle Scheduling Problem –SDVSP) mutatjuk be, ahol az eszközeink egyetlen járműtípusba
tartoznak, és ugyanazon a fizikai telephelyen tartózkodnak.

3.1 Az egydepós járműütemezési feladat (SDVSP)


Az SDVSP problémára adott első megoldási módszert Saha [Saha1972] publikálta. A T
járathalmaz elemeire egy részleges rendezést definiál, és bevezetésre kerül a β rendezési
reláció, mely szerint akkor szolgálható ki t2 legálisan t1 után, ha ag(t1)=dg(t2), valamint
a(t1)≤d(t2). A megkötésekből látható, hogy ez a modell nem engedélyezi a különböző járatok

46
között végrehajtott rezsimeneteket, így az itt meghatározott β reláció a fent definiált
kompatibilitásnál gyengébb.

Az SDVSP-re több páros gráfon alapuló modellt is publikáltak. Ezekről bővebb áttekintés
található Bunte és Kliewer munkájában [Bunte+2009]. Mi az alábbiakban Bertossi és társai
[Bertossi+1987] megfogalmazását és megoldását ismertetjük, ahol szintén párosítási
problémaként adják meg a feladatot. Vegyünk egy G=(U,W,E) kétrészes gráfot, ahol U és W
csúcshalmazok, E pedig élhalmaz, valamint |U|=|W|=n, és |E|=n2. Tegyük fel továbbá, hogy
E két E1 és E2 részhalmazra osztható, melyek:

E1 = {(i,j): ti és tj kompatibilis járatpár},

E2 = E\E1.

A fenti gráf a következő módon értelmezhető. Minden iU csúcs a járatok befejezési földrajzi
helyének felel meg, míg minden j W csúcs a járatok kezdeti földrajzi helyének felel meg. Az
(i,j) E1 élek a két kompatibilis ti és tj járat befejezési és kezdési földrajzi helyei közti
lehetséges rezsijáratot jelképezi, míg minden (i,j) E2 él két egymás utáni rezsijáratnak felel
meg, ezek közül az első a ti járat befejezési földrajzi helyéről a depóba, majd a másik a
depóból a tj járat indulási földrajzi helyére. Ezek segítségével látható, hogy G a gráf M teljes
párosítása egy lehetséges jármű-ütemezést fog adni, melyben a járművek száma |ME2|.

Az (i,j) élekhez cij költségeket rendelve az SDVSP megegyezik egy minimális költségű teljes
párosítás keresésével a G gráfban. Ha cij=1 minden (i,j)E2 esetén, és cij=0 egyébként, úgy a
feladat megoldásával megkapjuk a járatok teljesítéséhez szükséges minimális eszközszámot.
Ha a cij értékei az adott rezsijáratok végrehajtásához szükséges költségek lesznek, akkor a
feladat megoldása a minimális operációs költséget adja. Természetesen az előbbi költségek
bármely kombinációja használható.

A gyakorlati életben alkalmazott feladat esetén a fent ismertetett probléma kiegészül még a
járművek darabszámára adott korláttal. Így egy korlátos párosítási feladatot kapunk, ami a
minimális költségű párosítást keresi a gráfban a |ME2| ≤ k feltétel mellett (ahol k pozitív
egész). A probléma formálisan

min {cx: xX, xij{0,1},  i,j},

ahol c a költségvektor, x bináris változók vektora, ahol xij=1, ha az (i,j) él az M párosításhoz


tartozik, különben xij=0. Az X halmazt az alábbi feltételek határozzák meg:

xj
ij  1, i,

xi
ij  1, j ,

 xij  k .
 i , j E2

Ahol k a rendelkezésre álló eszközök számát jelöli. A fenti feladat minimális költségű hálózati
folyamproblémaként megoldható. A hálózat konstruálása szokásosan eltér a fent definiált
gráftól. A járatokat jelző csúcsokat a hálózatban kettébontjuk egy járat indulási és egy járat
érkezési csúcsra, melyeket egy, a járatot jelző él köt össze. Ezeknek a járat-éleknek az alsó és

47
felső korlátja is 1 lesz, így biztosítva, hogy minden járat pontosan egy alkalommal kerüljön
teljesítésre. Mivel minden járatot pontosan egy alkalommal kell végrehajtani, így az éleiken
felmerülő költségek egy konstans többletként jelentkeznek, ami a feladat célfüggvényére
nincs hatással. A járatok csúcsaihoz hasonlóan a depót jelképező csúcs helyett is egy depó-
indulási, illetve depó-érkezési csúcsot vezetünk be. Ezeket egy 0 költségű éllel kötjük össze,
mely a hálózat depó-körfolyam éle lesz. Ha a fentiek szerint korlátozzuk a rendelkezésre álló
eszközök számát, úgy ennek az élnek a kapacitása k lesz. Ezt a fajta formalizmust használva a
feladat erősen polinomiális időben megoldható [Ahuja+1989].

3.2. A többdepós járműütemezési feladat (MDVSP)

Amint korábban említettük, a járműütemezés feladata a közlekedési társaságok fontos napi


feladata. A leggyakrabban használt modell a járműütemezési feladat megoldására az
úgynevezett többdepós járműütemezési probléma (Multiple Depot Vehicle Scheduling
Problem, MDVSP). Ebben a részben erre a problémára koncentrálunk, megoldásának
matematikai módszereit bemutatva. Ez, az egydepós esetnél általánosabb eset azt tükrözi,
hogy a valós életben, a különböző menetrendi járatokra (azok járműveire) különböző speciális
igények vonatkozhatnak. Ezek alapján különböző járműtípusok, valamint a járművek
tartózkodási helye alapján a járműveket különböző depókba osztjuk.
A többdepós járműütemezési problémát Bodin és szerzőtársai definiálták [Bodin+1983], majd
Bertossi és szerzőtársai mutatták meg róla, hogy NP-nehéz feladat [Bertossi+1987]. A modell
tartalmazza a valós életbeli járműütemezési probléma legfontosabb komponenseit.
Jelöléseinkben a Löbel által használt terminológiát követjük [Löbel1997].

A két legfontosabb komponens a menetrendi járatok, és a rendelkezésre álló járművek


halmaza. Menetrendi járatoknak hívjuk mindazokat a járatokat, ahol a járművek utasokat
szállítanak. Minden ilyen járat az indulási és az érkezési idejével, az indulási és érkezési
állomással, valamint a köztük lévő távolsággal van megadva. A járműveket tartózkodási
helyük alapján (fizikai) depókba osztjuk. Ez jelentheti azt a garázst, parkolóhelyet vagy
telephelyet, ahol az adott jármű parkol. A járművek különböző fontos jellemzőkkel is
rendelkezhetnek, amelyek alapján további csoportosításokat végezhetünk (logikai depók). A
fizikai (földrajzi) helyek és a tulajdonságok alapján a járműveket diszjunkt részhalmazokba
soroljuk. Az így kialakított részhalmazokat nevezzük depóknak.

A menetrendi járatok mellett a járműveknek másfajta járatokat is el kell látniuk. Ezeket


rezsijáratoknak nevezzük. Például, a napi első teljesítendő járathoz ki kell állni a járművel az
(éjszakai) parkolóhelyéről, és a napi utolsó járat után vissza kell térni oda. Ez nap közben is
előfordulhat, pl. hosszabb szünet esetén. Ezeket kiállási és beállási járatoknak hívjuk.
Tipikus, további rezsijáratok azok, amikor a jármű egy járat végrehajtása után egy másik
állomásra megy, hogy egy másik járatot onnan végrehajthasson. Ezeket szintén meg kell
engednünk ahhoz, hogy hatékony ütemezést kaphassunk.

Minden menetrendi járat esetén a felhasználó (megrendelő) megadja azokat a depókat,


ahonnan az adott járat kiszolgálható. A gyakorlatban ez jelentheti például azt, hogy bizonyos
járatok csak csuklós busszal láthatók el, és az is előírható, hogy mely esetben mely
telephelyhez tartozzanak. Ezen előírásokat a telephely és az állomás elhelyezkedése, valamint
a forgalom jellemzői határozhatják meg.

48
A menetrendi járatok között bizonyos összefüggéseket, relációkat definiálhatunk. Akkor
mondjuk, hogy két járat kompatibilis, ha a jármű az egyik járat végrehajtása után képes
időben odaérkezni a másik járat indulási helyére annak indulási idejéig. Amennyiben az első
járat érkezési állomása megegyezik a második járat indulási helyével, akkor az egyetlen
feltétel, hogy az első járat érkezési időpontja korábban vagy ugyanakkor legyen, mint a
második járat indulási időpontja. Ha az első járat érkezési állomása nem egyezik meg a
második járat indulási állomásával, akkor figyelembe kell vennünk az állomások közötti
rezsijáratok idejét. Feltesszük, hogy a kiállási és beállási járatok mindig kompatibilisek
egymással.

Már eddig is használtuk egy jármű ütemezésének fogalmát, de most pontosabban definiáljuk.
Egy jármű ütemezése járatoknak egy olyan lánca, amelyben minden egymást követő két
menetrendi járat egymással kompatibilis. Általában egy jármű ütemezése a gyakorlatban egy
jármű egy napi munkájának előírását jelenti, amit műszaknak, jármű-műszakoknak is
nevezzük. A jármű egy érvényes ütemezése egy kiállási járattal kezdődik, és egy beállási
járattal végződik.

Az MDVSP alapfeladata abból áll, hogy adjuk meg minimális számú jármű ütemezését a fenti
módon úgy, hogy minden egyes menetrendi járat hozzá legyen rendelve pontosan egy jármű
ütemezéséhez, és minden menetrendi járat a megfelelő, előírt depók valamelyikéből legyen
végrehajtva. Célfüggvényként kezelhetjük a járművek számának a minimalizálását, de
definiálható egy költségfüggvény is, és a cél ekkor a költségfüggvény minimalizálása. A
költségfüggvény ebben az esetben a teljes ütemezés költségét reprezentálja.
Megkülönböztethetünk az egyes depókhoz tartozó járművek esetén úgynevezett
átalányköltséget, valamint operatív költséget. Az átalányköltség az abból eredő költségátlagot
reprezentálja, hogy ilyen jármű rendelkezésre áll a depóban. Ez lehet a beszerzési, fenntartási,
karbantartási, stb. költségekből vetített átlag. Az operatív költség általában a megtett
távolságokkal arányos, azonban különböző lehet attól függően, hogy melyik depóból
származó jármű látja el az adott feladatot. A járatok operatív költsége attól is függhet, hogy
rezsi- vagy menetrendi járatról van-e szó, mivel különböző lehet a kilométerek „egységára”.
A modell képes úgynevezett depókapacitási korlátozó feltételek kezelésére is, azaz lehetséges
megoldásnak csak olyan megoldásokat tekint, amely figyelembe veszi minden depó esetén az
oda tartozó járművek maximális számát. Habár a rendszer figyelembe veheti, és a modellre
épülő, általunk fejlesztett rendszer figyelembe is veszi ezeket a kiterjesztéseket az
optimalizálás során, az egyszerűség kedvéért ezek leírására nem térünk ki a modell
ismertetése során.

A következőkben az MDVSP két megoldási technikáját mutatjuk be. Mindkettő egy


többtermékes folyamproblémára vezeti vissza a feladatot, és egészértékű programozási (IP)
feladatként oldja meg azt. A különbség az alapul szolgáló hálózat felépítésének a
módszerében rejlik. A tárgyalt modellek a kapcsolatalapú és az idő-tér hálózati modellnek
nevezett modellek.

Vannak a problémának más megfogalmazásai, modelljei is, ilyen például a probléma


halmazlefedési feladatként történő megfogalmazása, lásd például Ribeiro és Soumis
[Ribeiro+1994], vagy Hadjar és szerzőtársai [Hadjar+2001] cikkét.

49
3.3 Robusztus járműütemezési feladat
A járművek menetrendjére jelentős hatással vannak a forgalmi torlódások és a vezetők
viselkedése. Ha a szolgáltatók nem veszik figyelembe a jövőbeli zavarokat, az kockázatos
működéshez vezethet, és esetleg büntetési díjat is kell fizetniük, például ha a pontosság nem
éri el a szerződött minimális szintet. Az egyik lehetőség ezen probléma kezelésére, hogy
robusztus ütemezést hozunk létre, amely ellenálló ezeknek a bizonytalansági paramétereknek.
Például, Kramkowski és társai. (2009) extra időket használtak az SDVSP
implementációjukban, hogy minimalizálják az átlagos késedelmet a tervezett ütemezésnél. A
szerzők egy szimulált hűtés algoritmust dolgoztak ki különböző szomszédsági operátorokkal.
A numerikus eredmények azt mutatják, hogy a minimális extra idő használata minden
menetrendi utazásra nagymértékben csökkenti a késések várható időtartamát, míg nagyobb
extra idő alkalmazása (például öt perc) esetén szinte nulla lesz a felgyülemlett késések
összege, de ez a tervezett költséget is növeli.
Naumann és munkatársai [Naumann+2011] definiálnak egy optimalizálási problémát, hogy
csökkentsék a zavarok által okozott késésekből adódó költség összegét. A szerzők egy idő-tér
alapú (Kliewer és társai (2006)) hálózatot alkalmaznak, amelyhez extra éleket adnak, hogy a
buszok várjanak egy bizonyos ideig, mielőtt végrehajtják a következő tervezett utazást, így
robusztusabb ütemtervet generálva. Nyilvánvaló, hogy ha csökkentjük a zavarból adódó
probléma mértékét, az növeli a tervezett költségeket. A szerzők Pareto optimális
megoldásokat javasolnak, amelyeket összehasonlítanak a determinisztikus megközelítés
optimális megoldásával és a zavarok okozta késedelemet is figyelembe vevő megoldások
eredményeivel. A javasolt megközelítést kisméretű (néhány száz járat) valós adatokon
tesztelik..
Wei és munkatársai [Wei+2012] a robusztus MDVSP megoldásával foglalkoznak,
minimalizálva a működési költségeket, beleértve a futásteljesítmény költségeit is. A
késedelmes utazás okozta bizonytalan menetidőt véletlen változókkal modellezik egy adott
intervallumon belül, ismert várható értékkel. Néhány megszorítást alkalmaznak: korlátozzák a
tartalék járművek használatát; garantálniuk kell, hogy a jármű rendelkezik megfelelő
üzemanyag mennyiséggel a megfelelő utak végrehajtására két egymás utáni tankolás között;
és megjövetelik a kompatibilis vonal-jármű párokat. Több példát is megoldanak egy
hangyakolóniás algoritmussal.
Annak érdekében, hogy pontos szolgáltatást biztosítsanak, Yan és munkatársai [Yan+2012]
egy olyan VSP-re tesznek javaslatot, ami az eltérést az eredeti ütemtervtől egyedi ellenőrzési
pontokon minimalizálja. Az utazási időket ismert eloszlású valószínűségi változókkal
reprezentálják és a vezetők viselkedését is modellezik annak érdekében, hogy megfelelő
legyen a pontosság. A szerzők feltételezik, hogy ha egy busz eltér a menetrendtől az
ellenőrzési ponton, a buszvezető módosítja a busz sebességét - akár felgyorsítva vagy
lelassítva azt - annak érdekében, hogy az ütemezést tartani tudja a következő alkalommal.
Továbbá, a szerzők kidolgoznak egy koncepciót a fennmaradó késések kezelésére, amit nem
tudnak korrigálni a vezetők. Ezt Monte Carlo szimulációval modellezik, és így megadják azt a
buszütemezést, amely minimalizálja a menetrend be nem tartásából adódó szankciókat.

50
4. Jármütemezési feladat: megoldási módszerek

4.1. A kapcsolatalapú többtermékes hálózati folyam modell

A kapcsolatalapú többtermékes hálózati folyam (connection-based multicommodity network


flow) modell széleskörűen használt az MDVSP probléma megoldására. Sok, a témába vágó
kutatás fókuszált és fókuszál ennek alkalmazására. A kutatók intenzíven tanulmányozták a
generált egészértékű programozási (IP) feladat megoldási módszereinek fejlesztésében rejlő
lehetőségeket, csakúgy, mint a különböző megfogalmazási, formalizálási lehetőségeket.
Számos megközelítés alapul heurisztikus, közelítő módszerekre (lásd Löbel [Löbel1997],
Dell’Amico, Fischetti, és Toth [Dell’Amico+1993], Mesquita és Paixao [Mesquita+1992]),
míg mások pontos megoldást szolgáltató, úgynevezett egzakt algoritmusokat tárgyaltak (lásd
Kokott és Löbel [Kokott+1996], Löbel [Löbel1998]).

A modell leírásához először néhány jelölést kell bevezetnünk. Jelölje D a depók halmazát, és
T a járatok halmazát. Minden tT járat esetén jelölje d(t) és a(t) ennek indulási, illetve
érkezési időpontját. Jelölje g(t) D a t járat depóhalmazát: ez azokat a depókat tartalmazza,
amelyekből ki lehet kiszolgálni a t járatot. Jelölje Td  T azoknak a járatoknak a halmazát,
amelyek kiszolgálhatók a d depóból. Hasonlóan, minden dD esetén definiálunk két, s(d) és
e(d) csúcspontot a hálózatban, ezek szimbolizálják azt, hogy a jármű a d depóból indul, és oda
érkezik vissza.

A hálózat csúcspontjainak N halmazát ezek után a következő módon definiáljuk

N:={d(t)a(t)s(d) e(d)|tT, dD}.

A hálózat éleinek definíciójához vezessük be a következő jelöléseket. Legyen

Ad:= {(d(t),a(t))|tTd}

a d depóhoz tartozó menetrendi járatok halmaza. Legyen

Bd:={(a(t), d(t’))|t, t’Td kompatibilis járatok}

a d depóhoz tartozó lehetséges rezsijáratok halmaza. Legyen

Pd:={(s(d),d(t)), (a(t),e(d))|tTd}

a d depóhoz tartozó kiállási és beállási élek halmaza.

Ezek alapján meg tudjuk adni a hálózat éleinek halmazát:

E:= AdBdPd{(e(d), s(d))}, minden dD-re,

51
ahol (e(d),s(d)) az úgynevezett depó-körfolyam élek, amelyekre szintén szükségünk van a
hálózat korrekt definíciójához. A kapcsolat alapú modell felépítését a 4. ábra szemlélteti.

Ezen előkészületek után most már készen állunk arra, hogy definiáljuk az MDVSP feladatot
az (N,E) hálózaton. Ehhez definiálunk egy egészekből álló x vektort, amely egy többtermékes
folyamként is tekinthető.

Az x vektor segítségével olyan korlátozó feltételeket definiálunk, amelyek a feladat


követelményeit biztosítják. A vektor minden eleme a hálózat egy-egy éléhez tartozik. Minden,
e élhez tartozó elemet xed –vel jelölünk, ha az él a d depóhoz tartozik.

3. ábra: A kapcsolatalapú modell

A korlátozó feltételek biztosítják, hogy minden járatot pontosan egyszer hajtsunk végre, és
megoldást a járatokból álló olyan láncok alkossanak, amelyeknek nincs közös elemük, a
depó-körfolyam éleket kivéve. Formalizálva:

x
dg ( t )
d
( d ( t ), a ( t ))  1, t  T , (1)

x x d
e
d
e  0, t  T, n  N, (2)
en  en 

xed {0,1}, kivéve a depó - körfolyam éleket,

xed egész,

ahol n+ jelöli az nN csúcsból induló élek és n− jelöli az nN csúcsba futó élek halmazát.

Az (1) korlátozó feltétel biztosítja azt, hogy minden járatot végre kell hajtani, a (2) korlátozó
feltétel azt, hogy ha egy adott depóhoz tartozó jármű egy állomásra érkezik, akkor azután azt
el is kell hagynia. Amennyiben vannak depókapacitást korlátozó feltételek, akkor azokat a
depó-körfolyam élekhez kell kapacitásként, vagyis a folyamértékre vonatkozó felső korlátként
előírni. Bármely, a fenti feltételeket kielégítő folyam a feladat egy lehetséges megoldása.

52
Amennyiben optimális megoldást szeretnénk kapni, definiálnunk kell a célfüggvényt,
amelynek a fenti feltételeket kielégítő optimális megoldását keressük. Ez az élekhez
nemnegatív, valós értékű súlyokat rendelve történhet. Az él súlya az adott járat költségét
reprezentálja. Amennyiben egyszerűen a járművek számát szeretnénk minimalizálni (ekkor a
flottaminimalizálási feladatnak nevezett problémáról van szó), akkor a kiállási élekhez a többi
él költségéhez viszonyítva nagyon nagy súlyokat kell rendelni. Ha ce jelöli az e élhez rendelt
költséget (súlyt), akkor a célfüggvény a következő alakú:

c x ,
e
e e

és célunk ennek a minimalizálása. Ez a fenti korlátozó feltételekkel együtt tekintve egy


egészértékű programozási feladatot (IP-t) határoz meg. Ennek megoldásával kapcsolatban a
legfőbb felmerülő probléma az, hogy a hálózatnak túl sok éle van már kis városok közlekedési
társaságai valós életbeli feladatainak példái esetén is.

Az élek számának csökkentése egy új, módosított modellel történhet. Ezt tárgyaljuk a
következőekben,

4.2. Az idő-tér hálózati modell


Az idő-tér hálózati (time-space network, TSN) modellt Kliewer és szerzőtársai dolgozták ki
[Kliewer+2006]. A modell fő vívmánya, hogy nagyobb, a gyakorlatban előforduló méretű
problémákat is meg lehet vele oldani. A fő hátránya a kapcsolatalapú modellnek ugyanis az,
hogy a lehetséges rezsiátmeneteket jelképező élek száma gyakran túl nagy.
Gondoljunk csak egy több ezer menetrendi járatot tartalmazó hálózatra. Ez már egy közepes,
1-2 százezer lakosú városnál is előfordulhat, és egy ilyen esetben a lehetséges rezsiátmenetek
száma milliós nagyságrendű.

Ennek az oka az, hogy a kapcsolatalapú hálózat minden élt tartalmaz, ahol akár csak
elméletileg is lehetséges átmenet (az adott két járat elméletileg követheti egymást). A végső
megoldásba ezeknek ugyan csak egy csekély hányada kerül be, de nem lehetséges ezek
elhagyása, mert azzal elveszíthetjük a feladat optimális megoldását is.

Ennek a problémának a leküzdésére vezették be a TSN modellt Kliewer és szerzőtársai


[Kliewer+2006]. A modell két dimenziót használ, ezek az idő és a tér. A tér szó jelentése itt
az, hogy melyik fizikai (földrajzi) helyről vagy állomásról van szó, míg az időt idővonalak
reprezentálják, amelyek egyes állomásokhoz (földrajzi helyekhez) tartoznak. Az idővonalak
az indulási és érkezési időpontokat tartalmazzák. Minden egyes állomáshoz tartozik egy
idővonal, és az állomás minden lehetséges indulási és érkezési időpontjához egy csúcspontot
definiálunk az idővonalán. (Ha több, különböző járat indulási vagy érkezési időpontja
egybeesik, azokhoz egy, „összevont” csúcspont tartozik.) Könnyű észrevenni, hogy a két
modell közötti alapvető különbség az, hogy az időpontok itt helyekhez vannak kötve. Így a
hálózat N csúcsát az állomásokhoz tartozó indulási és érkezési időpontok adják. Minden dD
esetén hasonlóan definiálhatjuk Ad-t, mint az előző, kapcsolatalapú modellben. Természetesen
a depókhoz is idővonalakat adunk meg, így definiálható Pd is.

53
A 4. ábrán egy tér-idő hálózat ábráját példáként.

4. ábra Egy idő-tér hálózati (TSN) példa

A legfőbb különbség azonban a két modell között a rezsijáratok definíciójában rejlik. Az idő-
tér hálózati modellben ugyanis az idővonalak használatával lehetőség nyílik arra, hogy egybe
„összegyűjtsük”, összevonjuk több rezsijáratnak a lehetséges folyamát. Így nem feltétlenül
szükséges minden egyes lehetséges rezsijáratot külön éllel reprezentálni, hanem megfelelő
rezsiátmenetekhez tartozó éleket összevonhatunk egyetlen éllé. A szerzők [Kliewer+2006] az
úgynevezett utolsó-első egyezési stratégiát alkalmazták. Ennek alapgondolata egy kétfázisú
összevonási stratégia. Az első fázisban minden egyes járat érkezését jelképező csúcspontból
az összes többi állomás esetén csak a másik állomás első olyan járatához vezető, rezsijáratot
jelentő élt húzzuk be, amely járatunkkal időben az első kompatibilis járat a másik állomáson.
Ezen éleket nevezzük első egyezésnek. Csak ezeket az éleket tekintjük a lehetséges rezsiélek
közül. A második fázisban tovább csökkentjük ezen élek számát. Most kerül sor arra, hogy
összevonjuk a beérkező rezsiéleket. Egy-egy adott állomásnak az indulást jelképező
csúcspontjaiba mindegyik másik állomásról érkező rezsijáratok közül már csak ez első
egyezésnek megfelelő rezsijáratokat hagytuk meg az első fázis után. A második fázisban egy
adott állomás időpontjaihoz végignézzük az összes többi állomásról érkező, első egyezés
éleket, és az oda egy azonos, de másik állomásról érkező, első egyezést jelentő élek közül
csak a legkésőbb indulót hagyjuk meg. Ezt nevezzük utolsó-első egyezést jelképező élnek.
Elhagyva a többi, első egyezést jelképező élt, az élek számának további csökkentése
lehetséges. Így a Bd halmaz az összes rezsijáratnak csak egy részét fogja tartalmazni. Ezen a
módon csökkenthető a különböző állomások között rezsiélek száma. Azonban, hogy teljessé
tegyük a modellt, ahhoz mindegyik állomáshoz be kell vezetni az állomáson belüli
csúcspontokat összekötő, úgynevezett várakozó élek Wd halmazát, minden dD depó esetén.

54
Élek összevonása az idő-tér modellben

Ezek az élek mindig az állomás idővonalát követik, éllel összekötve az egymást követő
(indulási) időpontokat, összegyűjtve azok folyamát.

Így ebben az esetben az E élhalmaz definíciója a következő lesz:

E:=AdBdPdWd{(e(d),s(d))}, minden dD esetén


.
Az IP modell a kapcsolatlapú modelléhez hasonló ebben az esetben is, az egyetlen különbség,
hogy (mivel több él folyamát egyetlen egybe gyűjthetjük össze), hogy az

xed {0,1}
feltétel helyett az

xed  0

feltételt kell szerepeltetnünk. (Ez természetesen egész lesz, mivel egész megoldásokat
keresünk, egészértékű programozási feladatról van szó.)

4.3. Heurisztikus algoritmusok

Az MDVSP-re számos heurisztikus megközelítést publikáltak. Kliewer és társai


[Kliewer+2005] egy ún. változó fixálási (variable fixing) heurisztikát adnak meg, amely az
idő-tér modellen alapul. Ennek alapötlete, hogy egyszerűsített problémák megoldásával (az
említett cikkben külön SDVSP problémákat oldanak meg az eredeti MDVSP minden

55
depójára) olyan járatsorozatokat találjon, melyek minden egyszerűsített problémában egymás
után következnek. Ezeket a sorozatokat leköti, és a felépítendő idő-tér modellben együtt
kezeli őket.

Suhl és szerzőtársai [Suhl+2007] egy kerekítéses heurisztikát alkalmaztak. Módszerük


alapötlete, hogy az MDVSP-feladat LP-relaxációjának értéke és az optimális egész megoldás
értéke közötti különbség meglehetősen kicsi, néha nulla, és az LP-relaxáció optimális
megoldásában sok változó kap már egész értéket. Az algoritmus egy előre meghatározott
korlát elérésekor leállítja az IP-megoldót (ez lehet a bejárt csúcsok számának korlátja, vagy az
aktuális feladat értéke és az LP-relaxáció értéke közötti különbség), majd az így “kézben
lévő” részmegoldáson végrehajt egy kerekítési algoritmust. Az algoritmus által meghatározott
két kerek tési tartomány [0, rl ] és [ru ,1] , ahol 0  rl  ru  1. Legyen x j egy változó, és
x j  x j  = f j , ahol 0  x j  1. A heuriszrtika az x j értékét az alábbi szabályok szerint
kerekíti:

x , ha f j  [0, rl ],
x j :=  j
x j , ha f j  [ru ,1].

Egymás után több kerekítési iterációt is végrehajthatunk, feltéve, hogy az így létrejött LP még
mindig lehetséges megoldást ad. Ha nem tudtunk egy változót sem kerekíteni, akkor a kezdeti
kerekítési intervallumok növelhetők. Az így kapott feladatra újra lefuttatjuk a korlátozás-
szétválasztás módszerére alapuló IP-megoldót. A folyamatot addig ismételjük, amíg minden
változót fixáltunk, vagy a feladatnak nincs lehetséges megoldása.
Pepin és szerzőtársainak [Pepin+2009] dolgozata több heurisztikus módszert hasonlít össze. A
publikációban öt különböző heurisztikus megközelítést vizsgálnak:

• egy szétválasztás és vágás ( branch-and-cut) típusú megoldást,


• Lagrange-relaxációra alapuló heurisztikát,
• oszlopgenerálást,
• egy nagy szomszédsági keresést,
• valamint egy tabu-keresést.

A szétválasztás és vágás típusú megoldás alkalmazásánál a feladat idő-tér modelljét építik fel,
majd oldják meg CPLEX-szel, míg az oszlopgenerálásnál lényegében szintén CPLEX-szel
kapnak eredményt.

A probléma folyammegmaradási feltételének Lagrange-relaxálásával a kapott feladat SDVSP-


részproblémákkal lesz ekvivalens, amit egy aukciós algoritmussal oldanak meg. Az így kapott
alsó korlátot szubgradiens módszerrel javítják.

A nagy szomszédsági keresés egy kezdeti megoldásból kiindulva minden iterációban


különböző járműműszakot választ ki, több választási stratégia valamelyikével. Az így
kiválasztott műszakokat újraoptimalizálják, az oszlopgenerálást használva. A választási
stratégiák valószínűsége minden iterációban változik attól függően, hogy az előzőek mennyire
voltak hatékonyak.

A tabukeresés szintén egy kezdeti megoldásból indul, és minden iterációban az aktuális


megoldás egy szomszédjára tér át. Kétféle módon definiálják a szomszédságot: 1-mozgatás,

56
és csere-mozgatás alapján. Az 1-mozgatással olyan szomszédok érhetőek el, melynél a v i
eszköz valamely járatát a szomszédban egy másik, v j eszköz hajtja végre. A csere-mozgatás
olyan szomszédokat ad, melyeknél, ha a t k járatot a v i eszköz, valamint a t k járatot a v j
eszköz hajtotta végre az eredeti ütemezésben, úgy a szomszédban a t k járatot a v j , valamint a
t k járatot a v i eszköz hajtja végre (valamely k , k , i és j értékekre).

Tabukeresés algoritmusa
1: Egy s kezdeti megoldás létrehozása
2: Legyen TL üres, és s  s
3: amíg van lehetséges javítás a szomszédság alapján
4: legyen s'  N( s ) , melyre f ( s') minimális, és s' -t egy m  TL lépéssel kapjuk

5: ha s' lehetséges megoldás, és f ( s )  f ( s )

6: s  s
7: legyen s  s' , és frissítsük TL -t

57
5. A javasolt, új jármű-hozzárendelő modell és megoldási
módszere

Mint ezt korábban is említettük, az (elméleti) járműütemezésben néhány fontos feladat nem
modellezhető. A következőkben bemutatjuk, milyen módszert javasolunk annak érdekében,
hogy ezeket a szempontokat ki tudjuk elégíteni. Ebben az alfejezetben a járműütemező és
hozzárendelő modul részletes leírását adjuk meg, és ennek alkalmazási tapasztalatait
elemezzük. A teszteredményeket a teszteredményeket tárgyaló fejezetben a 6. fejezetben
találjuk.

A fő probléma a korábban említett járműütemező modelleknél az, hogy azok csak a


menetrendi járatokat csoportosítják különböző halmazokba, az adott célfüggvény szerinti
optimális módon. A gyakorlatban azonban a közlekedési vállalatoknak általában több
kívánalmuk van. Tényleges járműveket kell rendelni a járathalmazokhoz, és ezek a valódi
járművek rendelkeznek néhány extra tulajdonsággal. Például, újra kell tankolni őket bizonyos
megtett távolság után. Ez a bizonyos távolság, valamint a tankoláshoz szükséges idő
jelentősen különböző lehet különböző üzemanyagoknál, főleg alternatív energiaforrású
járművek esetén [Rabl2002,Li+2009].

A legtöbb létező MDVSP-modell nem támogatja az ilyen jellegű korlátozásokat. A modellek


csak a menetrendi járatok járműütemezéssé összefűzését támogatják, de nem támogatnak
egyéb előírásokat, korlátozásokat. Még a járműütemezések hossza sem korlátozható könnyen,
és a tárgyalt modellekben ennél bonyolultabb feltételek bevonása, hozzáadása a
járathalmazokhoz lehetetlennek tűnik. Legjobb tudomásunk szerint csak néhány közlemény
tárgyalja ezt a problémát, és ezek jórészt heurisztikus módszerek, lásd például a
[Banihashemi+2000], vagy a [Wang+2007] publikációkat.

5.1. A matematikai modell


A fent leírt problémák megoldására fejlesztettük ki a következő jármű-hozzárendelési
modellt. Modellünk az alternatív üzemanyagú járműveket és ezek tankolási eseményeit is
kezeli.
Minden d  D esetén legyen H d azon p utak halmaza, amelyek dt (d) -ből indulnak,
és oda is térnek vissza. Legyen

H = H d
dD

58
az összes ilyen szabályos utak halmaza. Minden p  H d esetén vezessünk be egy y dp bináris
változót, amelyet a következöképpen definiálunk:

1, ha a p  H d út szerepel a megoldásba n,


y dp = 
0, kulonben.

Definiáljuk továbbá a de,p -t az alábbi módon:

1, ha a p  H d út tartalmazza az e élet ,



a de,p = 0, kulonben.

Legyen c p a p  H d úthoz rendelt költség. Ekkor a modell a következöképpen fogalmazható


meg. Mimimalizáljuk a

 c y
dD pH d
p
d
p

célfüggvényt a
 
dD pH d ,e = ( dt( t ), at ( t ))E d
a de,p y dp = 1, t  T

 
dD pH d ,e = ( dt( r ), at ( r ))E d
a de,p y dp  k r , r  R

és
ydp {0,1}, d  D, p  Hd

feltételek mellett. A fenti feltételekben R a tankolási, vagy esetleges más szükséges


karbantartási eseményeket jelenti, míg kr-rel az adott r eseményhez tartozó kiszolgáló egység
kapacitását jelöljük. A második feltételben azt fogalmazzuk meg, hogy az egyidőben történő
ilyen események dszáma nem haladhatja meg az egység kapacitását.
Ha a d depóban korlátos, k d számú jármű van, akkor ebben az esetben a feltételeket
ki kell egész tenni a következő egyenlőtlenségekkel:

y
pH d
d
p  k d , d  D.

A modell megoldására a lineáris programozásnál ismertetett szimplex módszert használjuk.


Ezt a nagyszámú változó miatt oszlopgenerálással párosítanak, az egészértékűségi feltétel
elhagyásával kapott úgynevezett relaxált modellen.

A megoldási algoritmus főbb lépései az alábbiak:

1. Kezdeti megoldás előállítása. Az így kapott fordák adják a kezdeti oszlophalmazt.

59
2. A relaxált feladat megoldása az adott oszlophalmazzal, az alsó korlát, a duálisok és az
oszlophalmaz tárolása.
3. Az úgynevezett árazási (pricing) probléma megoldása, ami olyan új oszlopok keresését
jelenti, amelyre a redukált költség (reduced cost) negatív.
4. Az új oszlopok hozzávétele a problémához, a szükségtelen, nagy költségű oszlopok
törlése.
5. Megállási kritérium ellenőrzése, ha nem teljesül, akkor folytatás a 2. lépéssel.
6. Végső eszközfordák kialakítása a kapott oszlophalmaz alapján.

A 6. lépésben a végső emberfordák kialakításra használhatunk MILP megoldót, az


oszlopgenerálás által kapott oszlopokat használva. Ugyancsak LP megoldót alkalmazhatunk a
2. lépésben. Az 5. lépésben megállási kritériumként azt tekinthetjük, ha a megoldás már nem
javul szignifikánsan, illetve elértünk egy megadott iterációszámot. Az algoritmus
legfontosabb része a 3. lépés, az árazási probléma megoldása. Így most ezt ismertetjük
részleteiben.
A 3. lépésben a cél olyan új oszlopok generálása, amelyre a redukált költség negatív. Ez
gyakorlatilag új szabályos eszközfordák generálását jelenti, az eredeti költségfüggvénynek a a
duálisok értékeivel módosított változatát használva. Ehhez először egy olyan módszert kell
kifejleszteni, ami eszközfordákat tud generálni. .
Az eszközfordák generálása

A generálónak figyelembe kell venni a szabályokat. Az általunk használt generáló a már


ismertetett idő-tér hálózatot használja. Az árazási probléma azt jelenti, hogy a generálóhálózat
segítségével olyan eszközfordákat kell előállítani, amelyek költsége negatív, és a negatív
költségűek közül a legkisebbek. Biztosítani kell ugyanakkor, hogy a generált fordák
megfeleljenek a szabályoknak, amelyeket a követelmények támasztanak. Ez azt jelenti, hogy
nem elegendő olyan modellt építeni, ami alkalmas a legkisebb költségű eszközforda
kiszámítására, további feltételek ellenőrzését is biztosítani kell. Ilyen feltételek lehetnek a
maximális, vagy minimális idő, a maximális, minimális fordahossz, maximális idő a
következő tankolásig, stb. Ezen feladat kezelése az úgynevezett erőforrás-korlátozott
legrövidebb út probléma segítségével történik. A felépített generálóhálózaton a pricing
probléma megoldása dinamikus programozási algoritmus segítségével történhet.
Az idő-tér alapú eszközforda generátor

Az idő-tér hálózat felépítése az elméleti eszközfordára vonatkozóhoz hasonlóan történik. A


hálózat éleit itt is a járatok jelentik, azonban ez kiegészül rezsijáratokkal és tankolási vagy
egyéb eseményekkel. A hálózat csúcspontjai ezúttal is az események kezdő- és végpontjai
lesznek az egyes idővonalakon, amik a végállomásokhoz vannak rendelve. Minden
generálóhálózathoz tartozik egy depó idővonal is, ami az aktuális depót reprezentálja. A
hálózatnak ötféle éle lehet, ezek a kiállás, beállás, a járat, a tankolási esemény és a várakozás.
A kiállás és beállás élek mindig a depóből indulnak és az egyes események kezdeti csúcsához
vezetnek. A járat élek az adott járat indulási és érkezési ideje, illetve helye által vannak
meghatározva. Az idővonalakon a járatokat várakozó élek kötik össze. Lehetőség van arra is,
hogy a várakozás rezsiutazással történjen, ilyenkor a várakozó él két különböző idővonal
között halad. Az 5.1. ábra egy idő-tér hálózat alapú generátor felépítését mutatja be.

60
5.1. ábra Fordagenerátor felépítése idő-tér hálózattal

Kérdés, hogy hogyan biztosíthatók a generátor segítségével az egyéb feltételek. Ezek


modellezése úgynevezett erőforrrások segíítségével történik. Minden emberfordához
különböző erőforrások rendelhetők, egyszerre általában több. Ezek a forda különböző
korlátozásait fejezik ki, mint például a maximális munkaidő, benne lévő járatok száma, stb. A
fordához tartozó erőforrásérték egy függvény segítségével számolható. Ezeket a függvényeket
erőforrás függvényeknek nevezzük (resource extension function, REF). Az eszközfordákat
utak segítségével írják le, általában a függvények úgy vannak megkonstruálva, hogy a
függvényértéket az út élein vett értékek összegzésével kapjuk. Az erőforrás függvényeket
például idő-tér hálózati modell esetén az 5.2. táblázat szerint adhatjuk meg.

Forda- Munkaszakaszok
Él típus Költség Munkaidő
időtartam száma
Kiállás Forda napi 0 Hossz 0
költsége
Beállás 0 0 Hossz 0
Járat Hossz*költség Hossz Hossz 1
Várakozás 0 0 Hossz 0
Várakozás 0 0 Hossz 0
utazással

5.2. táblázat Erőforrás függvény definiálása különböző jellemzőkre

Az előzőekben említett idő-tér hálózati modellben a várakozó élek minden járatz vég és vele
kompatiblis következő járat kezdet között generáljuk. Ez nagyméretű feladat esetén igen sok
élt jelenthet. Ezért a feladat méretének csökkentése érdekében lehetséges aggregált idő-tér
hálózat használata is. Ebben az esetben szétválasztjuk a szünet és a várakozó éleket, az
idővonalon a járatok kezdetei között várakozó éleket generálunk, amelyek összesítik az
idővonalon a folyamot. Az 5.3. ábra az aggregált idő-tér hálózatot mutatja be.

61
5.3. ábra Eszközforda generátor felépítése aggregált idő-tér hálózattal

5.2. A legkisebb negatív költségű eszközfordák generálása

Az előzőekben tárgyalt eszközforda generáló hálózaton a minimális negatív költségű


eszközforda kereéses egy erőforrás korlátozott legrövidebb-út feladat megoldásával történik.
Ennek matematikai modellje az (N,E) generáló hálózaton az R erőforráshalmazzal az alábbi:

 c~ x
eE
e e  min,
feltéve, hogy

1, ha n a forrás

 x   x = 0, ha n nem a forrás vagy a cél, n  N
d
e
d
e
(6)
en en - 1, ha n a cél

a r   d er xe  f r minden r  R esetén, (7)


eE

xe  0,1, minden e  E esetén


(8)

A célfüggvényben c~e a már korábban bevezetett redukált költség, amit az eredeti


költségértékekből a duális értékek segítségével kapunk. Azonban minden élhez a költség
mellett erőforrásértékek is tartoznak, az R erőforráshalmaz minden elemére. Ezek lehetnek
például az 1. táblázatban definiált értékek. A (6) formulával leírt egyenletek a szokásos
módon azt fejezik ki, hogy az emberfordának folyamatosan kell haladnia a forrástól a célig. A

62
(7) egyenlőtlenségek pedig azt jelentik, hogy a szabályos emberfordáknak minden a
modellben definiált kritériumnak eleget kell tenni, például nem lehet hosszabb egy megadott
időtartamnál, nem tartalmazhat csak korlátozott vezetési időt, stb. A modell megoldása pedig
épp a legkisebb csökkentett költségű szabályos eszközfordát adja, aminek keresése a célunk.

5.3. A matematikai modell megoldása


Az előző fejezetben leírt optimalizálási modell megoldására többféle módszer létezik. Az
egyik lehetőség az úgynevezett dinamikus programozási módszer használata, melyet Joksch
definiált 1966-ban. Ennek lényege, hogy iteratív módon útvonalakat konstruálunk a forrástól a
cél eléréséig. Jocksch az alábbi rekurzív formulával adta meg a modell megoldást egye
erőforrásra. Jelólje 𝐶𝑗 (𝑡 𝑟 ) a forrásból a j csúcsba vezető legrövidebb út költségét, miközben
az út erőforrás felhasználása legfeljebb 𝑡 𝑟 . Ekkor a rekurzív formula az alábbi:

𝑟
𝐶𝑗 (𝑡 𝑟 ) = 𝑚𝑖𝑛 {𝐶𝑗 (𝑡 𝑟 − 1), min𝑖𝑗∈𝐸|𝑑𝑖𝑗𝑟 ≤𝑡 𝑟 {𝐶𝑖 (𝑡 𝑟 − 𝑑𝑖𝑗 ) + 𝑐̃𝑖𝑗 }},

ahol

𝐶1 (𝑡 𝑟 ) = 0, ha 0 ≤ 𝑡 𝑟 ≤ 𝑓 𝑟 , és 𝐶𝑗 (0) = ∞, ha 𝑗 = 2, … , |𝑁|.

A fenti formulában feltételezzük, hogy a hálózat csúcsai sorszámozottak és a sorszámozásban


i<j teljesül.

A leghatékonyabb megvalósítása a dinamikus programozási módszernek a cimkézési


megközelítésse lehetséges. Ebben az esetben minden egyes csúcshoz cimkéket rendelünk.
Minden egyes cimke egy vektor, amely tartalmazza az adott csúcsba vezető aktuális legjobb
út költségét, valamint a különböző erőforrásoknál az erőforrás függvények összegzett értékeit.
Minden egyes csúcshoz több cimke is kiszámításra kerül, amelyek közül csak a dominánsak
örződnek meg. Az l-edik új cimke kiszámítása a j csúcsban a következőképpen történik:

𝐿𝑗𝑙 = (𝐿𝑘𝑖 , 𝑐̃ (𝑃𝑖𝑘 ) + 𝑐̃𝑖𝑗 , 𝑑1 (𝑃𝑖𝑘 ) + 𝑑𝑖𝑗


1
, … , 𝑑 𝑟 (𝑃𝑖𝑘 ) + 𝑑𝑖𝑗
𝑟
),

Egy új cimke csak akkor elfogadható, ha teljesül a 𝑑 𝑟 (𝑃𝑗𝑙 ) ≤ 𝑓 𝑟 feltétel, minden 𝑟 ∈ 𝑅 esetén.
Amennyiben 𝑑 𝑟 (𝑃𝑖𝑘 ) + 𝑑𝑖𝑗
𝑟
< 𝑎𝑟 , valamely 𝑟 ∈ 𝑅-re, akkor 𝑑𝑟 (𝑃𝑗𝑙 ) = 𝑎𝑟 lesz. A cimkék
továbbá csak akkor tárolódnak, ha nem domnálja egyetlen más cimke sem. Egy 𝐿𝑗𝑚 cimke
dominálja az 𝐿𝑗𝑛 cimkét, ha 𝑐̃ (𝑃𝑗𝑚 ) ≤ 𝑐̃ (𝑃𝑗𝑛 ), továbbá 𝑑 𝑟 (𝑃𝑗𝑚 ) ≤ 𝑑 𝑟 (𝑃𝑗𝑛 ), minden 𝑟 ∈ 𝑅
esetén.

5.3.1. A cimkézési algoritmus

1. Inicializálás, a forrás csúcs cimkéjének a beállítása, 𝐿0𝑠 = (𝑛𝑢𝑙𝑙, 0,0, . . . ,0).


2. Legyen j a következő csúcs indexe.
3. Legyen i a j csúcs következő szomszédja, amelyből vezet él j-be.

63
4. Legyen l a i csúcs cimkéi közül a következő indexe.
𝑟
5. Ha van olyan 𝑟 ∈ 𝑅, hogy 𝑑 𝑟 (𝑙) + 𝑑𝑖𝑗 > 𝑓 𝑟 , akkor folytassuk a 4. lépéssel.
6. Legyen 𝐿𝑗𝑚 = (𝑙, 𝑐̃ (𝑙) + 𝑐̃𝑖𝑗 , 𝑑1 (𝑙) + 𝑑𝑖𝑗
1 𝑟
, … , 𝑑 𝑟 (𝑙) + 𝑑𝑖𝑗 ), 𝐿𝑗 = 𝐿𝑗 ∪ 𝐿𝑗𝑚 .
7. Ha van még vizsgálatlan cimke az i-edik csúcsban, folytassuk a 4. lépéssel.
8. Ha van még vizsgálatlan csúcs, amelyből vezet él j-be, folytassuk a 3. lépéssel.
9. Távolítsuk el j cimkéi közül azokat, amelyeket nem dominál másik cimke.
10. Ha van még vizsgálatlan csúcs, akkor folytassuk a 3. lépéssel.

64
6. Egy kombinált eszköz-emberforda optimalizáló modell

Végezetül [Steinzen2007] alapján bemutatunk egy kombinált modellt, ami lehetőséget biztosít
eszköz- és emberfordák együttes kialakítására.
A fentiekben használt ( N , E ) hálózaton és a K emberforda halmazon definált egészértékű
programozási feladat az alábbi módon adható meg. A definicióban ha egy xe változó a d
depóhoz tartozó élre vonatkozik, akkor ezt egyszerűen xed -val jelöljük. Hasonlóan, ha egy
d
emberforda változó K -hez tartozik, ykd -vel jlöljük Formálisan a modell a következő:

c x   w y
eE
e e
kK
k k  min,
feltéve, hogy

  x
d g t
d
( d ( t ), a ( t )) = 1 minden t  T esetén, (1)

x d
e  x d
e = 0 minden d  D és n  N esetén, (2)
en  en 

~
xed   ykd = 0 minden d  D és e  E d esetén, (3)
kK d ( e )

xed  0,1 kivéve a depócirkulációs éleket, (4)

xed egész, és ykd  0,1 (5)

  ~d
ahol n jelöli a kimenő éleket, míg n a bemenő éleket az n  N csúcs esetén, E pedig
azon élek halmaza, amelyekhez járművezetőt kell rendelni.

Az (1) egyenlet azt fejezi ki, hogy minden járatot pontosan egyszer kell végrehajtani, míg (2)
azt jelenti, hogy ha egy járat beérkezik egy végállomásra, akkor onnan tovább is kell haladnia.
A (3) egyenlet kapcsolatot teremt az eszköz- és emberfordák között: minden élet, amit egy
eszközforda lefed, pontosan ugyanannyi számú emberfordával kell lefedni, méghozzá
ugyanabból a depóból.

Ez a feladat már azért is bonyolultabb a kizárólag eszközforda megoldására alkalmazottnál,


mert itt újabb változók, az emberforda változók jelennek meg. Azonban az igazi nehézséget
az okozza, hogy a lehetséges szabályos emberfordák száma olyan nagy, hogy lehetetlen őket
legenerálni, különösen nagyobb méretű feladat esetén. Emiatt ez eszközfordánál alkalmazott
MILP megoldóval történő megoldás lehetetlen ebben az esetben.
A modell megoldására Lagrange relaxációt szokás használni. Ezt a nagyszámú változó miatt
oszlopgenerálással párosítanak. A modell ismertetése során a Steinzen által használt

65
megközelítést használjuk. Ennek bővebb tárgyalása megtalálható a [Steinzen2007]
dolgozatban.

A megoldási algoritmus főbb lépései az alábbiak:

1. Kezdeti megoldás előállítása, az MDVSP feladat megoldása, kezdeti emberfordák


kialakítása. Ennek a megoldásai adják a kezdeti oszlophalmazt.
2. A Lagrange-duális feladat megoldása az adott oszlophalmazzal, az alsó korlát, a
duálisok és az oszlophalmaz tárolása.
3. Az úgynevezett árazási (pricing) probléma megoldása, ami olyan új oszlopok keresését
jelenti, amelyre a redukált költség (reduced cost) negatív.
4. Az új oszlopok hozzávétele a problémához, a szükségtelen, nagy költségű oszlopok
törlése.
5. Megállási kritérium ellenőrzése, ha nem teljesül, akkor folytatás a 2. lépéssel.
6. Végső eszköz- és emberfordák kialakítása a kapott oszlophalmaz alapján.

Az MDVSP feladat megoldására a már ismert módszert használható, míg a kezdeti


emberfordák bármilyen módszerrel előállíthatók. A 6. lépésben a végső emberfordák
kialakításra használhatunk MILP megoldót, az oszlopgenerálás által kapott oszlopokat
használva. Az 5. lépésben megállási kritériumként azt tekinthetjük, ha a megoldás már nem
javul szignifikánsan, illetve elértünk egy megadott iterációszámot. Az algoritmus két
legfontosabb része a 2. és a 3. lépés, a Lagrange-duális, illetve az árazási probléma
megoldása.

6.1. ábra A modell fő megoldási algoritmusa

66
A célunk ebben az esetben úgynevezett Lagrange duális közelítő megoldása, ami a
szubgradiens módszerrel történik. A végén a Lagrange szorzók közelítik az optimális duális
változókat. Amennyiben a korábban leírt modellben a járatok és az emberfordák közötti
kapcsolatot biztosító feltételeket, valamint a járatok egyszeri teljesítésére vonatkozó
feltételeket a Lagrange módszerrel relaxáljuk, akkor a probléma két részre esik szét. Egy
egydepós járműütemezési problémává, ami polinomiális időben megoldható, valamint egy
egyszerű optimalizálási problémává.

Bevezetve a  ed , valamint  t Lagrange szorzókat, a célfüggvény az alábbi formájú lesz:

   
 c x   w y   1    x d
    ed  xed   ykd   min.

 dD eE~ d  
e e k k t ( d ( t ), a ( t ))
eE kK tT  d g t kK d ( e ) 

Így az optimalizálási feladat a következő alakra hozható:

Φ(𝜇, 𝜋) = Φx (𝜇, 𝜋) + Φy (𝜇) +  𝜋𝑡 ,


tT

ahol Φx (𝜇, 𝜋) az alábbi eszközforda optimalizálási részprobléma:

 c~ x
eE
e e  min,
feltéve, hogy

x d
e  x d
e = 0 minden d  D és n  N esetén, (6)
en  en 

xed egész.

Továbbá Φy (𝜇) a következő emberforda optimalizálási részprobléma:

 w~ y
kK
k k  min,

feltéve hogy yk  0,1.

~ az úgynevezett csökkentett eszköz-, illetve emberforda költségek:


c~e , illetve wk

~
ced   ed   t , ha e a t járathoz tartozó él és e  E d ,
 ~
c~ed   ced   ed , ha e nem tartozik járathoz, e  E d ,
 ced különben

valamint

~ d  wd 
wk k  d
e .
kK d ( e )

67
Amennyiben adottak a 𝜇, 𝜋 szorzóvektorok, akkor az első probléma a depók számának
megfelelő darabszámú egydepós járműütemezési probléma megoldását jelenti. Ez megtehető
~d  0 ,
polinomiális időben. A második probléma megoldása egyszerű, minden ykd  1, ha wk

különben yk  0 .
d

6.1. A szubgradiens algoritmus, a Lagrange duális megoldása

1. lépés: Inicializálás: Állítsuk be a 𝜇 0 , 𝜋 0 kezdeti szorzóvektor értékeket 0-ra és legyen i = 0.


Számoljunk ki egy felső korlátot a célfüggvényre, legyen az érték z*.

2. lépés: Oldjuk meg a Lagrange részfeladatokat az adott 𝜇 𝑖 , 𝜋 𝑖 szorzóvektorokkal, tároljuk el


az optimális megoldást és a célfüggvény értékét (Φ(𝜇 𝑖 , 𝜋 𝑖 ) minimumának
meghatározása). Legyen a célfüggvény értéke ZLR.
𝜇
3. lépés: Számojuk ki a d keresési irányvektort, legyen 𝑑𝑒 = xed   ykd , illetve 𝑑𝑡𝜋 =
kK d ( e )


~
1 x(dd (t ), a (t )) , minden e  E d élre, amely emberfordához kell, tartozzon, illetve t
d g t 
járatra, amelyet végre kell hajtani. Itt x és y a 2. lépésben megadott feladat optimális
megoldását jelentik.

z∗ −ZLR
4. lépés: Számoljuk ki a 𝑤 = 𝜆 ‖𝑑‖2
lépéshosszt, ahol 𝜆 egy paraméter, melynek értékét
felére csökkentjük, ha a célfüggvény 10 iteráción át nem csökken.

5. lépés: Számoljuk ki a 𝜇, 𝜋 vektorok új értékeit, legyen 𝜇 𝑖+1 = 𝜇 𝑖 + 𝑤𝑑 𝜇 , továbbá 𝜋 𝑖+1 =


𝜋 𝑖 + 𝑤𝑑 𝜋 .

6. lépés: Ellenőrizzük a megállási feltételeket, ha nem teljesül legyen i=i+1 és lépjünk a 2.


lépésre. A megállási feltételek a következők: d=0, 𝜆 elég kicsi (≤ 𝜀), elértünk egy
előre adott iteráció számot, ‖𝑑‖2 vagy z ∗ − Z LR elég kicsi (≤ 𝜀).

6.2. Az árazási probléma megoldása

A megoldás célja olyan új oszlopok generálása, amelyre a redukált költség negatív. Ez


gyakorlatilag új szabályos emberfordák generálását jelenti, az eredeti költségfüggvénynek a
Lagrange-duálisok értékeivel módosított változatát használva. Ehhez először egy olyan
módszert kell kifejleszteni, ami emberfordákat tud generálni.

Az emberfordák összeállítása munkaszakaszok segítségével történik. Egy munkaszakasz egy


ember által folyamatosan, szünet nélkül végzett tevékenységek sorozatát jelenti, amik
lehetnek járatok, rezsimenetek, esetleg rövidebb várakozások. Egy emberforda általában egy

68
vagy több munkaszakaszból áll, köztük a szabályoknak megfelelő szünetekkel. A
gyakorlatban egy emberforda általában maximum 2-3 munkaszakaszból tevődik össze.

6.3. A munkaszakaszok generálása

A szabályok figyelembevételével kell hogy történjen, lehetnek minimális, maximális


hosszúságra vonatkozó korlátozások. Maga a megoldási egy úgynevezett összes párra
vonatkozó legrövidebb út módszerrel történik. A lehetséges párok kialakításánál csak az
úgynevezett átszállási pontokat kell használni, ugyanis a későbbiekben itt lesz lehetséges
majd embercsere a járműveken. Az algoritmus részletesebb leírása a következő:

A generálás algoritmusa:

1. Építsük fel az idő-tér hálózatot az aktuális járathalmazzal.

2. Rendezzük az idő-tér hálózat pontjait indulási idő szerint növekvő sorrendbe.

3. Legyen i=0.

4. Vegyük a rendezés szerint az i. időpontot.

5. Ha az adott időpont nem járat indulási időpont, akkornöveljük i-t 1-gyel és lépjünk a
4. lépésre.

6. Határozzuk meg a minimális, illetve maximális munkaszakasz időtartam paraméterek


segítségével, hogy az idővonal rendezett pontjai közül mi a legkisebb, illetve
legnagyobb időértékkel rendelkező, ami lehetséges befejező pontja az i. pontból induló
munkaszakasznak.

7. A 6. lépésben kapott időpontokra generáljuk azt a részgráfját az idő-tér hálózatnak,


amely ezeket a pontokat és csak az őket összekötő éleket tartalmazza. A nem járat
típusú élek költségét növeljük meg egy paraméterben megadott értékkel, ami jóval
nagyobb, mint az éleken szereplő költségértékek.

8. Számoljuk ki Disktra algoritmusa segítségével az i. pontból a 7. lépésben kapott gráfra


az összes pontba vezető legrövidebb utat. Állítsuk elő az utakat és tároljuk őket, ezek
lesznek a munkaszakaszok.

9. Növeljük i-t 1-gyel amíg el nem jutunk az időpontok végéig és lépjünk a 4. lépésre. Ha
minden időpontot bejártunk, az algoritmus befejeződik.

69
6.4. Az emberfordák generálása

Az előzőekben kialakított munkaszakaszokból történik a generálás. A generálónak figyelembe


kell venni a szabályokat. Vannak olyan generálók, amelyek maximum 2 munkaszakaszból
álló emberfordákat generálnak, az összes lehetséges kombinációt használva, más generálók,
például idő-tér hálózatot használnak. Lényege, hogy a járatokhoz teljesen hasonló idő-tér
hálózatot lehet felépíteni, amely a járatok helyett a munkaszakaszokat tartalmazza. A
munkaszakasz generátor elkészítéséhez így nem szükséges külön modellt felépíteni, az idő-tér
modell itt is használható. Ugyanakkor az árazási probléma azt jelenti, hogy a generálóhálózat
segítségével olyan emberfordákat kell előállítani, amelyek költsége negatív, és a negatív
költségűek közül a legkisebbek. Megjegyezzük, hogy az élek költségértékei minden lépésben
a Lagrange-relaxációban leírt módon változnak. Biztosítani kell ugyanakkor, hogy a generált
emberfordák megfeleljenek a szabályoknak, amelyeket a követelmények támasztanak. Ez azt
jelenti, hogy nem elegendő olyan modellt építeni, ami alkalmas a legkisebb költségű
emberforda kiszámítására, további feltételek ellenőrzését is biztosítani kell. Ilyen feltételek
lehetnek a maximális, vagy minimális munkaidő, a maximális, minimális fordahossz,
minimális szünethossz, stb. Ezen feladat kezelése itt is erőforrás-korlátozott legrövidebb út
probléma segítségével történik. A felépített generálóhálózaton az árazási probléma megoldása
dinamikus programozási algoritmus segítségével történhet.

70
7. Irodalomjegyzék

[Aarts+1989] Aarts, E. and Korst, J., Simulated Annealing and Boltzman Machines: A
Stochastic Approach to Combinatorial Optimization and Neural Computing. Wiley,
Chichester, 1989.

[Aarts+1997] Aarts, E. and Lenstra, J., K., Local search in combinatorial optimization, John
Wiley and Sons, 1997.

[Ahuja+1989] Ahuja, R.K., Magnanti, T.L., and Orlin, J.B., Network Flows, Nemhauser,
Rinnooy Kan, and Todd, IV, 211–369, 1989.

[Árgilán+2012] Árgilán, V., Balogh, J., Békési, J., Galambos, G., Krész, M., and Tóth, A., An
Assignment Model for Real-World Vehicle Scheduling Problem with Refueling,
közlésre benyújtva, 2012.

[Aszalós] Aszalós László, Herendi Tamás: Algoritmusok, Digitális Tankönyvtár

[Balas+1996] Balas, E., Ceria, S., Cornuejols, G., and Natraj, N.R., Gomory cuts revisited,
Operations Research Letters, 19, 1-10, 1996.

[Ball+1983] Ball, M., Bodin, L., and Dial, R., A matching based heuristic for scheduling mass
transit crews and vehicles. Transportation Science, 17, 4–31, 1983.

[Balogh+2009] Balogh, J., Békési, J., Galambos, G., and Krész, M., Model and Algorithm for
a Vehicle Scheduling Problem with Refueling, In: Proceedings of the 9th Workshop on
Models and Algorithms for Planning and Scheduling Problems, pp. 229−231, 2009

[Banihashemi+2000] Banihashemi, M. and Haghani, A., Optimization Model for Large-Scale


Bus Transit Scheduling Problems, Transportation Research Record: Journal of the
Transportation Research Board, 1733, 23–30, 2000.

[Barnhart+1998] Barnhart, C., Johnson, E. L., Nemhauser, G. L., Savelsbergh, M. W. P. and


Vance, P. H. “Branch-and-price: Column Generation for Solving Huge Integer
Programs, Operations Research, 46, 316–329, 1998.

[Bertossi+1987] Bertossi, A.A., Carraresi, P., and Gallo, G., On Some Matching Problems
Arising in Vehicle Scheduling Models, Networks, 17, 271–281, 1987.

[Békési+2009] Békési, J., Brodnik, A., Pash, D., and Krész, M., An integrated framework for
bus logistic management: case studies, In: Logistik Management, Physica-Verlag, pp.
389–411, 2009.

[Bodin+1983] Bodin, L., Golden, B., Assad, A., and Ball, M., Routing and Scheduling of
Vehicles and Crews: The State of the Art. Computers and Operations Research, 10, 63–
211, 1983.

71
[Borndörfer2008] Borndörfer, R., Discrete Optimization in Public Transportation, ZIB-Report
08-56, Konrad-Zuse-Zentrum für Informationstechnik Berlin, Germany, 2008.

[Borndörfer+2008b] Borndörfer, R., Löbel, A., and Weider, S., A bundle method for
integrated multi-depot vehicle and duty scheduling in public transit, In: Lecture Notes in
Economics and Mathematical Systems 600, Computer-aided Systems in Public
Transport, Hickman, M., Mirchandani, P., Voß. S. (eds.), 3–24, Springer-Verlag,
Heidelberg, 2008.

[Bunte+2009] Bunte, S. and Kliewer, N., An overview on vehicle scheduling models, Journal
of Public Transport, 1(4), 299–317, 2009.

[Carpaneto+1989] Carpaneto, G., Dell'Amico, M., Fischetti, M., Toth, P., A branch and
bound algorithm for the multiple depot vehicle sheduling problem, Networks, 19, 531–
548, 1989.

[Chvátal+1983] Chvátal, V., Linear Programming, W.H. Freeman and Company, New York,
1983.

[Dell’Amico+1993] Dell’Amico, M., Fischetti, M., and Toth, P., Heuristic algorithms for the
multiple depot vehicle scheduling problems. Management Science, 39, 115–125, 1993.

[Desaulniers+2007] Desaulniers, G. and Hickman, M.D., Public Transit, In: C. Barnhart and
G. Laporte (Eds.), Handbook in OR & MS, Vol. 14, Chapter 2, Elsevier B.V., 2007.

[Desrochers+1989] Desrochers, M. and Soumis, F., A column generation approach to the


urban transit crew scheduling problem, Transportation Science, 23(1), 1–13, 1989.

[Du+1998] Du, D-Z. and Pardalos P.M. (eds), Handbook of combinatorial optimization,
Volume 1, Kluwer Academic Publishers, 1998.

[Eberhart+1995] Eberhart, R. and Kennedy, C., A New Optimizer Using Particle Swarm Theory,
Proceedings of the Sixth International Symposium on Micromachine and Human Science,
Nagoya, Japan, 39–43, 1995.

[Fischetti+1989] Fischetti, M. and Toth, P., An additive bounding procedure for


combinatorial optimization problems, Operations Research, 37(2), 319--328, 1989.

[Fischetti+1999] Fischetti, M., Lodi, A., and Toth, P., A branch-and-cut algorithm for the
multi depot vehicle scheduling problem, Technical report, 1999.

[Freling+1995] Freling, R., Boender, G., and Paixão, J.M.P., An integrated approach to
vehicle and crew scheduling, Technical Report 9503/A, Economie Institute, Erasmus
University Rotterdam, Rotterdam, 1995.

[Freling1997] Freling, R., Models and Techniques for Integrating Vehicle and Crew
Scheduling, PhD thesis, Tinbergen Institute, Erasmus University Rotterdam, 1–151,
1997.

72
[Freling+1999] Freling, R., Wagelmans, A.P.M., and Paixão, J.M.P., An overview of models
and techniques for integrating vehicle and crew scheduling. In: Lecture Notes in
Economics and Mathematical Systems, 471, Computer-Aided Transit Scheduling,
Wilson, N.H.M. (ed.), 441–460, Springer, Berlin, 1999.

[Freling+2003] Freling, R., Huisman, D., and Wagelmans, A.P.M. (2003). Models and
algorithms for integration of vehicle and crew scheduling. Journal of Scheduling, 6, 63–
85, 2003.

[Friedrich+2004] Friedrich, M. and Nökel, K., Extending transportation planning models:


From strategic modelling to operational transit planning, In: Proceedings of the 9th
International Conference on Computer-Aided Scheduling of Public Transport (CASPT),
San Diego, California, 2004.

[Gaffi+1999] Gaffi, A. and Nonato, M., An integrated approach to the extra-urban crew and
vehicle scheduling problem. In: Lecture Notes in Economics and Mathematical
Systems, 471, Computer-Aided Transit Scheduling, Wilson, N.H.M. (ed.), 103–128.
Springer, Berlin, 1999.

[Gajowniczek+1994] Gajowniczek, P. and Pioro, M., Simulated allocation: a suboptimal


solution to the multicommodityflow problem. 11th UK Teletraffic Symposium, 1994.

[Garey+1979] Garey, M.R. and Johnson, D.S., Computers and Interactability: A Guide to the
Theory of NP-Completness, Freeman, San Fransisco, 1979.

[Geoffrion1974] Geoffrion, A.M., Lagrangean Relaxation for Integer Programming,


Mathematical Programming Study, 2, 82-114, 1974.

[Gintner+2006] Gintner, V., Steinzen, I., and Suhl, L., A time-space network based approach
for integrated vehicle and crew scheduling in public transport, In: Binetti, M., Civitelle,
F., De Liddo, E., Dell’Orco, M., Ottomanlli, M. (eds.), Proc. EWGT2006 Joint Conf.,
Bari, Irtaly, 371-377.

[Gintner+2008] Gintner, V., Kliewer, N., and Suhl, L., A Crew Scheduling Approach for
Public Transit Enhanced with Aspects from Vehicle Scheduling, In: Lecture Notes in
Economics and Mathematical Systems 600, Computer-aided Systems in Public
Transport, Hickman, M., Mirchandani, P., Voß, S. (eds.), 25-42, Springer-Verlag,
Heidelberg, 2008.

[Goemans+1998] Goemans, M.X., Dinitz, Y., and Garg, N., On the singlesource unsplittable
flow problem, In: Proceedings of the 39th Annual IEEE Symposium on Foundations of
Computer Science, pp. 290–299, 1998.

[Gomory+1958] Gomory, R., E., Outline of an algorithm for integer solutions to linear
programs, Bulletin of the American Mathematical Society. 64, 275–278, 1958.

[Haase+1999] Haase, K. and Friberg, C., An exact branch and cut algorithm for the vehicle
and crew scheduling problem, In: Lecture Notes in Economics and Mathematical
Systems, 471, Computer-Aided Transit Scheduling, Wilson, N.H.M. (ed.), 63-80,
Springer, Berlin, 1999.

73
[Haase+2001] Haase, K., Desaulniers, G., and Desrosiers, J., Simultaneous vehicle and crew
scheduling in urban mass transit systems, Transportation Science, 35(3), 286–303,
2001.

[Hadjar+2001] Hadjar, A., Marcotte, O., and Soumis, F., A Branch-and-Cut Algorithm for the
Multiple Depot Vehicle Scheduling Problem, Tech. rept. G-2001-25. Les Cahiers du
Gerad, Montreal, 2001.

[Held+1970] Held, M. and Karp, R.M., The travelling salesman problem and minimum
spanning trees,' Operations Research, 18, 1138–1162, 1970.

[Held+1974] Held, M., Wolfe, P. and Crowder, H., (1974), Validation of Subgradient
Optimization, Mathematical Programming, 6, 62–88, 1974.

[Huisman+2004] Huisman, D., Integrated and Dynamic Vehicle and Crew Scheduling, PhD
thesis, Erasmus University of Rotterdam, 2004.

[Huisman+2005] Huisman, D., Freling, R., and Wagelmans, A.P.M., Multiple-depot


integrated vehicle and crew scheduling, Transportation Science, 39, 491–502, 2005.

[Karmarkar1984] Karmarkar, N., A New Polynomial Time Algorithm for Linear


Programming, Combinatorica, 4(4), 373–395, 1984.

[Karp1972] Karp, R. M., Reducibility among combinatorial problems, In Miller, Raymond E.,
Thatcher, James W, Complexity of Computer Computations, Plenum. pp. 85-103, 1972.

[Kleinberg1996] Kleinberg, J.M., Single-source unsplittable flow, Proceedings of the 41th


Annual IEEE Symposium on Foundations of Computer Science, 45, 68–77, 1996.

[Kliewer+2005] Kliewer, N., Mellouli, T., and Suhl, L.: Solving large multiple-depot
multiple-vehicle-type bus scheduling problems in practice. OR Spectrum, 27(4), 507-
523, 2005.

[Kliewer+2006] Kliewer N., Mellouli, T., and Suhl, L., A time-space network based exact
optimization model for multi-depot bus scheduling, European Journal of Operational
Research, 175, 1616-1627, 2006.

[Kokott+1996] Kokott, A. and Löbel, A., Lagrangean Relaxations and Subgradient Methods
for Multiplie-Depot Vehicle Scheduling Problems, ZIB-Report 96-22, Konrad-Zuse-
Zentrum für Informationstechnik, Berlin, Germany, 1996.

[Kodialam+2000] Kodialam, M.S. and Lakshman, T.V., Minimum interference routing with
applications to MPLS traffic engineering, INFOCOM 2000, Nineteenth Annual Joint
Conference of the IEEE Computer and Communications Societies. Proceedings. IEEE,
2, 884–893, 2000.

[Land+1960] Land, A.H. and Doig, A.,G., An automatic method for solving discrete
programming problems, Econometrica, 28, 493–520. 1960.

74
[Laurent+2008] Laurent, B. and Hao J-K., Simultaneous Vehicle and Crew Scheduling for
Extra Urban Transports In: N.T. Nguyen et al. (Eds.): IEA/AIE 2008, LNAI 5027, pp.
466–475, 2008.

[Li+2009] Li, J-Q. and Head K.L., Sustainability provisions in the bus-scheduling problem;
Transportation Research Part D 14, 50-60, 2009.0

[Löbel1997] Löbel, A., Optimal Vehicle Scheduling in Public Transit, Ph.D. thesis,
Technische Universitaet at Berlin., 1997.

[Löbel1998] Löbel, A., Vehicle Scheduling in Public Transit and Lagrangian Pricing.
Management Science 44, 1637–1649, 1998.

[Lübbecke+2005] Lübbecke, M.E. and Desrosiers J., Selected topics in column generation.
Operations Research 53(6), 1007-1023, 2005.

[Meilton2001] Meilton, M., Selecting and implementing a computer aided scheduling system
for a large bus company, In: Voss, S., and Daduna, J. R., (eds.), Computer-Aided
Scheduling of Public Transport, Springer-Verlag, Berlin, 2001.

[Mesquita+1992] Mesquita, M. and Paixao, J., Multiple Depot Vehicle Scheduling Problem:
A New Heuristic Based on Quasi-Assignment Algorithms, In: M. Desrochers and J.-M.
Rousseau (eds.), Computer-Aided Transit Scheduling, In: Lecture Notes in Economics
and Mathematical Systems 386, Springer-Verlag, Berlin, 167–180, 1992.

[Mesquita+2008] Mesquita, M. and Paias, A., Set partitioning/covering-based approaches for


the integrated vehicle and crew scheduling problem, Computers and Operations
Research, 35(5), 1562-1575, 2008.

[Naumann+2011] Naumann, M., Suhl, L., Kramkowski, S., A stochastic programming


approach for robust vehicle scheduling in public bus transport. Procedia Social and
Behavioral Sciences 20, 826–835., 2011

[Pepin+2009] Pepin, A.-S., Desaulniers, G., Hertz A., and Huisman, D., Comparison of
Heuristic Approaches for the Multiple Depot Vehicle Scheduling Problem, Journal of
Scheduling, 12(1), 17-30, 2009.

[Plotkin1995] S. Plotkin. Competitive routing of virtual circuits in atm networks. IEEE


Journal on Selected Areas in Communications, 13, 1128–1136, 1995.

[Rabl2002] Rabl, A., Environmental benefits of natural gas for buses. Transportation
Research, D 7, 391-405. 2002.

[SYMPHONY] Ralphs, T.K. and Güzelsoy, M., SYMPHONY 5.2.3 User's Manual, online
elérhető: http://www.coin-or.org/SYMPHONY/man-5.2/

[Ribeiro+1994] Ribeiro, C.C. and Soumis, F., A Column Generation Approach to the
Multiple-Depot Vehicle Scheduling Problem. Operations Research, 42(1), 41–52, 1994.

75
[Saha1972] Saha, J. L., An algorithm for bus scheduling problems. Operational Research
Quarterly, 21(4), 463-474, 1972.

[Skutella2000] Skutella, M., Approximating the singlesource unsplittable mincost flow


problem, In: Proceedings of the 41th Annual IEEE Symposium on Foundations of
Computer Science, pp. 136–145, 2000.

[Segal1974] Segal, M., The operator-scheduling problem: A network-flow approach,


Operations Research, 24, 808–823, 1974.

[Steinzen2007] Steinzen, I., Instances for integrated vehicle and crew scheduling problems
with multople depots, online elérhető:
http://dsor.uni-paderborn.de/index.php?id=bustestset&L=0.

[Steinzen+2010] Steinzen, I., Gintner, V., Suhl, L., and Kliewer, N., A Time-Space Network
Approach for the Integrated Vehicle- and Crew-Scheduling Problem with Multiple
Depots, Transportation Science, 44(3), 367-382, 2010.

[Suhl+2007] Suhl, U. H., Friedrich, S., and Waue, W., Progress in solving large scale multi-
depot multi-vehicle-type bus scheduling problems with integer programming.
Wirtschaftinformatik Proceedings, Paper 81, 2007

[Wang+2007] Wang, H. and Shen, J., Heuristic approaches for solving transit vehicle
scheduling problem with route and fueling time constraints, Applied Mathematics and
Computation, 190, 1237–1249, 2007.

[Wei+2012] Wei, M., Sun, B., Jin, W.,. Model and algorithm of regional bus scheduling with
grey travel time. Journal of Transportation Systems Engineering and
Information Technology 12, 106–112., 2013

[Wren+2003] Wren, A., Fores, S., Kwan, A.S.K., Kwan, R.S.K., Parker, M.E., and Proll, L.,
A flexible system for scheduling drivers, Journal of Scheduling, 6(5), 437-455, 2003.

[Yan+2012] Yan, Y., Meng, Q., Wang, S., Guo, X., Robust optimization model of schedule
design for a fixed bus route. Transportation Research Part C 25, 113–121., 2012

76

You might also like