Tartalomjegyzék I. DISZKRÉT OPTIMALIZÁCIÓBevezetés1. Ütemezéselmélet (Vizvári Béla)1.1. Formális rendszer ütemezési feladatok osztályozására1.1.1. Az alfa mező1.1.2. A béta mező1.1.3. A gamma mező1.2. A Gantt-diagramok1.3. Ütemezési problémák egyetlen gépen1.4. Ütemezési problémák párhuzamos berendezéseken1.5. Az egyutas ütemezési probléma1.6. A többutas ütemezési probléma1.6.1. A kritikus út módszere1.6.2. A diszjunktív gráf modell1.6.3. Egészértékű programozási modellek1.6.4. Heurisztikus módszerekIrodalomjegyzékTárgymutatóNévmutató I. DISZKRÉT OPTIMALIZÁCIÓ Előszó Ez a rész a diszkrét optimalizációval foglalkozó fejezeteket tartalmazza. Az első kötetben jelenik meg az Ütemezéselmélet című fejezet, amelynek fő témái: egy formális rendszer ütemezési feladatok osztályozására, az ütemezések szemléltetésére szolgáló Gantt-diagramok, egygépes feladatok, párhuzamos berendezésekkel kapcsolatos feladatok, végül az egyés többutas ütemezési feladat. Ebben a fejezetben végig feltesszük, hogy az ütemezés megkezdésekor minden adat ismert. A második kötet része lesz az Versenyképességi elemzés című fejezet, amelyben az ütemező algoritmus folyamatosan kapja az adatokat, és a kapott adatokat – a később beérkező adatok ismerete nélkül – fel kell dolgozni. 1. Ütemezéselmélet (Vizvári Béla) Egy ütemezési feladat megoldása egy üzem, üzemrész, műhely vagy berendezés tevékenységének meghatározását jelenti rögzített időszakon belül. Ez két dolgot takar: egyrészt egy termelési feladat kiválasztását, másrészt a kiválasztott feladat megoldásának időbeli megtervezését. Ehhez számba kell venni az üzemben ható összes tényezőt, és ezeknek megfelelően kialakítani egy modellt, majd azt minden konkrét esetben megoldani. Ebben a fejezetben feltesszük, hogy az üzem működése pontosan jelezhető előre, ezért csak determinisztikus modellekkel foglalkozunk. A termelést fel kell osztani kisebb részekre. Nem mindegy, hogy a dolog melyik oldalát ragadjuk meg. Ha a termelésnek a tevékenység jellege a fontos, akkor feladatokról vagy tevékenységekről beszélünk, ha azonban a termelés anyagi oldalát kívánjuk hangsúlyozni, akkor a munkadarab vagy a sorozat fogalmát használjuk. (Az utóbbin egyforma munkadarabokat kell érteni, amelyek együtt haladnak át a termelés minden fázisán.) A munkadarabok és a sorozatok sok tekintetben hasonlók, eltérő tulajdonságaikra külön felhívjuk a figyelmet. Ha a munkadarab vagy a sorozat fogalmával dolgozunk, akkor azt gondoljuk, hogy az adott üzem termékei fizikailag elkülöníthető darabokból állnak, a termelés pedig úgy folyik, hogy a majdani termék valamely kiinduló állapotban bekerül az üzembe, és bár változik az egyes fázisokon, lényegében mégis ugyanaz marad, azaz nem épül össze más termékekkel, illetve nem válik több részre. Ebben az esetben a munka tárgyát tekintjük alapvetőnek, de ekkor is szükség van arra, hogy a munkát, mint tevékenységet felosszuk részekre. Ebből a célból bevezetjük a művelet fogalmát. Egy művelet az az átalakítás, amit egy gép egyszerre elvégez a munkadarabon. Ha tehát egy munkadarab többször kerül ugyanarra a gépre, akkor több műveletről van szó. A rendszer harmadik fontos elemét a technológiai körülmények alkotják, melyeken mind az általános, mind a vizsgált időszakra vonatkozó egyedi feltételeket, ezen belül a gépek kapacitását és a termelés során rendelkezésre álló és igényelt erőforrásokat, a raktározási és szállítási feltételeket értjük. Modellezési szempontból ide soroljuk a munkaerőt is. A különböző gépek általában különböző technológiai feladatokat látnak el, de előfordulhat, hogy egyes gépek helyettesíthetik egymást. A gépekkel kapcsolatos legfontosabb kérdések a következők: 1. miben mérjük a kapacitásukat;2. mi a gépeknek a technológiai folyamatban betöltött helye;3. mi a gépek és a megmunkálások viszonya.Ezek a kérdések természetesen nem függetlenek egymástól. Mivel egy vállalatnál a termelés célja nyereség elérése, ezért a modellben tekintettel kell lenni a költségekre, a termékek eladási árára és a terméken keletkező nyereségre. Mindaz, amit eddig felsoroltunk, még csak egy elvi üzem kereteit szabja meg. Attól válik működő üzemmé, hogy egy több-kevesebb pontossággal meghatározott termelési feladatot kell elvégeznie, aminek a megszervezése a feladat, ami igen erős megszorítást jelent a lehetőségeknek a technológiai feltételek által megengedett végtelen gazdag tárházával szemben A továbbiakban egyes esetekben nem kell megkülönböztetni a tevékenységeket, a munkadarabokat és a sorozatokat. Ilyenkor összefoglaló néven munkafeladatról fogunk beszélni. 1.1. Formális rendszer ütemezési feladatok osztályozására Ismert egy formális rendszer, amellyel az ütemezési feladatokat nagyon tömören le lehet írni. Ez a formális rendszer nem öleli föl az összes lehetőséget, ezért a következő feltételezések állandóan érvényben vannak:1. minden gép a teljes vizsgált időszakban rendelkezésre áll;2. minden munkafeladat elvégzésére egyetlen technológiát határoztunk meg;3. minden gép egyszerre csak egy munkadarabon dolgozhat;4. minden gép, az esetlegesen szükséges átszerszámozástól eltekintve, azonnal megkezdheti a következő megmunkálást, mihelyst az előzőt befejezte;5. a gyártásközi raktár(ak) kapacitása végtelen;6. az előzés megengedett;7. a soron következő munkadarab azonnal megmunkálható, mihelyst a gép szabaddá vált, feltéve, hogy a munkadarab előző megmunkálása már befejeződött.A feladatok leírása három mezőből áll, melyeket így szokás jelölni: α|β|γ,(1.1) ahol α a gépekre és a legfontosabb technológiai adottságokra, β a munkafeladatokra, illetve ezeknek a gépekhez és egyéb körülményekhez való kapcsolatára vonatkozó feltételeket tartalmazza, végül γ a matematikai feladat célfüggvényét írja le. Az egyes mezők több tényezőre vonatkozó információt is tartalmazhatnak. A j -edik munkafeladat befejezési időpontja Cj, határideje dj, Ezen munkafeladat műveleteinek száma mj, és az i -edik gépen való megmunkálásának ideje pij. 1.1.1. Az alfa mező Itt kell megadni a gépek számát és a technológiai útvonal típusát. A technológiai útvonal azt határozza meg, hogy a munkadarab milyen sorrendben keresi fel a gépeket. 1,2, ... : A gépek száma 1 (vagy 2 stb.), a megadott számtól függően. P: Azonos párhuzamos gépek vannak, azaz egyetlen homogén gépcsoportról van szó, ahol bármely művelet bármely gépen elvégezhető, és minden művelet bármelyik gépen ugyanannyi ideig tart. Q: Hasonló párhuzamos gépek – csak a gépek sebességében van különbség, azaz a j -edik műveletnek az i -edik gépen való elvégzése pj/si ideig tart, ahol pj csak a művelettől, si csak a géptől függő állandó. R: Általános párhuzamos gépek, ahol az egyes műveletek ideje tetszőleges lehet a különböző gépeken. O: A technológiai útvonal kötetlen. F: Egyutas ütemezési probléma, azaz minden munkadarab azonos sorrendben keresi fel a gépeket. J: Többutas ütemezési probléma, azaz a munkadarabok technológiai útvonala eltérő. Például a J3 többutas ütemezési problémában a gépek száma 3. Minden munkadarab technológiai útvonalának leírását külön meg kell adni. 1.1.2. A béta mező Ez a mező tartalmazza az egyéb technológiai feltételeket. pij=1,pij{1,2} stb.: A megmunkálási idők speciálisak, például mindegyik 1 (azonos hosszú), illetve mindegyik 1 vagy 2. idle: Olyan ütemezés is lehetséges, ahol betervezett állásidők vannak, azaz egy berendezés annak ellenére sem dolgozik, hogy van olyan munkadarab, amelyik megmunkálásra vár. pmtn: A műveletek megszakítása megengedett. Ilyenkor a megszakítás nem okoz veszteséget sem időben, sem költségben. prec, tree: A munkafeladatok között megelőzési reláció áll fenn, melyet valamely G irányított gráf ír le. Ha a mezőben tree szerepel, akkor G fa. rj: Az egyes munkafeladatoknak különböző lehet a rendelkezésre állási ideje, illetve, ha itt még további feltétel szerepel, akkor a rendelkezésre állási idők ennek eleget tesznek. dj: Az egyes munkafeladatoknak különböző lehet a határideje, illetve, ha itt még további feltétel szerepel, akkor a határidők ennek eleget tesznek. A határidőket puha, azaz megsérthető feltételeknek tekintjük. Ha a határidők tényleges feltételeket jelentenek, akkor egy szokásos jelölés d¯j. ) no-wait: A munkadarabok nem várhatnak a gépek előtt. res, res1: Az erőforrások csak korlátozottan állnak rendelkezésre. Ha a mezőben res1 áll, akkor egyetlen erőforrásról van szó. mjm^: Az egyes munkadarabokhoz legfeljebb m^ művelet tartozik. overlap: átlapolás korlátlanul megengedett, azaz egy újabb gép már dolgozhat a munkadarabon, miközben az előző még nem fejezte be a műveletet. (Ez a sorozatok jellegzetes tulajdonsága.) A konvenció szerint, ha egy elem nem szerepel, akkor a megfelelő megszorítás nem érvényes. Például, ha nincs a mezőben pmtn, akkor ez azt jelenti, hogy a megmunkálások megszakítása nem lehetséges. 1.1.3. A gamma mező A formális rendszer csak kompromisszumos, azaz a késéseket nem kizáró célfüggvényeket enged meg. Ennek oka az, hogy minden más esetben nehezen kezelhető a feladat, és csak lineáris és egészértékű programozási feladatokkal modellezhető a probléma. Az egyes munkafeladatokhoz a következő értékeket értelmezzük: Cj: a befejezési időpont, Lj=Cjdj: a késés, Tj=max{0,Lj}: a tényleges késés, Uj= sgn (Tj): egységnyi büntetés. Mindegyikből többféleképpen lehet célfüggvényt formálni, például minimalizálhatjuk a megfelelő értékek maximumát, összegét, súlyozott összegét. Ennek megfelelően tizenkét lehetséges célfüggvény a következő ahol a súlyok nemnegatívak. Ha a munkafeladatok száma adott, akkor az összeg minimalizálása ekvivalens a megfelelő mennyiség átlagának a minimalizálásával, hiszen a két érték csak egy konstans szorzóban tér el egymástól. Azt az esetet, amikor a munkafeladatok folyamatosan érkeznek be, és a helyzet állandóan változik, on-line problémának nevezik. Ekkor csak a várható értéket lehet optimalizálni. Vagyis az összeg célfüggvény az on-line eset modellezését is szolgálja. Látható, hogy a lényegesen különböző célfüggvények száma kevesebb. Ugyanis wjCj és wjLj csak a konstans wjdj tagban különböznek egymástól. Továbbá Lmax minimalizálása egyben minimalizálja a Tmax és Umax célfüggvényeket is. Az utóbbi kettő közül az első minimalizálja a másodikat, hiszen Umax=0 akkor és csak akkor, ha egyetlen munkadarab sem késik, azaz Tmax=0. Az Umax célfüggvény szerepe csak annyi, hogy olyan ütemezést keresünk, amely egyetlen határidőt sem sért meg. A (9.2)-ben megadott függvények a reguláris célfüggvények közé tartoznak, melyek értéke a befejezési időpontokban monoton növekedő. Irregulárisnak nevezünk egy célfüggvényt, ha nem rendelkezik ezzel a tulajdonsággal. Ilyen az ú.n. sietés és a súlyozott pontosság minimalizálása, ahol Ej=max{djCj,0}: a sietés; (vjEj+wjTj): a súlyozott pontosság. Ezen célfüggvényeknek akkor van létjogosultsága, ha pontos előrejelzéssel rendelkezünk az eladások várható időpontjáról. Ekkor előre gyártani azért haszontalan, mert raktározási költséggel jár. Némely esetben nem konkrét célfüggvényről lesz szó, hanem valamely tulajdonságokat kielégítő valamennyi célfüggvényről. Ilyen esetben a γ mezőbe f kerül. 1.1. példa. Az 1||Cj feladat az az egygépes ütemezési feladat, ahol a termékek ütemezésére a vizsgált időszakon belül nincs megszorítás, azaz nincsenek határidők, rendelkezésre állási idők, megelőzési relációk stb. A befejezési idők összegét kívánjuk minimalizálni. Könnyen látható, hogy a feladat optimális megoldásában a munkadarabokat a megmunkálási idők növekvő sorrendjébe rakjuk. Ezt a gyakran előforduló sorrendet az angol irodalomban SPT ütemezésnek nevezik. 1.2. példa. A klasszikus egyutas ütemezési probléma háromgépes speciális esete F3||C max . Gyakorlatok 1.1–1. Írjuk le a formális nyelven azt a feladatot, amelyben a munkák azonos sorrendben keresik fel a gépeket, és nem várhatnak a munkák a gépek előtt. 1.1–2. Van-e az 1|rj|Cmax feladatban olyan munka, ami t=0 -ban nem végezhető? 1.2. A Gantt-diagramok Az ütemezések szemléltetésének fontos eszköze az ú.n. Gantt-diagram. Ebben minden gépet egy-egy időtengellyel szemléltetnek. Az időtengelyeken feltüntetik, hogy az egyes munkadarabok mikor kerülnek megmunkálásra az adott gépen, illetve a gépnek mikor van állásideje. 1.3. példa. Tekintsük azt az F2||Cmax feladatot, ahol n=2, és a megmunkálási időket az alábbi táblázat foglalja össze. munkadarab1. gép2. gép1. 3 12. 2 2 Ha mindkét gépen az (1,2) sorrendet alkalmazzuk, akkor a 1.1. ábrához jutunk. 1.1. ábra. A Gantt-diagram az (1,2) ütemezés esetén. Ha pedig a fordított sorrend szerinti ütemezést tekintjük, akkor a 1.2. ábrán látható Gantt-diagramot kapjuk. 1.2. ábra. A Gantt-diagram a (2,1) ütemezés esetén. A Gantt-diagramok fontos eszközei a matematikai bizonyítások szemléltetésének. Segítségükkel könnyen beláthatók az alábbi állítások. Itt végig feltesszük, hogy az egyes gépeken csak a megmunkálások sorrendjét kell megadni, ugyanis nincs értelme az ütemezés szerint soron következő megmunkálással várni. Ez még nem zárja ki a betervezett állásidők lehetőségét, hiszen itt még lehetséges, hogy egy gép előtt egy munkadarab bevár egy másik munkadarabot azért, hogy az megelőzze. Tekintsünk egy tetszőleges ütemezést és egy rögzített i gépet. A gép működését a Gantt-diagram egybefüggő működő és álló szakaszokra osztja fel, hiszen mihelyst lekerül egy munkadarab a gépről, azonnal rákerül a másik, azaz úgy tekintjük, hogy a gép folyamatosan dolgozik, feltéve persze, hogy van egyáltalán az adott pillanatban végezhető munkája. Tekintsünk egy ilyen összefüggő szakaszt. Jelölje J az ehhez a szakaszhoz tartozó munkadarabok halmazát, t a szakasz kezdetének időpontját, rij(jJ) a j -edik munkadarab megérkezésének időpontját az i-edik gépre adott ütemezés szerint ( rij tulajdonképpen a j-edik munkadarab rendelkezésre állási ideje az i -edik gépen) uij(jJ) a j -edik munkadarab ütemezését, vagyis a j -edik munkadarab megmunkálásának megkezdését, az i -edik gépen. Ekkor nyilvánvaló, hogy minden jJ esetén trij.(1.3) Különben ugyanis közvetlenül a t időpont előtt a gép állna, miközben egy munkadarab várna a megmunkálásra. Hasonlóképpen teljesülnie kell, hogy minden i és minden jJ esetén rijuij.(1.4) Az összefüggő szakaszon belül átrendezhetjük a megmunkálások sorrendjét, de természetesen az így adódó új ütemezésnek is ki kell elégítenie a (1.4) egyenlőtlenségeket. Továbbá, ha a működő szakasz összefüggő marad, akkor teljesülnie kell a t+l=1kpiπ(l)riπ(k+1),k=0,...,|J|1,(1.5) egyenlőtlenségeknek, ahol π a J-beli munkadarabok új sorrendjét jelöli. Végül tegyük fel, hogy az i -edik gép minden technológiai útvonalon az utolsó, azaz itt befejeződik a termelés. Legyen továbbá a vizsgált működő időszak az utolsó. Ekkor bármilyen átrendezés ezen a szakaszon, ami megőrzi a szakasz összefüggését, nem változtatja meg az utolsónak befejeződő munkadarab befejezési időpontját, ami t+jJpij,(1.6) azaz nem változtatja meg a Cmax értéket (lásd a 1.3. ábrát). 1.3. ábra. A (1.5) feltételt kielégítő cserének nincs hatása a Cmax értékre. Gyakorlatok 1.2–1. Ábrázoljuk az alábbi egyutas ütemezési feladat (3,2,1) sorrendű ütemezését Gantt-diagramon. munka 1. gép 2. gép 3. gép1. 3 22 22. 22 20 203. 20 1418 1.2–2. Hogyan változik a célfüggvény értéke az F2||Cmax feladatban, ha úgy rendezzük át a munkákat a második gép utolsó összefüggő szakaszán, hogy az egynél több szakaszra bomlik? 1.3. Ütemezési problémák egyetlen gépen A legegyszerűbb ütemezési feladatokban csak egyetlen gép van. A valóság általában bonyolultabb. De ez az eset részfeladatként felmerül a bonyolultabb helyzetekben. Továbbá jól alkalmazható, ha valamelyik berendezés szűk keresztmetszetet jelent. Az alábbi három tétel azt mondja ki, hogy számos esetben nem érdemes megszakítást és betervezett állásidőt tartalmazó ütemezéssel foglalkozni. 1.1. tétel. Ha f reguláris célfüggvény, akkor az 1|dj, prec,idle,pmtn |f és az 1|dj, prec,idle |f feladatoknak van közös optimális megoldása. Megjegyzés. Mivel a feladatok leírásában a rendelkezésre állási idők nem szerepelnek, ezért a konvenció szerint minden j esetén rj=0. Bizonyítás. Bármely pillanatban minden – még be nem fejeződött – munkadarab megmunkálható, feltéve természetesen, hogy előzményei elkészültek már. Ezt a feltételt azonban minden megengedett ütemezésnek teljesítenie kell. Tegyük fel, hogy valamely megengedett ütemezésben a j1 munkadarab megmunkálását a j2 munkadarab kedvéért megszakítottuk. Innen következik, hogy j1 nem előzménye j2 -nek, és j2 minden előzménye befejeződött j1 megmunkálásának ezen, megszakított szakasza előtt. Tekintsük most már azt az ütemezést, amit úgy nyerünk, hogy j1 megmunkálásának ezen megszakított szakaszát csatoljuk a folytatásához, közvetlenül az elé, és a j1 ezen két megmunkálása közé eső megmunkálásokat előbbre hozzuk. Ez megtehető, hiszen j1 ezen megmunkálások után fog befejeződni, így j1 nem előzménye egyetlen, ebbe a szakaszban befejeződő munkadarabnak sem. Ezen átrendezés mellett egyetlen munkadarab esetén sem növeltük a Cj értéket, így a célfüggvény regularitásából adódik, hogy a célfüggvény értéke nem növekedett. 1.2. tétel. Ha f reguláris célfüggvény, akkor az 1|dj, prec,idle,pmtn |f és az 1|dj, prec,pmtn |f, illetve az 1|dj, prec,idle |f és az 1|dj, prec |f feladatoknak van közös optimális megoldása. Bizonyítás. Tegyük fel, hogy a [t1,t2] időintervallumban betervezett állásidő van. Ekkor a megmunkálások sorrendjét nem változtatva meg, a t2 időpontban kezdődő szakaszt előrehozhatjuk t2t1>0 idővel. Ezáltal nem zavarjuk meg a kötelező megelőzések betartását, míg a Cj értékek nem nőnek, tehát a célfüggvény regularitásából következik ismét, hogy értéke nem nőtt. Ebből a két tételből adódik egy újabb állítás. 1.3. tétel. Ha f reguláris célfüggvény, akkor az 1|dj,prec,idle,pmtn|f és az 1|dj,prec|f feladatoknak van közös optimális megoldása. Bizonyítás. Az 1|dj,prec,idle,pmtn|f és az 1|dj,prec,idle|f feladatnak van közös optimális megoldása a 1.1. tétel szerint, az 1|dj,prec,idle|f és az 1|dj,prec|f feladatnak pedig a 1.2. tétel szerint. Ez a közös megoldás kielégíti az 1|dj,prec,idle,pmtn|f feladat feltételeit is, mert csak annyi történt, hogy nem használtuk ki a megszakítás és az ütemezett állásidő lehetőségét. 1.4. példa. Fontos rámutatni arra, hogy mennyire lényeges volt minden j esetén az rj=0 feltétel. Tekintsük azt a feladatot, amelyben csak két munkadarab van a következő adatokkal. munkadarabpjrjdj1. 2 0 42. 2 1 2 Észrevehető, hogy a 2. munkadarabot semmiképp sem lehet határidőre befejezni, tehát a maximális késés, azaz Tmax1 . Tmax reguláris célfüggvény. Az 1|dj, prec,idle,pmtn |Tmax, az 1|dj, prec,idle |Tmax, az 1|dj, prec,pmtn |Tmax és az 1|dj, prec |Tmax feladatok optimumát rendre a 1.4. ábrán látható ütemezések adják. 1.4. ábra. Eltérések az optimális megoldásban, ha a rendelkezésre állási idők különbözők. Az utolsó esetben csak egyetlen sorrend lehetséges, ami persze így optimális is. Ez az egyetlen olyan megoldás, ahol Tmax=2, minden más esetben Tmax=1. A fenti megoldások közül az első és a harmadik azonos, és a második is optimális megoldása az első feladatnak, azonban ennél mindkét munkadarab késik, míg az első megoldás esetében csak a 2. munkadarab. Az alábbiakban néhány könnyebb feladat optimális megoldását adjuk meg. Az optimális megoldást minden esetben valamely általánosan használható, egyszerű heurisztikus szabály szolgáltatja, így a szükséges számítások mennyisége kicsi. Számos más feladat azonban ú.n. NP-teljes probléma, azaz jelenlegi tudásunk mellett csak leszámlálási módszerekkel oldható meg. Egy optimalizálási feladat megoldó eljárását akkor nevezzük leszámlálási módszernek, ha valamennyi szóba jöhető megoldást explicit módon kipróbál vagy implicit módon kizár azok közül, akik optimálisak lehetnek. Azonban az ismertetendő heurisztikus módszerek ezekben az esetekben is képesek jó megengedett megoldások előállítására, a célfüggvény optimális értékének becslésére. Az említett heurisztikus módszerek mindig valamilyen egyértelmű sorrendet jelentenek. Ennek a sorrendnek a jelölése: [1],[2],...,[n], ahol [1] a sorrend első elemét, [2] a sorrend második elemét jelenti stb. Ha egy bizonyításban több sorrendet vizsgálunk, akkor ezeket különböző zárójelekkel jelöljük. 1.4. tétel. Az 1|dj|Lmax feladat egy optimális megoldását a d[1]d[2]d[n](1.7) sorrend adja meg. Megjegyzés. Az állításban szereplő sorrend neve a legkorábbi határidők sorrendje (EDD). Bizonyítás. Jelöljön <1>,<2>,...,<n> egy tetszőleges sorrendet. Ha ez nem EDD sorrend, akkor van egy olyan l index, hogy d<l>>d<l+1> Tegyük fel, hogy <l> megmunkálása a T időpontban kezdődik. A két munkadarab késése ekkor L<l>=C<l>d<l>=T+p<l>d<l>,L<l+1>=C<l+1>d<l+1>=T+p<l>+p<l+1>d<l+1>. Tekintsük azt az (1),(2),...,(n) sorrendet, amely csak annyiban különbözik ettől, hogy az említett két munkadarabot felcseréljük. Így a többi munkadarab késése nem változik, míg a két felcserélt munkadarab új késése L(l)=C(l)d(l)=C(l)d<l+1>=T+p<l+1>d<l+1>,L(l+1)=C(l+1)d(l+1)=C(l+1)d<l>=T+p<l>+p<l+1>d<l>. Könnyen látható, hogy L<l+1>L(l),L(l+1), vagyis a célfüggvény értéke nem nőtt. Ezt a gondolatmenetet mindaddig megismételhetjük, amíg a cserékkel egy EDD sorrendet nem kapunk. Az 1|rj,dj|Lmax feladat esetében már nem ilyen egyszerű a helyzet, mert a probléma teljes általánosságában NP-teljes. Az előbbi heurisztikus módszer következő változata speciális esetekben megoldja a feladatot. 1.5. tétel. Ha egy, az 1|rj,dj|Lmax feladatosztályhoz tartozó feladat esetében teljesül, hogy nem létezik olyan j és l, melyekre rj<rl és dl<dj,(1.8) akkor az alábbi rekurzív módszer a feladat egy optimális megoldását adja. Tegyük fel, hogy a keresett sorrend első j1 tagját már meghatároztuk. Legyen N={1,...,n}\{[1],...,[j1]}, továbbá α=max{C[j1],min{rl:lN}} és S={lN:rlα}. Legyen [j]N egy olyan munkadarab, amelyre d[j]=min{dl:lS}.(1.9) Megjegyzés. A kiválasztás logikája tehát az, hogy [j] a még nem ütemezett munkadarabok közül egyike azoknak, amelyek megmunkálása a legkorábban megkezdődhet és ezek közül a legkorábbi határidővel rendelkezik. Bizonyítás. Legyen <1>,<2>,...,<n> egy tetszőleges sorrend. Erre vonatkozóan legyen Nj={1,...,n}\{<1>,...,<j1>},αj=max{C<j1>,min{rl:lNj}} és Sj={lNj:rlαj}. Nyilvánvaló, hogy az αj értékek monoton növő sorozatot alkotnak. Ezért, ha lSj teljesül, akkor lSj+1,Sj+2 , ... mindaddig, amíg az l munkadarab ütemezésre nem kerül. Ha az <1>,<2>,...,<n> sorrend nem elégíti ki a rekurzív szabályokat, akkor két eset lehetséges, nevezetesen valamely j indexre (i) [j] megmunkálása nem a legkorábban megkezdhetők közé tartozik, azaz r[j]>αj, vagy (ii) van olyan lSj , hogy dl<d[j],rlαj.(1.10) Tekintsük először az (i) esetet. Vegyük észre, hogy αj definíciójából következik, hogy mindig van olyan lNj munkadarab, amelyre αjrl teljesül. Tegyük fel, hogy a vizsgált sorrendben [k] az első ilyen [j] után, azaz r[j],r[j+1],...,r[k1]>αj,r[k]αj. Ekkor (1.8)-ból következik, hogy d[j],d[j+1],...,d[k1]d[k]. Tudjuk, hogy L[k]=C[k1]+p[k]d[k]. Innen L[k]L[l]=C[k1]+p[k]d[k]C[l1]p[l]+d[l](1.11)p[k]d[k]+d[l]p[k],l=j,...,k1. Vagyis [k] késése legalább p[k] -val nagyobb, mint a [j],...,[k1] munkadarabok késése. Tekintsük most azt az (1),(2),...,(n) sorrendet, amelyet a egyenlőség definiál. Ebben a sorrendben Cl értéke l=1,...,j1 esetén változatlan, j=k+1,...,n esetén nem nőtt, legfeljebb csökkent, mert elmarad az r[j]αj állásidő, továbbá (l)=[l1]l=j+1,...,k esetén pedig legfeljebb p(j)=p[k] értékkel nőtt. Végül L(j)=αj+p(j)d(j), azaz L(j)L[k]=αjC[k1]<0, tehát ebben az esetben a késés csökkent. Innen (1.11) alapján adódik, hogy a maximális késés nem nőtt. Tekintsük most a (ii) esetet. Ekkor válasszuk meg a k indexet úgy, hogy [k] legyen a sorrendben az első, amely (1.9)-et kielégíti. Ezután az előző esetben alkalmazott gondolatmenet megismételhető. 1.6. tétel. A p[1]w[1]p[2]w[2]p[n]w[n](1.12) sorrend az 1||wjCj feladat egy optimális megoldását adja. Megjegyzés. Ennek neve súlyozott legrövidebb megmunkálási idők sorrendje (SWPT). Bizonyítás. Jelöljön <1>,<2>,...,<n> egy tetszőleges sorrendet. Ha ez nem SWPT sorrend, akkor van egy olyan l index, hogy p<l>w<l>>p<l+1>w<l+1>.(1.13) Ha felcseréljük ezt a két munkadarabot, akkor a többi munkadarab befejezési ideje nem változik, vagyis a célfüggvény értékében bekövetkezett változás pusztán ettől a két munkadarabtól származik. A felcserélés előtt a (C<l1>+p<l>)w<l>+(C<l1>+p<l>+p<l+1>)w<l+1> taggal járultak hozzá a célfüggvény értékéhez, míg utána a (C<l1>+p<l+1>)w<l+1>+(C<l1>+p<l+1>+p<l>)w<l> mennyiséggel. A kettő különbsége p<l>w<l+1>p<l+1>w<l>, ami pozitív, mint az azonnal látható (1.13) alapján. Ha valamennyi súly 1, vagyis pusztán az összeget minimalizáljuk, akkor (1.12) az SPT sorrendet adja. Amikor a tétel állításában a feladatot leírtuk, akkor a rendelkezésre állási idők azért nem szerepeltek, mert mindegyik 0 volt, amit fel is használtunk akkor, amikor egy tetszőleges sorrendben két tetszőleges, egymást követő munkadarabot felcserélhetőnek vettünk. A határidők viszont azért nem szerepeltek, mert létük nem befolyásolja a feladatot, hiszen megsérthetők, így csak a célfüggvényre lehetnek hatással. A következő tétel elég általános módszert ad arra az esetre, amikor a sorrendet megelőzési relációk korlátozzák. 1.7. tétel. Minden j(j=1,...,n) esetén legyen fj monoton növő függvény; legyen továbbá fmax(C1,...,Cn)=max{fj(Cj):j=1,...,n}. Jelölje N a munkadarabok halmazát, és egy tetszőleges SN esetén legyen p(S)=jSpj és fmax*(S) azon feladatnak optimális megoldásának értékét, amelyben csak az S -beli munkadarabok szerepelnek. Végül legyen V azon munkadarabok halmaza, amelyeknek nincs rákövetkezője. Ekkor fmax*(N)=min{max{fj(p(N)),fmax*(N\{j})}:jV}.(1.14) Megjegyzés. A tétel feltételeiből következik, hogy a célfüggvény reguláris. Bizonyítás. Nyilvánvaló, hogy bármely megengedett sorrendben a legutolsó munkadarab csak olyan lehet, amelynek nincs rákövetkezője. Tegyük fel, hogy az optimális sorrendben a j munkadarab az utolsó. Ekkor fmax*(N) értékét vagy j adja, és az ekkor fj(p(N)) , vagy egy másik munkadarab, és az ekkor fmax*(N\{j}). A (1.14) képlet segítségével megadható egy O(n2) futási idejű algoritmus a feladat megoldására. Mint említettük, a megszakítás lehetőségének akkor láthatjuk előnyét, amikor a rendelkezésre állási idők különbözők. Erre ad egy példát az alábbi tétel az SPT sorrend egy megfelelő általánosításával. Tekintsük az 1|rj,pmtn|Cj feladatot. Legyen T={r1,...,rn}. Tegyük fel, hogy a t időpontig bezárólag elkészült már az ütemezés, amikor a jt munkadarab mellett döntöttünk. Jelölje a munkadarabok mindenkori még megmaradt megmunkálási időit p1,...,pn. A t időpont után a következő időpont, amikor dönteni kell, u=min{t+pjt,min{sT:s>t}}. Azt kell tehát eldönteni, hogy az u időpontban melyik ju munkadarab kerüljön megmunkálásra. Erre a következő kiválasztási szabályt alkalmazzuk: pju=min{pj:pj>0;rju}.(1.15) A sorrend neve: legrövidebb megmaradt megmunkálási idők sorrendje ( S hortest R emaining P rocessing T ime, SRPT). 1.8. tétel. Az 1|rj,pmtn|Cj feladatnak egy optimális megoldását az SRPT ütemezés adja meg. Bizonyítás. A bizonyítás hasonló a 1.6. tételéhez, ezért azt az Olvasóra bízzuk. A feladat súlyozott változata, azaz 1|rj,pmtn|wjCj, azonban NP-teljes. Végül egy olyan feladatot mutatunk be, ahol a célfüggvény nem reguláris: a késések és sietések összegét minimalizáljuk, feltéve, hogy a munkadarabok határideje azonos. Formális jelöléssel az 1|idle,dj=dj=1npj|(Ej+Tj) feladatot tárgyaljuk. Itt tehát arról van szó, hogyan lehet a közös határidő körül szétosztani a munkákat úgy, hogy azok a lehető legközelebb legyenek a határidőhöz. Akkor merülhet fel ilyen vagy hasonló feladat, ha az igény erős szezonális hatást mutat, azaz a szállításoknak rövid időn belül kell megtörténniük. Minden ütemezést egy kezdeti és egy befejező szakaszra bontunk fel. A kezdeti szakaszhoz tartoznak mindazok a munkadarabok, amelyek megmunkálása befejeződött a közös d határidőig bezárólag, a befejező szakaszhoz tartozik az összes többi munkadarab. A kezdeti szakasz, mint időintervallum, tart a szakaszhoz tartozó első munkadarab megmunkálásának kezdetétől, a szakaszhoz tartozó utolsó munkadarab megmunkálásának befejezéséig, a befejező szakasz pedig a kezdeti szakasz végétől az utolsó munkadarab megmunkálásának befejezéséig. Most néhány lemmában leírjuk az optimális megoldások legfontosabb tulajdonságait, melyek segítségével aztán egy egyszerű algoritmus adódik azok előállítására. 1.9. lemma. Az optimális megoldásokban az első és az utolsó megmunkálás között nincs állásidő. Bizonyítás. Ha van állásidő, akkor a kezdeti szakasz esetén az állásidő előtti, a befejező szakasz esetén az állásidő utáni megmunkálásokat a határidő felé tolhatjuk el úgy, hogy a sorrend változatlan marad. Ezzel a célfüggvény értéke csökken. 1.10. lemma. Van olyan optimális ütemezés, amelyben egy megmunkálás pontosan a határidőkor fejeződik be. Bizonyítás. Tekintsünk egy olyan ütemezést, amelyben az első és az utolsó megmunkálás között nincs állásidő, és amelyre az állítás nem igaz. Ekkor a befejező szakasz első munkadarabjának, jb -nek, a megmunkálási időintervalluma a belsejében tartalmazza a határidőt. Toljuk el időben az egész ütemezést a következő módon: i ha a kezdeti szakasz tartalmaz kevesebb megmunkálást, akkor jb megmunkálásának végpontja essen egybe d -vel, ii ha a befejező szakasz tartalmaz kevesebb megmunkálást, akkor jb megmunkálásának kezdete essen egybe d -vel, iii különben (i) és (ii) valamelyikét alkalmazzuk. Az (i) és (ii) esetben csökkent a célfüggvény értéke, a (iii) esetben nem változott. Az SPT sorrend fordítottjának neve LPT sorrend, azaz leghosszabb megmunkálási idő. 1.11. lemma. Bármely optimális megoldásban a megmunkálások a kezdeti szakaszban LPT, a befejező szakaszban SPT sorrendben vannak. Bizonyítás. Ha két szomszédos munkadarab ütemezése fordított, akkor ezeket felcserélve a célfüggvény értéke csökken. 1.12. lemma. Legyen (1),(2),...,(n) egy olyan ütemezés, amelyben az első és az utolsó megmunkálás között nincs állásidő és amelyben egy megmunkálás pontosan a határidőkor fejeződik be. Ha a kezdeti szakaszban α , a befejező szakaszban β megmunkálás van (α+β=n) , akkor a célfüggvény értéke j=1α(j1)p(j)+j=1β(βj+1)p(α+j).(1.16) Bizonyítás. A kezdeti szakaszban (α) sietése 0, (α1) sietése p(α),(α2) sietése p(α1)+p(α) stb. Tehát p(α) pontosan α1 munkadarab sietésében szerepel, p(α1)α2 munkadarabéban stb. Innen kapjuk az első összeget. Hasonlóan járhatunk el a befejező szakasz esetén. (α+1) késése p(α+1),(α+2) késése p(α+1)+p(α+2) stb. Tehát p(α+1) összesen β munkadarab késésében szerepel, p(α+2)β1 munkadarabéban stb. Ez adja a második összeget. (1.16)-ból még kiolvasható a következő állítás. 1.13. lemma. Az előző lemma jelöléseit használva van olyan optimális megoldás, amelyben |αβ|1. Bizonyítás. Legyen (1),(2),...,(n) egy olyan ütemezés, amelyre a lemma állítása nem igaz. Ha αβ+2 , akkor toljuk el az ütemezést úgy, hogy (α) legyen a befejező szakasz első munkadarabja. Ekkor (1.16) első összege (α1)p(α) -val csökkent, a második összege (β+1)p(α) -val nőtt, vagyis a teljes változás (β+2α)p(α)0. Innen a következő megoldási módszer adódik. Tegyük fel, hogy az indexek szerinti sorrend egyben az LPT sorrend is. Ekkor az utolsó lemma feltételeinek eleget tevő optimális megoldás esetén (1.16)-ban p1 szorzója 0, p2 és p3 szorzója 1, általában p2l és p2l+1 szorzója l . Vagyis szabadon dönthetünk afelől, hogy a 2l és a 2l+1 munkadarab közül melyik legyen elölről az (l+1) -edik, illetve hátulról az l -edik. Gyakorlatok 1.3–1. Konkrét példa megadásával bizonyítsuk be, hogy a 1.4. tételben szereplő feltétel nem szükséges, azaz a határidők szerinti növekvő rendezés nem szükséges feltétele az Lmax optimalizálásának. 1.3–2. Mutassuk meg, hogy a 1.6. tételben szereplő súlyozott legrövidebb megmunkálási idők sorrendje az adott esetben nem csak elégséges, hanem szükséges feltétel is. 1.4. Ütemezési problémák párhuzamos berendezéseken Az ide tartozó legegyszerűbb feladatok esetében egy m gépből álló homogén gépcsoportról van szó, azaz minden gép egyforma. Így egy munkadarab megmunkálási ideje minden gépen azonos. A feladatok még ebben az esetben is – kevés kivételtől eltekintve – NP-teljesek, ezért nagy jelentősége van a heurisztikus eljárásoknak. Először a polinomiális eredményeket ismertetjük, és utána tárgyaljuk a heurisztikus módszereket. 1.14. tétel. A következő ütemezés a P|overlap|Cj feladat egy optimális megoldását adja. Legyen [1],[2],...,[n] egy SPT sorrend. Ekkor minden gépen pontosan egyforma az ütemezés, és minden gépen a j -ediknek ütemezett megmunkálás a [j] megmunkálás (1/m) -ed része. Bizonyítás. Tekintsünk egy tetszőleges ütemezést és legyen (1),(2),...,(n) a megmunkálások befejezési sorrendje. Legyen 1j1<j2n. Tegyük fel, hogy (j1) egy h1 hosszú megmunkálása az m1 gépen később kezdődik a t1 időpontban, mint a (j2) egy h2 hosszú megmunkálása az m2 gépen a t2 időpontban, azaz t1>t2. Az m1 és m2 gép nem feltétlenül különböző. Ekkor a két megmunkálás egy min{h1,h2} szakasza felcserélhető, és így az összes többi, valamint a (j2) megmunkálás befejezése nem változik, (j1) befejezése pedig vagy változatlan, vagy előbbre kerül. A következő két tétel a témakör egyik legkorábbi dolgozatából származik. 1.15. tétel. A P|pmtn|f feladatban az átfutási idő legalább C*=max{1mj=1npj,max{pj:j=1,...,n}}.(1.17) Bizonyítás. Mivel az átlapolás nem megengedett, ezért egy megmunkálás akárhány részre is legyen felosztva, ezek a részek nem fedhetik át egymást, azaz minden j esetén pjCj . Másfelől a teljes átfutási idő nem lehet rövidebb annál, mint amit úgy kapunk, hogy a megmunkálásokat egyenletesen osztjuk szét a gépek között. 1.16. tétel. A P|pmtn|Cmax feladat optimális célfüggvényértéke a (1.17) képletben adott mennyiség. Bizonyítás. Egyenként készítünk ütemezést a gépekre. Minden gépet a C* időpontig terhelünk le munkával, hacsak el nem fogytak a megmunkálások. A megmunkálásokat tetszőleges sorrendben vesszük. Ha a soron következő megmunkálás még befér az éppen ütemezendő gép C* időkorlátjába, akkor egyetlen egységben ezen a gépen végezzük el a megmunkálást az erre a gépre már ütemezett megmunkálások után közvetlenül. Ha a teljes megmunkálás nem fér be az időkorlátba, akkor a megmunkálás akkora részét ütemezzük erre a gépre, hogy ezzel az időkorlátot elérjük, a maradék rész pedig a következő gép első megmunkálása. Az időkorlát megválasztása miatt ez a két rész nem nyúlhat egymásba. Vegyük észre, hogy az így készített ütemezésben a megszakítások száma legfeljebb m1, és minden megmunkálást legfeljebb egyszer szakítunk meg. A minimálisan szükséges megszakítások számának meghatározása már NP-teljes probléma. Ha egy megmunkálást megszakítottunk, és egy része a következő gépre került, akkor a tényleges termelés során a megmunkálás ezzel az átvitt résszel kezdődik. A problémák úgy is felfoghatók ebben a körben, mint két részfeladat együttese, először meg kell találni a megmunkálások gépek közötti optimális felosztását, majd az egyes gépeken a legjobb sorrendet. Innen az egy gép esetére mondottak alapján azonnal adódik az alábbi tétel. 1.17. tétel. Az R||Cj , illetve az R||wjCj feladat optimális megoldásában a megmunkálások minden gépen SPT , illetve SWPT sorrendben vannak. A következő tétel bizonyításában O(n3) művelet segítségével vezetjük vissza az ütemezési feladatot a polinomiális hozzárendelési feladatra. 1.18. tétel. Az R||Cj feladat polinomiális idő alatt megoldható. Bizonyítás. Tekintsünk egyetlen ml gépet. Tegyük fel, hogy ezen nl(nln) megmunkálást akarunk végezni, az (1),(2),...,(nl) sorrendben. Ekkor a célfüggvény értéke ezen a gépen j=1nl(nlj+1)pl(j),(1.18) ahogy ezt például a 1.12. lemmában is láttuk. Vezessük be a következő bináris változókat: x(ik)j={1, ha a j-edik megmunkálást az i-edik gépen végezzük, sorrendben hátulról a k-adiknak ,0 különben .(1.19) Itt k értéke 1 és n közötti egész. Két további feltételcsoport adódik még: (i) minden megmunkálást el kell végezni, (ii) minden gép egyszerre csak egy megmunkálással foglalkozhat. Az elsőt az alábbi egyenletekkel, a másodikat pedig az azokat követő egyenlőtlenségekkel írhatjuk elő: i=1mk=1nx(ik)j=1,j=1,...,n,(1.20)j=1nx(ik)j1,i=1,...,m,k=1,...,n.(1.21) Ha x(ik)j=1 , akkor a j megmunkálás költsége a célfüggvényben kpij, ezért a teljes költség i=1mk=1nj=1nkpijx(ik)j,(1.22) amit minimalizálni kell. Az így kapott (1.19)–(1.22) feladat egy hozzárendelési probléma, ami polinomiális idő alatt megoldható. Érdemes szemügyre venni a bizonyításban szereplő transzformáció,,költségeit”. Az eredeti feladat mérete m×n volt. A jelenlegié pedig (mn)×n (az átfogalmazott feladatban az i,k indexpár egyetlen index szerepét játssza). A hozzárendelési feladat megoldásához szükséges műveletek száma O(n3) marad. Reguláris célfüggvények mellett bizonyos esetekben a dinamikus programozás természetes módon adódik, mint egy pontos megoldási módszer. A 1.17. tétel azt mondja, hogy az R||Cj és a R||wjCj feladatok esetében, ha megtörtént a megmunkálások felosztása az egyes gépek között, akkor az egyes gépeken a sorrend kötött. Hasonló eredmény a következő. 1.19. tétel. Az R||Tj feladatnak van olyan optimális megoldása, amelyben a megmunkálások minden gépen a határidők szerinti növekvő sorrendben vannak. Bizonyítás. Ha a feltétel nem teljesül, akkor van legalább egy gép, amelyen az ütemezés szerint egy későbbi határidejű megmunkálás közvetlenül megelőz egy korábbi határidejű megmunkálást. E két megmunkálást felcserélve a célfüggvény értéke nem növekszik. Hasonló állítás mondható az Umax célfüggvényről, azaz a megengedett ütemezés kereséséről (lásd a 1.4. tételt). Fontos megjegyezni, hogy ebben lényeges szerepet játszik, hogy minden rendelkezésre állási idő azonos. A Cmax célfüggvény esetén nemcsak egy, hanem bármely sorrend rendelkezik a tételbeli tulajdonsággal, mert a megmunkálásoknak gépekre való felosztása már egyértelműen meghatározza a teljes átfutási időt. Dinamikus programozással olyan feladatokat lehet viszonylag könnyen megoldani, amelyekre a következő feltétel teljesül: A megmunkálások indexsorrendje olyan sorrend, hogy van olyan optimális megoldás, hogy minden gépen a megmunkálások ebben a sorrendben vannak.Erre a feltételre a továbbiakbasn (S) feltéteéként hivatkozunk. Nem jelenti az általánosság megszorítását, hogy az indexsorrendről feltételeztük, hogy a kívánt tulajdonságú. Vizsgálni fogjuk mind az fmax, mind a fj típusú célfüggvényt. A tárgyalás nagyon hasonló, ezért az alábbi közös jelölést használjuk: Fj(t1,...,tm) az optimális célfüggvényérték, ha csak az indexsorrendben első j megmunkálást ütemezzük, és a gépek állásidő nélkül dolgozva munkájukat a t1,...,tm időpontokban fejezik be. 1.20. tétel. Ha az (S) feltétel teljesül, akkor az R||fj feladat esetén Fj(t1,...,tm)=min{fj(ti)+Fj1(t1,...,tipij,...,tm):i=1,...,m}.(1.23) Bizonyítás. Most utoljára a j megmunkálást ütemezzük, és ez az (S) feltétel miatt valamelyik gépen utolsónak fejeződik be az eddig ütemezettek közül. Ha ez történetesen az i gép, akkor ott a j -t közvetlenül megelőző megmunkálás a tipij időpontban fejeződik be. Így felmerül az előző j1 megmunkáláson Fj1(t1,...,tipij,...,tm) költség, továbbá fj(ti) költség a j megmunkáláson. 1.21. tétel. Ha az (S) feltétel teljesül, akkor az R||fmax feladat esetén Fj(t1,...,tm)=min{max{fj(ti),Fj1(t1,...,tipij,...,tm)}:i=1,...,m}.(1.24) Bizonyítás. A bizonyítás hasonló az előző tételéhez. A számítási idő Θ(mnCm), ahol C a teljes átfutási idő felső korlátja. Jobban korlátozza a módszer alkalmazását, hogy a szükséges tárolási kapacitás Θ(mCm). Amennyiben az F függvényt tartalmazó kitöltendő táblákat explicit módon tároljuk, akkor sem a számítás mennyisége, sem a szükséges memória nagyságrendje nem csökkenthető. A heurisztikus módszerekkel legtöbbet a P||Cmax feladatot vizsgálták, mert ütemezési szempontból egyszerű, de NP-teljes. Listás ütemezésnek nevezik azt a heurisztikus eljárást, amely a következő két lépésből áll: 1. Meghatározzuk a megmunkálások valamely sorrendjét (lista). 2. Az adott sorrendben véve a megmunkálásokat, az éppen soron következőt az elsőnek megüresedő gépre rakjuk. Ha L jelöli az adott listát, akkor C(L) a heurisztikus megoldás célfüggvényértéke, míg az optimális megoldásé C*, és a C(L)/C* hányadost vizsgáljuk. 1.22. tétel. Tetszőleges L lista esetén C(L)C*21m.(1.25) Bizonyítás. Ha sikerül teljesen egyenletesen szétosztani a gépek között a megmunkálásokat, akkor az átfutási időre 1mj=1npj adódik. Másfelől legalább egy gépen legalább annyi időt fel kell használnunk, mint a leghosszabb megmunkálási idő, hiszen az átlapolás nem megengedett, azaz max{pj:j=1,...,n} egy másik alsó korlát C* -ra. Legyen k az utolsónak befejeződő megmunkálás. Ez a t=C(L)pk időpontban kezdődött el. Mivel az ütemezésben nincsenek felesleges állásidők, így a t időpontig valamennyi gép folyamatosan dolgozott. Ezért t1mjkpj. Végül a C(L)=t+pk1mjkpj+pk=1mj=1npj+m1mpk(21m)C*(1.26) egyenlőtlenséget kapjuk. A korlát éles. Erre vonatkozóan lásd a 1-5. feladatot. Számos heurisztikus eljárás pontosságára ismert a fentinél jobb felső korlát. 1.23. tétel. C ( L P T ) C * 4 3 1 3 m . (1.27) Bizonyítás. Indirekt módon feltesszük, hogy a tétel állítása nem igaz. Feltehető, hogy m2. Az első részállítás, amit bebizonyítunk, hogy feltehető az is, hogy az LPT sorrend szerinti ütemezésben utolsónak az utolsó, azaz a legrövidebb megmunkálási idejű megmunkálás fejeződik be. Tekintsünk valamely rögzített m mellett egy olyan F ütemezési feladatot, amelyre (1.27) nem igaz, és n értéke minimális. Ha az ütemezés szerint egy p<n indexű megmunkálás fejeződik be utolsónak, akkor tekintsük azt az F ütemezési feladatot, amelyet F-ből úgy kapunk, hogy az LPT sorrendből csak az első p megmunkálást tartalmazza. Itt az LPT sorrend szerinti átfutási idő nem változott, míg az optimális átfutási idő nem nőtt. Ezért a tétel állítása erre az F feladatra sem lehet igaz, ami ellentmond n minimalitásának. Innen (1.26) alapján kapjuk, hogy erre a feladatra 4313m<C(LPT)C*1mC*j=1npj+(m1)pnmC*1+(m1)pnmC*, ahonnan adódik, hogy pn>C*3. Ez természetesen az LPT sorrend miatt valamennyi megmunkálási időre vonatkozik, azaz az optimális megoldásban legfeljebb két megmunkálás lehet egy gépen. Tekintsünk egy tetszőleges olyan U ütemezést, ahol minden gépen legfeljebb két megmunkálás van. Megadunk néhány olyan átrendezést, amely nem növeli meg az átfutási időt. Legyen két – az i gépre ütemezett – megmunkálás ideje ti1 és ti2, míg egy másik j gép esetén tj1 és tj2, illetve ha ezen csak egy megmunkálás van, akkor tj. (i) Ha ti1>tj1 és ti2>tj2, akkor i1 és j1 felcserélésével a két gépen az átfutási idő csökken, hiszen max{ti1+tj2,tj1+ti2}<ti1+ti2. (ii) Ha ti1>tj , akkor az i2 munkát átrakva a j gépre a két gépen szintén csökken az átfutási idő. (iii) Az i1 és i2 munkák sorrendjének felcserélése nem változtatja meg az i gépen az átfutási időt. Bármely lehetséges U ütemezésből kiindulva és elvégezve az összes lehetséges fenti átalakítást, egy olyan V ütemezést nyerünk, amelyben az átfutási idő nem hosszabb, mint U -ban, és rendelkezik a következő tulajdonságokkal: (a) ha bármely i,j gép esetén mindkét gépen két megmunkálás van, akkor (i) alapján ti1>tj1 esetén ti2tj2, (b) minden i,j gép esetén, ha az i gépen két megmunkálás van, a j gépen egy, akkor (ii) alapján tjti1,ti2, (c) minden i gép esetén, ha az i gépen két megmunkálás van, akkor (iii) alapján ti1ti2, (d) mivel a gépek sorrendje nem befolyásolja az átfutási időt, ezért feltehető, hogy a gépek indexsorrendje szerint csökken az első megmunkálási idő, (e) az egy megmunkálást végző gépek indexei (b) és (d) alapján kisebbek a két megmunkálást végzőkénél, (f ) a két megmunkálást végző gépek indexsorrendje szerint nő a második – azaz a nem nagyobb – megmunkálási idő. Tehát van olyan optimális megoldás, ami az (a)–(f ) tulajdonságokkal rendelkezik, ezek a tulajdonságok azonban egyértelműen meghatározzák az ütemezést, ami nem más, mint az LPT lista szerinti ütemezés. Ez pedig ellentmond a C(LPT)C*>4313m1. egyenlőtlenségnek. A P||Cmax problémához nagyon hasonló, mintegy annak duálja a ládapakolási probléma. Egyforma kapacitású ládákba kívánunk belerakni tárgyakat, ahol a tárgyak méretét egyetlen számmal lehet jellemezni. Az egy ládába rakott tárgyak összmérete a méretek összege. Meghatározandó a minimálisan szükséges ládák száma. Visszatérve a párhuzamos berendezésekhez, tegyük fel, hogy a munkákat egy meghatározott idő, például egy műszak alatt akarjuk elvégezni. Ekkor úgy merül fel a kérdés, hogy hány gépre van szükség. A ládapakolási feladat megoldására egy mohó heurisztikus eljárás a FF. Legyen K a ládák kapacitása. Feltesszük, hogy nincs olyan tárgy, aminek mérete nagyobb lenne, mint K, hiszen ekkor nincs megengedett megoldás. Ha ez a feltétel teljesül, és a tárgyak száma n, akkor legfeljebb n ládát kell használnunk. A FF algoritmus sorra veszi a tárgyakat, és mindegyiket az első (azaz a legkisebb indexű) olyan ládába rakja, ahova belefér. A következő pszeudokódban a bemenő adat a tárgyak n száma, a tárgyak méretét tartalmazó p vektor, valamint a ládák K kapacitása, kimenő adat a felhasznált ládák m száma. A kódban zi az i -edik láda még fel nem használt kapacitása. A FF és más ládapakolási algoritmusok elemzése megtalálható a 11.4. alfejezetben. A FF algoritmust akkor tudjuk felhasználni, ha tudunk felső korlátot adni a maximálisan szükséges kapacitásra, azaz az átfutási időre. 1.24. tétel. Bármely P||Cmax feladat esetén az optimális C* átfutási időre teljesül, hogy C*max{2mj=1npj,max{pj:j=1,...,n}}.(1.28) Bizonyítás. Legyen C a (1.28) egyenlőtlenség jobboldalán szereplő mennyiség. Indirekt módon tegyük fel, hogy a tétel állítása nem igaz. Alkalmazzuk a FF algoritmust úgy, hogy a ládák kapacitása C és a megmunkálások a megmunkálási idők szerinti, azaz a ládapakolási feladat nyelvén a tárgyak mérete szerinti csökkenő sorrendben vannak. Ha a tétel állítása hamis, akkor az algoritmus kénytelen valamely k tárgyat az (m+1) -edik ládába rakni. Nyilvánvalóan km+1. Mivel pkpk1p1, ezért minden láda legalább pk -ig fel van töltve. Mivel azonban pk nem fér az első m ládába, ezért ezeket már jobban feltöltöttük, mint C/2. Innen adódik, hogy j=1npj>mC2j=1npj, ami ellentmondás. A bizonyításból érezni lehet, hogy a FF algoritmust úgy lesz célszerű alkalmazni, ha előtte a megmunkálási időket csökkenő sorrendbe rakjuk, azaz az LPT sorrendet használjuk. Tegyük fel, hogy megbecsüljük a szükséges átfutási időt, és erre alkalmazzuk a FF algoritmust. Természetesen egy jó megengedett megoldáshoz jutunk, ha az eljárás talál ilyet, azaz nem használ több ládát (gépet), mint amennyit felhasználhat. De ha nem talál megengedett megoldást, akkor lényegében nincs semmi a kezünkben, csak az a durva közelítő megoldás, ami az előző tétel bizonyításából származik. Viszont a 1.15. tételből ismerünk egy alsó korlátot az átfutási időre. Az alsó és felső korlátból kiindulva, logaritmikus kereséssel egy pontosabb korlátot lehet kapni. Ez az FF ismételt alkalmazását jelenti, ahol csökkentjük a felső korlátot, ha találtunk megengedett megoldást, és növeljük az alsó korlátot, ha nem. Ne feledjük, hogy a 1.24. tétel bizonyítása mindenképpen ad egy megengedett megoldást, a most vázolt algoritmus ezt kívánja javítani. A fentiekben felvázolt algoritmus leírásánál az alábbi jelöléseket alkalmazzuk: Ka: az aktuális alsó korlát, Kf: az aktuális felső korlát, K: a pillanatnyi (azaz a kipróbálás alatt álló) korlát, s: a megteendő iterációs lépések száma. Továbbá részeljárásként működik némi módosítással a MOHÓ algoritmus. Mivel a párhuzamos berendezések esetén nem az a kérdés, hogy hány berendezést kell használnunk, ha K időn belül végezni akarunk, hanem az, hogy K időn belül m géppel végezni tudunk-e, ezért a FF algoritmus módosítását megvalósító MF algoritmus mind a K kapacitáskorlátot, mind a gépek m számát paraméterként kapja meg. Az algoritmus eredeti angol neve,,Multi-Fit”, amit rövidítve megtartunk (magyar jelentése: többszörös beillesztés). Annak eldöntésére, hogy az adott esetben m darab K kapacitású láda elegendő-e, a MOHÓ eljárást használjuk. Ennek eredménye az elég logikai változó, melynek értéke akkor IGAZ, ha MOHÓ talált megengedett megoldást. n tárgy méretének összehasonlításos rendezéséhez O(nlogn) lépés elegendő. Az FF algoritmus beépített változata minden tárgyra legfeljebb m lépést tesz meg, ez O(nm) számítási igény minden korlátra. Tehát az algoritmus műveleti igénye O(nlogn+nms). A számítási igény ennyi is lesz abban az esetben, ha az első m1 tárgy olyan nagy, hogy egyenként kitöltenek egyet-egyet az első m1 gép közül úgy, hogy más megmunkálás már nem fér melléjük. 1.5. példa. Tekintsük azt a feladatot, amelyben n=5,m=2 és a megmunkálási idők rendre 7, 7, 5, 5, 5. Ekkor a listás ütemezés a két leghosszabb megmunkálást külön gépre rakja, majd mindkét gépre tesz egy-egy 5 idejűt, végül az utolsó megmunkálást kénytelen az első gépre rakni. Az átfutási idő ekkor 17. Az optimális megoldás viszont az, amikor az azonos megmunkálási idejű munkák ugyanazon a gépen vannak, mert így az átfutási idő csak 15. A 1.23. tételben megadott felső korlát most 7/6. Ezzel megszorozva az optimális megoldás értékét, vagyis 15öt, 17.5 -et kapunk, vagyis az eljárás lényegében a hibahatáron dolgozik. Alkalmazzuk most ugyanerre a feladatra az MF algoritmust, m=2 mellett. A kezdeti alsó korlát 14.5, amit 15-re lehet felkerekíteni. A kezdeti felső korlát 29, innen az induló korlát 22-nek adódik. Ekkor az első gépen a megmunkálási idők rendre 7, 7, 5, míg a második gépen 5, 5. Mivel találtunk megoldást, ezért az alsó és a pillanatnyi felső korlát átlagát kell venni, ami kerekítéssel 18. Erre már az optimális megoldást kapjuk. 1.6. példa. Legyen most n=6,m=2 és a megmunkálási idők 10, 7, 7, 6, 6, 4. A listás ütemezés az első gépre a 10, 6, 4 megmunkálási idejű munkákat rakja, míg a másodikra a 7, 7, 6 idejűket. Mivel mindkét gépen 20 az átfutási idő, ezért ez az optimális megoldás. Ha az MF algoritmust futtatjuk, akkor ott a kezdeti alsó korlát éppen ez a 20 lesz. Azonban 20 vagy annál nagyobb korlát esetén az eljárás mindig összerakja a 10 megmunkálási idejű munkát legalább az egyik 7 idejűvel, így sohasem fogja megtalálni az optimális megoldást. A két kezdeti korlát 20 és 40. Ezért az eljárás a 30 korláttal indul. Ehhez van megoldás: első gép 10, 7, 7, 6, a második gép 6, 4. Így a következő korlát 25. Ekkor a 10, 7, 7, illetve 6, 6, 4 megoldást kapjuk. Innen a következő korlát 22. Az ehhez tartozó megoldás 10, 7, 4 és 7, 6, 6. Itt az átfutási idő csak 21. Ezért a megoldás nem változik a következő korlátra sem, ami éppen ennyi. Innen már a 20 korlát következik, de mint azt említettük, ehhez nincs megoldás. Ahhoz, hogy az algoritmus pontosságát elemezni tudjuk, vissza kell térni a ládapakolási feladathoz. Ha a ládák méretét minden határon túl növeljük, akkor egyre kevesebb ládára lesz szükség, egészen addig, amíg a ládák mérete el nem éri a tárgyak méreteinek összegét, mert ettől kezdve csak egy ládát kell használnunk. Az ütemezési probléma megoldása szempontjából bennünket rögzített számú láda felhasználása érdekel. Vegyük észre, hogy a 1.15. tételben megadott alsó korlát és a 1.24. tételbeli felső korlát között csak egy legfeljebb 2-es tényező van. Ez az alábbi állítást sugallja: ha megnöveljük a ládák méretét a minimálisan szükségesnek legfeljebb a kétszeresére, akkor a FF algoritmus talál megengedett megoldást, feltéve, hogy a tárgyak méret szerint csökkenően rendezettek. Az alábbiakban azt mutatjuk be, hogy ez az állítás lényegében igaz. Ezen felül az is teljesül, hogy az említett 2 korlátnál, ami rosszabb volna, mint a már elért 4/3 korlát, sokkal jobb az eljárás. Legyen p a tárgyak méreteit tartalmazó vektor, továbbá Cm*(p) a ládák azon legkisebb mérete, amely mellett még van olyan pakolás, amely legfeljebb m ládát használ fel. Ne feledjük, hogy véges sok tárgyat csak véges sok féleképpen lehet szétosztani a ládák közt, ezért Cm*(p) nem csak infimumként, hanem minimumként is létezik. Mivel itt heurisztikus eljárásról van szó, így egyáltalán nem biztos, hogy a FF algoritmus bármely p és m esetén talál m ládát használó megoldást a Cm*(p) korláthoz. Felmerül a kérdés, hogy hányszorosra kell megnövelni a ládák méretét Cm*(p) -hez képest, hogy az algoritmus már találjon ilyent. Legyen FF (n,p,K) az FF algoritmus megoldása által használt ládák száma. Jelölje r azt a tényezőt, ahányszorosára a ládák méretét növeltük. Legyen rm az a legkisebb tényező, amely bármely feladat esetén biztosítja, hogy algoritmusunk legfeljebb m ládát használ, azaz 1.25. tétel. Bármely p és rrm esetén FF (n,p,rCm*(p))m. Bizonyítás. Legyen először r=rm. Ha most a tétel állítása nem igaz, akkor van egy olyan p méretvektor, hogy FF (n,p,rmCm*(p))>m. Ha egy tárgyat nem tudunk betenni egy ládába, annak az az oka, hogy a ládába tett tárgyak összmérete ezen tárggyal együtt meghaladná az rmCm*(p) korlátot. Tekintsük ezeket, az algoritmus végrehajtása során fellépő, az adott korlátnál nagyobb mennyiségeket. Legyen ezek közül a minimális rmCm*(p)+ɛ. Mivel csak véges sok mennyiségről van szó, ezért ɛ>0. Legyen C olyan korlát, hogy rmCm*(p)<C<rmCm*(p)+ɛ. Ekkor C megválasztásából következik, hogy FF (n,p,C)>m, ami r=C/Cm*(p)>rm mellett ellentmond rm megválasztásának. Legyen most már r>rm. Tegyük fel, hogy van olyan p méretvektor, hogy FF (n,p,rCm*(p))>m. Tekintsük azt a q méretvektort, amelyben a ládák kapacitását (r/rm)Cm*(p) -ra növeltük, továbbá véges sok, a p vektor legkisebb eleménél kisebb tárgyat adunk a p tárgyaihoz úgy, hogy ezekkel a kis tárgyakkal kiegészíthető legyen p optimális megoldása úgy, hogy a megnagyobbított ládák pontosan fel legyenek töltve. Ez azt jelenti, hogy Cm*(Q)=(r/rm)Cm*(p). Ekkor azonban rmCm*(Q)=rCm*(p). Másfelől viszont feltettük, hogy FF (n,p,rCm*(p))= FF (n,p,rmCm*(Q))>m, ami ellentmond a bizonyítás első felében rm -re igazoltaknak. Ebből a tételből már azonnal következik annyi, hogy a MF algoritmus legalább a logaritmikus keresés folyamán fellépő legkisebb olyan korlátra fog megengedett megoldást találni, amely korlát nem esik rmCm*(P) alá. 1.26. tétel. Bármely p méretvektor és kZ+ egész esetén az MF algoritmus által szolgáltatott megoldás C értékére igaz CCm*(p)rm+2k.(1.29) Bizonyítás. Legyen az algoritmus kezdeti alsó és felső, valamint a befejező alsó és felső korlátja, illetve eredménye rendre A,F,BA,BF és C. Itt C a talált megengedett megoldás átfutási ideje, amire nyilvánvaló, hogy BFC. Ha az állítás nem igaz, akkor van olyan q méretvektor, ahol rosszabb, azaz nagyobb értéket kapunk a (1.29) képletben megadott korlátnál. Mivel azonban az algoritmus által adott korlát legfeljebb C, az adódik, hogy BFC>(rm+2k)Cm*(p).(1.30) A logaritmikus keresés tulajdonságai alapján ACm*(p)F2A, ezért BFBA=2k(FA)2kCm*(p). Innen (1.30) alapján adódik, hogy BA>rmCm*(P). Ezért az eljárás részeként szereplő FF algoritmust alkalmazni kellett a BA korlát mellett is, és ekkor FF az előző tétel állításával szemben több, mint m gépet használt. Bizonyítás nélkül említjük meg a következő tételt. 1.27. tétel. Minden m esetén rm1.22. Gyakorlatok 1.4–1. Bizonyítsuk be, hogy a 1.251.27. tételekben szereplő rm mennyiség minden m2 esetén nagyobb, mint 1. 1.4–2. Oldjuk meg azt a P2||Cmax feladatot, melyben a megmunkálási idők: 7, 7, 6, 6, 5, 5, 4, 4, 4. 1.5. Az egyutas ütemezési probléma Bár az egyutas ütemezési problémát nagyon sokat vizsgálták az irodalomban, a gyakorlatban viszonylag ritkán fordul elő, ezért csak a leglényegesebb eredmények ismertetésére szorítkozunk. Csak az F||Cmax feladatot tárgyaljuk. Tehát minden gépből pontosan egy darab van, a gépek nem helyettesíthetik egymást, és minden munkadarab ugyanazon sorrendben halad végig a gépeken. Az általánosság megszorítása nélkül feltesszük, hogy ez a sorrend a gépek indexsorrendje. Erőforrások és megelőzési feltételek nem korlátozzák az ütemezést. A feladatnak még így is két esete van, az előzéses és az előzés nélküli. Az utóbbi azt jelenti, hogy a munkadarabok minden gépre ugyanolyan sorrendben kerülnek fel, míg az előző esetben a munkadarabok sorrendje a gépek között változhat. Az előzés nélküli esetet fogjuk részletesen tárgyalni, de első célunk az, hogy megmutassuk, hogy 2 és 3 gép esetén a két feladat azonos. Minden további tárgyaláshoz szükségünk lesz a következő jelölésre. Legyen a egy tetszőleges munkadarab és k(1km) egy tetszőleges gép. Ekkor valamely rögzített ütemezés mellett F(a,k) az a munkadarab befejezési ideje a k gépen. 1.28. tétel. Ha m>1, akkor az előzéses F||Cmax problémának van olyan optimális megoldása, ahol az utolsó két gépen a megmunkálások sorrendje azonos. Bizonyítás. Tekintsünk egy tetszőleges optimális ütemezést, amelyben az utolsó előtti gépen (1),(2),...,(n), az utolsó gépen [1],[2],...,[n] a munkadarabok sorrendje. Először azt mutatjuk meg, hogy az átfutási idő megnövelése nélkül megváltoztatható úgy a sorrend az utolsó gépen, hogy a két gépen az utolsó munkadarab azonos legyen. Legyen L azon munkadarabok halmaza, melyek az utolsó gép utolsó összefüggő termelési szakaszában vannak, vagyis az utolsó állásidő után. Ebben a szakaszban minden kijelölt megmunkálás azonnal megkezdődik, mihelyst az előtte lévő a gépen befejeződött. [n] mindenképpen eleme L -nek. Ha L nem tartalmaz mást, akkor ez azt jelenti, hogy minden más megmunkálás az m gépen már azelőtt befejeződött, hogy az m1 gép [n] megmunkálásával végzett volna, ezért szükségképpen (n)=[n]. Vizsgáljuk azt az esetet, amikor L több elemet is tartalmaz. Legyen [n]=(k). Ha k=n, akkor készen vagyunk. Különben rendezzük át az utolsó gépen a sorrendet úgy, hogy az [n]=(k) munkadarab megmunkálását minden (l) munkadarab megmunkálása elé visszük, ahol k<ln. Mivel (l) csak az F((l),m1)>F([n],m1) időpontban vagy az után kerülhet az m gépre, ezért az [n] munkadarab legfeljebb az F([n],m1) időpontig kerül előbbre. Így azonban nem keletkezhet újabb állásidő. Ha ezen átrendezés után a két gépen nem lenne azonos az utolsó munkadarab, akkor ismételten alkalmazható egy hasonló átrendezés, mindaddig, amíg a kívánt állapotot el nem értük. Ekkor a gondolatmenet megismételhető az utolsó előtti munkadarabokra, és így tovább. Az alábbiakban a következő jelöléseket fogjuk használni, tekintettel arra, hogy először az előzéses feladatot vizsgáljuk. A j gépen a munkadarabok sorrendje [1]j,[2]j,...,[n]j. A szokásos feltételezések miatt az ütemezést egyértelműen meghatározza, ha a megmunkálások sorrendje minden gépen adott. Ezért az ütemezés azonosítható a fenti m sorrend együttesével. Továbbá ha a egy tetszőleges munkadarab, akkor j(a) az a munkadarab pozíciója a j gépen, azaz [j(a)]j=a. 1.29. tétel. Minden i,j(1in,1jm) esetén F([i]j,j)=max{F([i]j,j1),F([i1]j,j)}+p[i]jj.(1.31) Bizonyítás. Az [i]j munkadarab megmunkálása a j gépen nem kezdődhet előbb, mint ahogy az [i]j munkadarab megmunkálása a j1 gépen befejeződik, és mint ahogy az előző megmunkálás, azaz [i1]j-é, a j gépen befejeződik. Ekkor azonban azonnal meg is kezdődik és p[i]jj ideig tart. 1.30. tétel. F ( [ n ] m , m ) = (1.32) = max { j = 1 m α = j ( [ i j 1 ] j 1 ) i j p [ α ] j j : minden j esetén j ( [ i j 1 ] j 1 ) i j ; 1 = 1 ( [ i 0 ] ) ; i m = n } . Bizonyítás. A 1.29. tételből következik, hogy az F([n]m,m) teljes átfutási idő vagy F([n]m,m1)+p[n]mm vagy F([n1]m,m)+p[n]mm. Tehát az első esetben egy géppel, a második esetben egy munkadarabbal lépünk hátulról visszafelé. Akármelyik kifejezés legyen is a teljes átfutási idő, arra mindaddig alkalmazható a (1.31) rekurzív képlet, míg egy olyan összeget nem kapunk, ami a (1.32) képletben is szerepel. Tekintsünk most egy tetszőleges j=1mα=j([ij1]j1)ijp[α]jj(1.33) alakú összeget, ahol az indexhatárokra a megfelelő feltételek teljesülnek. Vegyük észre, hogy ebben egyetlen megmunkálás sem kezdődhet előbb, mint az összegzési sorrendben közvetlen előtte lévő. Ugyanis ha j([ij1])<αij , akkor az [α]j munkadarabnak a j gépen való megmunkálásáról van szó, amit [α1]j ugyanezen a gépen való megmunkálásának meg kell előznie. Ha α=j([ij1]), akkor [α]j=[ij1]j1, és [α]j -nek a j -edik gépen való megmunkálását meg kell előznie a (j1) -edik gépen való megmunkálásnak. Tehát a (1.33) alakú összegek alsó korlátok a teljes átfutási időre. Mivel egy közülük éppen egyenlő vele, ezért a tétel állítása igaz. 1.31. definíció. Egy feladat duáljának nevezzük azt a feladatot, ahol az i munkadarab pijd megmunkálási idejét a j gépen a pijd=pi,m+1j képlet adja meg. 1.32. tétel. Egy F||Cmax feladatnak és duáljának optimális célfüggvényértéke megegyezik. Bizonyítás. Tekintsük a feladat egy ütemezését. Vizsgáljuk a duál feladat azon ütemezését, ahol az (mj) -edik gépen a megmunkálások sorrendjét a primál feladat adott ütemezéséből úgy kapjuk, hogy a j -edik gépen való sorrendet megfordítjuk, azaz a duál feladatban a sorrend az mj gépen [n]j,[n1]j,...,[1]j. Ekkor azonban mind a primál, mind a duál feladat esetén ugyanazok az összegek szerepelnek a (1.32) képletben, csak az összeadandók sorrendje fordított. Így a két átfutási idő azonos, következésképp az optimális átfutási idők is azonosak. 1.33. tétel. Az F||Cmax előzéses feladatnál m3 esetén van olyan optimális megoldás, hogy valamennyi gépen ugyanaz a megmunkálások sorrendje. Bizonyítás. m=1 esetén nincs előzés. Az állítás m=2 esetén a 1.28. tételből adódik. Ezen utóbbi tételből és az előzőből pedig következik, hogy a feladatnak van olyan optimális megoldása, ahol az első két gépen azonos a sorrend. Viszont m=3 esetén mind az első két, mind az utolsó két gép egyike a második gép, így van olyan optimális megoldás, ahol mindhárom gépen azonos a sorrend. 1.7. példa. Az előzés gyengíti a feltételeket, azaz több megoldást enged meg. Ezért az előzéses feladat optimum értéke nem nagyobb, mint az előzés nélkülié. Az olyan feladatnak, ahol az előzéses megoldás határozottan jobb, legalább négy gépet és két munkadarabot kell tartalmaznia. Ilyen minimális méretű ellenpélda létezik, és a megmunkálási időket az alábbi táblázat tartalmazza. Az előzés nélküli esetben az (1,2) sorrend esetén 11 az átfutási idő (lásd a 1.5ábrát). 1.5. ábra. Az átfutási idő az (1,2) ütemezés esetén. A (2,1) sorrend esetén is 11 az átfutási idő (lásd a 1.6ábrát). 1.6. ábra. Az átfutási idő a (2,1) ütemezés esetén. Ha viszont az első két gépen (2,1), a második két gépen (1,2) a sorrend, akkor az átfutási idő csak 10 (lásd a 1.7ábrát). 1.7. ábra. Az átfutási idő előzéses ütemezés esetén.m3 esetén még az előzés nélküli eset is NP-teljes. Két gépre viszont Johnson már 1954-ben megoldotta a problémát. 1.34. tétel. Az F2||Cmax feladat optimális megoldását a következő algoritmus adja:1. Rendezzük a munkadarabokat a rövidebb megmunkálási idejük szerinti növekvő sorrendbe.2. Ezután ebben a sorrendben döntünk a munkák sorrendjéről. Tegyük fel, hogy már van egy K kezdeti és egy B befejező sorozat. Ekkor a soron következő megmunkálás aszerint kerül K végére, illetve B elejére, hogy a rövidebb megmunkálási ideje az első, illetve a második gépen volt-e. Bizonyítás. Tekintsünk két munkát, indexük legyen j és k, amelyek ebben a sorrendben közvetlenül egymás után következnek. Legyen T1, illetve T2 az az időpont, amikor j előtt minden megmunkálás befejeződik az első, illetve a második gépen. Ez azt jelenti, hogy a j munkadarab megmunkálása az első gépen a T1 időpontban kezdődik meg, míg a második gépen a max{T1+p1j,T2} időpontban, azaz itt a max{T1+p1j+p2j,T2+p2j} időpontban fejeződik be. Ezért k megmunkálása a második gépen nem kezdődhet meg ennél, valamint (T1+p1j+p1k) -nál korábban. Összefoglalva azt kapjuk, hogy k befejezésének időpontja a második gépen max{T1+p1j+p2j+p2k,T2+p2j+p2k,T1+p1j+p1k+p2k}.(1.34) Ha felcseréljük a két munkadarab sorrendjét, akkor a j befejezésének időpontja a második gépen max{T1+p1k+p2k+p2j,T2+p2j+p2k,T1+p1k+p1j+p2j}.(1.35) Vegyük észre, hogy az utolsó két képlet középső tagjai azonosak. Ezért, ha meg tudunk határozni egy olyan sorrendet, amelyben a két szélső tag maximuma mindig (1.34)-ban lesz kisebb, akkor ez lesz az optimális sorrend. Vegyük észre azt is, hogy a két szélső tagban a T1 additív konstans szerepel, ami nem befolyásolja a maximum helyét, ezért ezt további vizsgálatainkból kihagyjuk. Legyen A=p1j+p2j+p2k,B=p1j+p1k+p2k(1.36)C=p1k+p2k+p2j,D=p1k+p1j+p2j.(1.37) Arra keresünk feltételt, hogy mikor lesz max{A,B}max{C,D}. Látható, hogy AC akkor és csak akkor, ha p1jp1kAD akkor és csak akkor, ha p2kp1kBC akkor és csak akkor, ha p1jp2jBD akkor és csak akkor, ha p2kp2j. A megmunkálási idők hossza szerint négy esetet különböztetünk meg. (i) Ha p1jp2j és p1kp2k, akkor a fentiekből azonnal adódik a kívánt reláció. Ez az az eset, amikor a rövidebb megmunkálási idő az elől álló munka esetében az első, a mögötte lévőnél pedig a második gépen van. (ii) Ha p1jp2j és p1k<p2k, akkor BC és A>D . Ezért még az AC egyenlőtlenségre is szükség van, amiből p1jp1k<p2k, tehát mindkét munkának az első gépen rövidebb a megmunkálási ideje, és ezek közül is az elől álló munkáé a rövidebb. (iii) Ha p1j>p2j és p1kp2k, akkor B>C és AD, ezért az egyenlőtlenség, amire szükségünk van, BD. Ez akkor igaz, ha p2kp2j<p1j, vagyis mindkét munkának a második gépen rövidebb a megmunkálási ideje, és ezek közül is a hátul álló munkáé a rövidebb. (iv) Ha p1j>p2j és p1k<p2k, akkor B>C és A>D, tehát a kívánt reláció nem teljesülhet, vagyis nem lehetséges, hogy az elől álló munkának a második, a hátul állónak pedig az első gépen legyen határozottan rövidebb a megmunkálási ideje. A jelen szakasz további részében az előzés nélküli feladattal foglalkozunk. Az egyutas ütemezési probléma pontos megoldási módszerei többnyire vagy korlátozás és szétválasztás, vagy implicit leszámlálás típusú módszerek. A korlátozás és szétválasztás lényege, hogy a megengedett megoldások halmazát egyre kisebb részhalmazokra bontja fel, miközben (a) egyre pontosabban becsüli a részhalmazokba eső legjobb megengedett megoldások célfüggvényértékét, és (b) a becslő eljárás során időnként megengedett megoldásokat állít elő. Ily módon feleslegessé válnak azok a részhalmazok, ahol a becslés rosszabb, mint az addig talált legjobb megoldás értéke. Az implicit leszámlálásnál a feltételek kielégíthetőségéből tudunk levonni következtetéseket. Az ütemezési feladatok esetében ez azt jelenti, hogy bizonyos típusú sorrendek esetén a célfüggvény értéke meghaladna egy meghatározott értéket. Tanulságosak azok a teljes átfutási időre vonatkozó korlátok, amelyeket a korlátozás és szétválasztás típusú módszereknél kell használni. Az alsó korlátok mind a 1.30. tételt használják. Két fajtájuk van, a gépre, illetve a munkára alapozott alsó korlát. Mindkettő abból indul ki, hogy az adott objektummal kapcsolatos összes megmunkálást (vagyis az adott gépen vagy az adott munkadarabon végrehajtandó összes megmunkálást) el kell végezni és ez sikerül is állásidő nélkül, és ez előtt és után is a lehető legkevesebb időt használjuk fel. Mindezt az alábbi két tételben fogalmaztuk meg. 1.35. tétel. Az F||Cmax feladat optimális célfüggvényértéke legalább max{jlmin{p1j,pmj}+i=1mpil:l=1,...,n}.(1.38) Bizonyítás. Tekintsünk egy tetszőleges l munkát. Ennek végig kell mennie valamennyi gépen, vagyis a teljes átfutási időnek tartalmaznia kell ezen munka megmunkálási időinek összegét (ez a második összeg a fenti képletben). Ezen felül minden más j munka vagy előtte van a sorrendben, és akkor ezen j munkának az első gépen való megmunkálási ideje hátrébb tolja l megmunkálásának kezdetét, vagy mögötte van, ekkor j megmunkálása az utolsó gépen csak l befejezése után történik, vagyis a teljes átfutási idő l befejezéséhez képest ennyivel kitolódik. Akkor járunk a legjobban, ha pontosan azok a munkák vannak l előtt, amelyeknek a megmunkálása az első gépen rövidebb, mint az utolsón. Vagyis – a 1.30. tételhez hasonlóan – a két összeg olyan megmunkálásokat tartalmaz, amelyeknek időben egymás után kell következniük. 1.36. tétel. Az F||Cmax feladat optimális célfüggvényértéke legalább max{minjl=1i1plj+j=1npij+minjl=i+1mplj:i=1,...,m}.(1.39) Bizonyítás. A hármas összeg tagjainak jelentése a következő. Az első tag azt a legrövidebb időt adja meg, amennyinek mindenképpen el kell telnie ahhoz, hogy az első megmunkálás megkezdődhessék az i-edik gépen, és ez nem más, mint az a legrövidebb idő, ami alatt egy munkadarab az i -edik gépet eléri. A második összeg a megmunkálások ideje az i-edik gépen. Ezek természetesen csak azután kezdődhetnek meg, hogy az első munkadarab elérte a gépet. Végül a harmadik összeg az a legrövidebb idő, ami alatt egy munkadarab elkészítését be lehet fejezni azután, hogy lekerült az i-edik gépről. Vagyis hasonlóan a 1.30. tételhez, a három tag olyan megmunkálásokra tartalmaz alsó becslést, amelyeknek időben egymás után kell következniük. Általános szokás, hogyha egy nehéz feladat egy speciális esetét meg lehet oldani valamely egyszerű eljárással, akkor úgy készítenek heurisztikus eljárást az általános esetre, hogy,,visszavezetik” azt a megoldott speciálisra. Mivel az általános egyutas feladat is nehéz, de ugyanakkor Johnson algoritmusa az m=2 esetet megoldja, tehát pontosan a fenti helyzettel állunk szemben, pusztán az a kérdés, hogy hogyan lehet értelmezni a két,,gépet”. Az idézőjel itt arra vall, hogy ez a két gép csak absztrakt gép lesz, nem az eredeti feladat valamely gépe. Mielőtt a fenti kérdésre válaszolnánk, érdemes szemügyre venni a Johnson algoritmusa mögött meghúzódó gondolatot. Emlékezzünk rá, hogy azok a munkák kerültek előre, amelyeknek a rövidebb megmunkálási ideje az első gépen, a hosszabb pedig a másodikon volt. A sorrend végére pedig azok kerültek, amelyeknél a helyzet éppen fordított volt. Az ilyen sorrend azt célozza, hogy minél előbb legyen munkája a második gépnek, vagyis ott kevés legyen az állásidő, majd miután az első gép befejezte a munkáját (természetesen állásidő nélkül), akkor minél rövidebb ideig kelljen a második gépnek dolgoznia. Kiterjesztve ezt több gép esetére, olyan sorrendet szeretnénk, ahol az első gépeken kevés időt használó munkák kerülnek előre, a hátsó gépeken keveset használók pedig a sorrend végére. Úgy lehet két gépet,,csinálni” a sokból, hogy bizonyos gépeket,,összevonunk”, azaz úgy tekintjük, mintha az ezeken végzendő megmunkálások egyetlen nagy megmunkálást adnának ki, ahol a megmunkálási idő az eredeti megmunkálási idők összege. A fentiek szellemében ezt két különböző módon is meg lehet csinálni. Az egyik esetben elölről is és hátulról is ugyanannyi gépet tekintünk, míg a gépek középső részét figyelmen kívül hagyjuk. Ha r a tekintetbe veendő gépek száma mindkét oldalról, akkor a két mesterséges gépen a megmunkálási idők p1jr=i=1rpij,p2jr=i=mr+1mpij,j=1,...,n(1.40) lesznek. Itt r=1,...,m/2. Az így definiált kétgépes feladatokat minden r esetén külön-külön megoldjuk Johnson módszerével, majd az így kapott sorrendre kiszámítjuk az eredeti feladat átfutási idejét. Végül az így kapott sorrendek közül a legjobbat választjuk. Még ha m páratlan is, r felső határának ilyetén megválasztása biztosítja, hogy minden, az eredeti feladatban szereplő gépet legalább egyszer figyelembe veszünk. A másik lehetőség, hogy a gépeket két részre osztjuk, és eszerint határozzuk meg a mesterséges gépeken a megmunkálási időket. Ha az első csoportban r gép van, akkor a megmunkálási időket p1jr=i=1rpij,p2jr=i=r+1mpij,j=1,...,n(1.41) adja meg. Itt r=1,...,m1. Minden másban úgy járunk el, mint fent. Befejezésül azt mutatjuk meg, hogy az F| no-wait |Cmax probléma egy utazóügynök feladatra vezethető vissza. Ebben a feladatban tehát a munkák nem várhatnak a gépek előtt, hanem éppen fordítva, a gépeknek kell várniuk a munkákra. Ha a j -edik munkának sehol nem kell várnia a gépek előtt, és gyártása a 0 időpontban kezdődik, akkor a megmunkálása az r gépen a i=1rpij időpontban fejeződik be. Tegyük fel, hogy közvetlenül utána a k munka következik, melynek gyártása a t0 időpontban kezdődik. Tudjuk, hogy k csak akkor kerülhet az r gépre, ha a megmunkálása az r1 gépen befejeződött, ami a t+i=1r1pik időpontban következik be. Ekkor azonban az r gépnek szabadnak kell lennie, azaz teljesülnie kell a t+i=1r1piki=1rpij egyenlőtlenségnek. Vagyis t -nek el kell érnie legalább a i=1rpiji=1r1pik értéket. Mivel ennek minden gépre teljesülnie kell, ezért a k munka a j munka után max{i=1rpiji=1r1pikr=1,...,m}(1.42) idővel indítható. (Itt az üres összeg értéke szokás szerint 0 , továbbá a megmunkálási időkről feltesszük, hogy nemnegatívak, így a fenti érték is nemnegatív.) Mivel a feltételezés szerint a megmunkálási időket nem tudjuk változtatni, csak úgy tudjuk a teljes átfutási időt a lehető legrövidebbé tenni, hogy minimalizáljuk a munkák indításai között eltelő várakozási idők összegét. Ez azonban nem más, mint az az utazóügynök feladat, ahol a városok a munkák, a közöttük lévő távolságot pedig a (1.42) képlet adja meg. 1.6. A többutas ütemezési probléma A többutas problémák családja tartalmazza a legbonyolultabb ütemezési feladatokat. Itt semmiféle megkötés nincs a technológiai útvonalakra, még az is megengedett, hogy egy munka ne kerüljön minden gépre, és hogy egyes gépeket többször is felkeressen. Egy megszorítás van, amit általánosan fel szoktak tenni, nevezetesen, hogy nincsenek párhuzamos berendezések, azaz minden gépből csak egy van. Ez annyit jelent, hogy minden megmunkálást egy meghatározott gépen kell elvégezni. Ahhoz, hogy egy feladatot pontosan meg lehessen fogalmazni és oldani, valamilyen matematikai modell kell. A két leggyakrabban használt modell az ú.n. diszjunktív gráf modell és a diszkrét programozási modell. Először ezeket tárgyaljuk. Az alábbiakban az angol nyelvű irodalomhoz hasonlóan a megmunkálás szó helyett a művelet kifejezést alkalmazzuk. Ennek oka az, hogy megmunkáláson inkább értjük az egy munkadarabon végzett átalakítást, míg művelet bármi lehet, még két különálló darab összehegesztése vagy egyetlen elem feldarabolása is. Különösen áll ez az elsőnek tárgyalandó diszjunktív gráf modellre. Ennek mélyebb megértéséhez hasznos a kritikus út módszerének ismerete. 1.6.1. A kritikus út módszere Ez a módszer (CPM) nem képezi a jelen fejezet tárgyát, ezért itt csak a legfontosabb tudnivalókat foglaljuk össze. Tegyük fel, hogy valamilyen tevékenységek sorozatát – esetünkben valamely termékek gyártásához tartozó műveleteteket – akarjuk elvégezni. Ezen tevékenységek között lehetnek bizonyos megelőzési kapcsolatok, amelyek azt fejezik ki, hogy valamely tevékenységnek be kell fejeződnie ahhoz, hogy egy másik elkezdődhessék. A feladat több különböző módon is leírható egy G irányított gráffal. Nekünk arra a változatra lesz szükségünk, ahol a gráf csúcsai a tevékenységek. Ekkor egy α csúcsból (tevékenységből) irányított él vezet minden olyan β csúcsba (tevékenységbe), amely őt közvetlenül követheti. Az él hossza az α tevékenység elvégzéséhez szükséges idő, azaz az α csúcsból kiinduló valamennyi él hossza azonos. Feltételezzük továbbá egy 0 hosszúságú kezdeti és * befejező tevékenység létezését, amelyek a következő tulajdonságokkal rendelkeznek. (i) A csúcsba nem vezet él. (ii) A * csúcsból nem indul ki él. (iii) Legyen α tetszőleges, -től és * -tól különböző tevékenység. Ekkor -ből vezet irányított út α -ba, és α -ból vezet irányított út * -ba. A G gráf egy fontos további tulajdonsága még, hogy (iv) A G gráf irányított kört nem tartalmaz. Ha ugyanis irányított kört tartalmazna, akkor a körbe tartozó valamennyi tevékenység megkezdésének az volna a feltétele, hogy a kör többi tevékenysége befejeződjön, azaz egyetlen, a körhöz tartozó tevékenységet sem lehetne elkezdeni. Feltételezve, hogy az egész tevékenységsorozat a 0 időpontban kezdődik, igaz a következő 1.37. tétel. (a) Az egész tevékenységsorozat lehetséges legrövidebb átfutási ideje egyenlő a -ből * -ba vezető leghosszabb út hosszával. (b) Semmilyen α tevékenység sem kezdődhet előbb, mint a -ből az α -ba vezető leghosszabb út hossza. (c) Ha a tevékenységsorozat lehetséges legrövidebb átfutási ideje T , akkor egyetlen α tevékenység sem kezdődhet később, mint T ( α -ból * -ba vezető leghosszabb út hossza) anélkül, hogy a teljes átfutási időt ne tolná ki T -n túlra. A tétel (a) részében említett leghosszabb úthoz tartozó tevékenységek csak egyetlen jól meghatározott időpontban kezdődhetnek a teljes átfutási idő meghosszabbítása nélkül, ezért ezeket,,kritikusnak” hívják, innen ered az egész módszer elnevezése. Jelölje pα,qα,rα rendre az α tevékenység elvégzéséhez szükséges időt, α lehetséges legkésőbbi befejezési idejét a teljes átfutási idő meghosszabbítása nélkül és végül α lehetséges legkorábbi kezdési idejét. Az utóbbi két mennyiség egy dinamikus programozási algoritmusból is meghatározható. (Ebben fontos szerepet játszik, hogy a gráf nem tartalmaz irányított kört.) A megfelelő Bellman-egyenleteket az alábbi tétel adja meg. 1.38. tétel. Jelölje N a G gráf csúcsainak, A pedig éleinek halmazát. Ekkor r=0,(1.43) minden αN\{} esetén rα=max{rβ+pβ:(β,α)A},(1.44)q*=T,(1.45) minden αN\{*} esetén qα=min{qβpβ:(α,β)A}.(1.46) 1.6.2. A diszjunktív gráf modell Tekintsünk két tetszőleges α,β műveletet. Ezek az alábbi három viszony valamelyikében állnak egymással: (i) az egyiknek meg kell előznie a másikat (pl. azért, mert ugyanahhoz a munkadarabhoz tartozó műveletekről van szó, és a technológia előírja a sorrendjüket), (ii) egyszerre nem végezhetők (pl. azért, mert mindkettő ugyanazt a gépet igényli), (iii) nincsenek közvetlen hatással egymásra (pl. különböző munkadarabokon különböző gépekkel végzendő műveletek). A fenti helyzetet a G=(N,CD) ú.n. diszjunktív gráf írja le, ahol N a műveletek halmaza, C az (i) kategóriába eső relációkat leíró, konjunktívnak nevezett éleket tartalmazza, D pedig a (ii) kategóriába tartozó relációkat reprezentáló, diszjunktív élpárokat. Ez azt jelenti, hogyha az α és β művelet nem végezhető egyszerre, akkor mind az (α,β) , mind a (β,α) él eleme a D halmaznak. Továbbá minden α,βN esetén feltesszük, ha (α,β)CD, akkor az (α,β) él hossza pα, azaz az α művelet elvégzéséhez szükséges idő, ami független az él végpontjától, azaz β -tól. Az élek hosszát, azaz a megmunkálási időket, mindvégig nemnegatívnak tételezzük fel. 1.39. definíció. Az AD halmazt programnak nevezzük, ha (α,β)A akkor és csak akkor, ha (β,α)/A . Ha tehát A egy program, akkor a G=(N,CA) egy szokásos irányított gráf. Ennek élei határozzák meg, hogy a műveletek milyen sorrendben végezhetők. Ha minden műveletet a lehetséges legkorábbi időpontra ütemezünk, azaz nem iktatunk be állásidőt olyan esetben, amikor mind a gép rendelkezésre áll, mind a sorrend szerint következő művelet elvégezhető volna, akkor G egyértelműen meghatároz egy termelési programot. A diszjunktív gráf modell nyelvén a J||Cmax feladat úgy fogalmazható meg, hogy meghatározandó a G gráfhoz egy A program úgy, hogy az így keletkező G gráfban a kritikus út hossza minimális legyen. Kritikus útról természetesen csak akkor lehet beszélni, ha G nem tartalmaz irányított kört. Ezért az alábbiakban mindvégig feltesszük, hogy csak olyan A programokat vizsgálunk, hogy G nem tartalmaz irányított kört. A diszjunktív gráf modell megoldására szolgáló módszerek kevés kivételtől eltekintve mind a korlátozás és szétválasztás elvén alapulnak. Ehhez természetesen a kritikus út hosszára vonatkozó alsó korlátra van szükség. Az alábbiakban tárgyaljuk a leggyakoribbakat. Amikor az optimális A programot keressük, az élpárok egy-egy tagját különkülön választjuk ki. Így az algoritmusok során mindig olyan helyzet áll fenn, hogy a C halmazhoz még hozzáválasztunk néhány további élt. Ezt a halmazt fogjuk B -vel jelölni. Tehát valamely alkalmas A program mellett mindig igaz a CBCA reláció. Az (N,B) gráfot H jelöli. Hangsúlyozzuk, hogy H tartalmazza az összes konjunktív élt, bizonyos diszjunktív élpárokból egyet, míg a többi diszjunktív élpárból egyik élt sem. 1.40. definíció. Legyen M a műveletek egy részhalmaza. Azt mondjuk, hogy M diszjunktív, ha bármely α,βM(αβ) esetén α -t és β -t a H gráfban vagy egy konjunktív élekből álló irányított út köti össze, vagy egy diszjunktív élpár. Szükségünk lesz még az alábbi két mesterséges műveletre, melyek bevezetése megkönnyíti a számításokat: egy 0 hosszúságú kezdő művelet, * pedig 0 hosszúságú befejező művelet. Ezen két műveletről bármely (N,B) gráfra vonatkozóan, tehát még a (N,C) esetén is a következőket tesszük fel: (1) A csúcsba nem vezet él. (2) A * csúcsból nem indul ki él. (3) Legyen α tetszőleges, -től és * -tól különböző művelet. Ekkor -ból vezet irányított út α -ba, és α -ból vezet irányított út * -ba. Továbbá az alábbi jelöléseket alkalmazzuk, amelyek mind a H=(N,B) gráfra vonatkoznak: rα az α művelet megkezdésének lehetséges legkorábbi időpontja, qα az az idő, aminek minimálisan el kell telnie az α művelet befejezése után minden művelet befejezéséig. Könnyen látható, hogy rα nem más, mint a -ből α -ba vezető leghosszabb út hossza a H gráfban, míg qα ugyanitt az α csúcsból a * csúcsba vezető leghosszabb út hossza pα nélkül. Ezért az rα,qα mennyiségekre a (1.43)–(1.46) képletekhez hasonlóan az alábbi rekurzív képletek adhatók meg: r=0,(1.47) minden αN\{} esetén rα=max{rβ+pβ:(β,α)B},(1.48)q*=0,(1.49) minden αN\{*} esetén qα=max{qβpβ:(α,β)B}.(1.50) Ha M a műveletek egy diszjunktív részhalmaza, és ebben az α és β művelet olyan, hogy konjunktív élekből álló út vezet α -ból β -ba, akkor az rαrβ,qαqβ egyenlőtlenségek automatikusan teljesülnek. Ha a B halmazhoz hozzáveszünk egy addig diszjunktív (α,β) élt, akkor az r és q értékeket azonnal úgy kell módosítani, hogy a Bellman-egyenletek továbbra is igazak maradjanak. 1.41. tétel. Bármely A program esetén, amelyre BCA teljesül, a teljes átfutási idő legalább max{rα+pα+qα:αN}.(1.51) Bizonyítás. Az rα+pα+qα összeg a -ből α-n keresztül * -ba vezető leghosszabb út hossza. Tehát a képlet a kritikus út hosszát adja meg a H gráfban. Ez a hossz nem csökkenhet, ha további nemnegatív hosszú éleket vezetünk be a gráfba. A 1.36. tételnek az volt a logikája, hogy megvizsgáltuk, hogy milyen gyorsan tud egyáltalán eljutni valami egy i gépre, ott optimális esetben állásidő nélkül el lehet végezni az összes megmunkálást, majd az utolsó munkadarabnak még be is kell fejeződnie a további gépeken, ezt is a lehető legrövidebbnek feltételezve. Ehhez hasonló módon számos alsó korlát nyerhető. 1.42. tétel. A többutas ütemezési feladat átfutási ideje a műveletek bármely diszjunktív M halmaza esetén legalább minαMrα+αMpα+minαMqα.(1.52) Bizonyítás. Gyengítsük a feladat feltételeit úgy, hogy az M halmaz kivételével az összes többi diszjunktív élpártól eltekintünk. Ekkor is minimálisan el kell annyi időnek telnie, amíg az M-beli műveletek közül az első megkezdődhet, az összes M-beli művelet befejeződik, végül az M-beli műveleteket követő megmunkálások is véget érnek. Ezen három tényezőre ad rendre alsó korlátot a (1.52) kifejezés három tagja. 1.43. tétel. Legyen a műveletek bármely diszjunktív M halmaza esetén az M-beli műveleteknek egy, a qj értékek szerinti monoton csökkenő sorrendje [1],[2],...,[|M|] . A többutas ütemezési feladat átfutási ideje legalább minαMrα+max{i=1jp[i]+q[j]:j=1,...,|M|}.(1.53) Bizonyítás. Gyengítsük ugyanúgy a feltételeket, mint az előző tételnél. Továbbá tegyük fel, hogy minden művelet rendelkezésre áll a minαMrα időpontra. Legyen a teljes tevékenység végső határideje T. Innen a gyengített feltételek alapján adódik, hogy az M -beli α művelet határideje Tqα. Az eredeti feladat teljes átfutási idejére T olyan értéke ad alsó becslést, amely mellett a gyengített feladatban a maximális késés nemnegatív. Nyilvánvalóan ezek közül az a legjobb T érték, amely mellett a maximális késés éppen 0. A 1.4. tételből tudjuk, hogy a monoton növő határidők szerinti ütemezés minimalizálja a maximális késést, és esetünkben a qj értékek szerinti monoton csökkenő sorrend ilyen. Az adott sorrend szerinti [j] művelet befejezési időpontja minαMrα+i=1jp[i]. Mivel a maximális késés 0, ezért innen a minαMrα+max{i=1jp[i](Tq[j]):j=1,...,|M|}0 egyenlőtlenség adódik. Ebből T maximális értékére a (1.53)-beli kifejezés kapható. 1.44. tétel. Legyen a műveletek egy diszjunktív M halmaza esetén [1],[2],...,[|M|] az M -beli műveleteknek egy, a rendelkezésre állási idők szerinti monoton csökkenő sorrendje. A többutas ütemezési feladat átfutási ideje legalább minαMqα+max{i=1jp[i]+r[j]:j=1,...,|M|}.(1.54) Bizonyítás. Alkalmazzuk az előző tételt arra az ütemezési feladatra, amelyben a megmunkálási idők azonosak a vizsgált problémában szereplőkkel, míg a rendelkezésre állási időket a qj értékek adják meg és rj időnek kell eltelnie a j művelet befejezése után a műveletek teljes befejezéséig. A korlátozás és szétválasztási módszerek gyakran keverednek az implicit leszámlálással, s nem csupán az ütemezési problémák megoldásánál. Az utóbbinak az a lényege, hogy a szóba kerülő megoldások egy részét ki akarjuk zárni, anélkül, hogy ténylegesen megvizsgálnánk őket. Itt egy ilyen lehetőséget mutatunk be a 1.42. tételre támaszkodva. 1.45. tétel. Legyen M műveletek egy halmaza és α egy további úgy, hogy az M{α} halmaz diszjunktív. Legyen továbbá C>0 egy tetszőleges szám. Ha rα+βMpβ+pα+minβMqβC(1.55) és minβMrβ+βMpβ+pα+minβMqβC,(1.56) akkor minden olyan ütemezésben, amelynek az átfutási ideje rövidebb, mint C,α az összes M-beli művelet mögött áll. Bizonyítás. A (1.55) egyenlőtlenség baloldala alsó korlát a teljes átfutási időre abban az esetben, ha α megelőzi az összes M -beli műveletet, azaz ebben az esetben nem lehet az átfutási idő C -nél rövidebb. Hasonlóképpen a (1.56) egyenlőtlenség baloldala alsó korlát a teljes átfutási időre abban az esetben, ha α az M-beliek között van, azaz sem nem első, sem nem utolsó. A tételben |M|+1 műveletről esik szó, ezek összesen (|M|+1)! sorrendet alkothatnak. Ha az állítás feltételei teljesülnek, akkor már csak |M|! sorrend kerülhet szóba, azaz a megvizsgálandó esetek számát 1/(|M|+1) -ed részére redukáltuk. Ez az oka annak, hogy az ilyen teszteket akkor is érdemes igen gyakran ellenőrizni, ha számos esetben nem adnak pozitív eredményt. A korlátozás és szétválasztás eljárásában a részhalmazok felbontásának számos módszere ismert. Ezek közül a legegyszerűbb az, amikor egy halmazt egy még nem vizsgált diszjunktív élpárnak megfelelően bontanak két részhalmazra. Egy finomabb eljárás az ú.n. kritikus blokkon alapul. Tegyük fel, hogy már ismert egy ütemezés C átfutási idővel. Tekintsünk a pillanatnyi, esetleg még teljes ütemezést nem adó megoldásban egy olyan α műveletet, ha ilyen egyáltalán van, amelyre rα+pα+qαC(1.57) teljesül. Ha van ilyen művelet, akkor egyetlen olyan teljes ütemezés sem adhat jobbat a már ismert megoldásnál, mely teljes ütemezés a jelenlegi megoldásból keletkezik kiegészítéssel. Ez a helyzet például éppen akkor, amikor egy minden korábbinál jobb ütemezést találtunk, hiszen ettől a pillanattól kezdve ennél jobbat keresünk, és a (1.57) feltétel legalább egy műveletre teljesül. Legyen α egy olyan művelet, amire (1.57) igaz, de egyetlen -ből α-ba vezető útba eső műveletre sem áll fenn a fenti egyenlőtlenség. A -ből α-ba vezető útba eső műveletek alkotják az ú.n. kritikus blokkot. Nyilvánvalóan csak akkor tudunk a már ismertnél jobb ütemezést találni, ha sikerül α-t a kritikus blokkon belül előbbre ütemeznünk. Tehát minden, a későbbiekben felbontandó halmaznak elég csak azokat a részhalmazait tekinteni, amelyekbe eső elemek ezt a követelményt teljesítik. Itt persze adott esetben számos lehetőség merülhet fel, melyek kezelésének részleteibe nem megyünk bele. Ha a (1.57) feltétel semmilyen α mellett sem teljesül, akkor a felbontásra a fent említett egyszerű szabály alkalmazható. 1.8. példa. Tekintsük azt a – négy munkát és három gépet tartalmazó – feladatot, melyet az alábbi adatok határoznak meg. A táblázat belsejében az első szám a gép indexe, a második a művelet elvégzéséhez szükséges idő. A műveleteket kétjegyű indexekkel azonosítjuk, az első jegy a munka indexe, a második jegy pedig azt mutatja meg, hogy adott munkához tartozó hányadik műveletről van szó. Ha még egyetlen műveletet sem ütemeztünk, vagyis az A halmaz üres, akkor a megfelelő r és q értékek a következők: Tekintsük a második gépet. Az ezen végzendő műveletek 12, 15, 21, 23, 33, 35, 42. Így a fenti tételek alapján a következő becsléseket kapjuk. Mivel most minden művelet esetén az rα+pα+qα érték nem más, mint az adott munkához tartozó megmunkálási idők összege, ezért a 1.41. tétel alapján mind a 33, mind a 35 műveletre a 14 értéket kapjuk. Lévén r21=q35=0, ezért a 1.42. tétel alapján a második gépen végzendő műveletek összidejét kapjuk, ami 18. Ugyanezt az értéket adja a 1.43. tétel is. A rendelkezésre állási idők szerinti csökkenő sorrend nem egyértelmű, a két lehetséges sorrend 35, 15, 33, 23, 12, 42, 21 és 35, 15, 33, 23, 42, 12, 21. Innen a 1.44. tétel alapján a 19 alsó korlát adódik, nem tekintve ugyanis a 21 műveletet, kapjuk, hogy q35+p35+p15+p33+p23+p12+p42+r42=19. Ez azt sugallja, hogy a második gépen a műveleteket 21, 42, 12, 23, 33, 15, 35 sorrendben kell végezni, és valóban, ez ugyanis az alábbi ütemezéshez vezet, ahol tj a művelet kezdési, cj pedig a befejezési időpontja. Az ütemezés Gantt-diagramja a 1.8. ábrán látható. 1.8. ábra. Egy optimális ütemezés. 1.6.3. Egészértékű programozási modellek Az első elterjedt modell a J||f feladatra vonatkozik azon egyszerűsítő feltételezés mellett, hogy minden munka legfeljebb egyszer kerül egy gépre. A képletekben az alábbi indexeket és állandókat használjuk: i,j : a munkák indexei, n : munkák száma, mi : az i munkán végzendő műveletek száma, k,l : a műveletek indexei, g : a gép indexe, di : az i munka határideje, pig : az i munka g gépen végzendő műveletének megmunkálási ideje, gik : az a gép, amelyen az i munka k műveletét végezni kell, M : egy nagy szám, például i=1nk=1mipigik. A feladat változói pedig xijg={1, ha az i munka megelőzi a j munkát a g gépen, 0 különben; tig – az i -edik munka g gépen végzendő műveletének kezdeti időpontja. Két feltételcsoportot kell felírnunk. Az első azt biztosítja, hogy ugyanannak a munkának a műveletei a meghatározott sorrendben kövessék egymást, és időben ne legyen átfedés közöttük, míg a második csoport különböző munkák ugyanazon a gépen végzendő műveletei közti átfedést akadályozza meg. Az első esetben egyszerűen csak azt kell biztosítani, hogy az i munka k és k+1 műveletének megkezdése között legalább pigik idő elteljen, azaz a tigik+pigiktigi,k+1,i=1,...,n,k=1,...,mi1(1.58) egyenlőtlenségek teljesülését kell megkövetelni. Tegyük fel, hogy g=gik=gjl , azaz az i munka k és a j munka l műveletét azonos gépen kell végezni. Ekkor a tjgtigpig,tigtjgpjg(1.59) egyenlőtlenségek közül egynek teljesülnie kell. Az első azt fejezi ki, hogy a g gépen i megelőzi a j munkát, azaz xijg=1. Ennek felhasználásával a Mxijg+tigtjgpjg,(1.60)M(1xijg)+tjgtigpig(1.61) egyenlőtlenségek adódnak. Ha xijg=1, akkor az első automatikusan teljesül, míg a második kikényszeríti, hogy a j munka megfelelő idővel később kerüljön a g gépre, mint i, és ha xijg=0, akkor éppen fordítva. A változókra természetes módon adódnak a minden i,j,g esetén 0tigM,xijg{0,1}(1.62) megszorítások. További feltételekre lehet szükség a célfüggvény kezelésére, illetve akkor, ha a munkákra határidők is vannak. Az utóbbi esetben azt kell megkövetelni, hogy az egyes munkák utolsó művelete a határidőnél ne később fejeződjék be, azaz tigimi+pigimidi,i=1,...,n.(1.63) A célfüggvények közül wjCj és így wjLj írható fel a legkönnyebben, hiszen az előbbi i=1nwi(tigimi+pigimi)=i=1nwitigimi+i=1nwipigimi. Az utóbbi tag állandó, így el is hagyható. Egy új változóra, legyen ez C, és n további feltételre van szükség Cmax kezeléséhez. Az új feltételek Ctigimi+pigimii=1,...,n. A célfüggvény megfelelő alakja pedig minC. Hasonlóképpen intézhető el Lmax is, csak ott Ci értéke helyett Li értékére kell az egyenlőtlenségeket megkövetelni. Vegyük számba a modell változóit és feltételeit. Mint láttuk, xijg és xjig közül elég csak az egyiket bevezetni, így ezek maximális száma n(n1)m/2 . Mivel minden munka csak egyszer kerülhet egy gépre, ezért a tig változók száma legfeljebb nm , összesen pontosan i=1nmi. A (1.58) feltételek száma munkánként mi1, azaz összesen i=1n(mi1)nmn. A (1.60)–(1.61) feltételeké pedig legfeljebb n(n1)m. A következő másik modell általánosabb, és tekintettel tud lenni különböző erőforrásokra is. Ez a modell egy ú.n. oszlopgeneráló eljárás alapja. Matematikai programozásban akkor neveznek így egy módszert, ha az egy olyan modellen (feladaton) alapszik, aminek explicit felírása nem lehetséges, mert az legalább egyenértékű volna a feladat megoldásával, de a modell, illetve annak matematikai tulajdonságai lehetővé teszik, hogy egyre újabb oszlopokat, azaz változókat (a hozzájuk tartozó együtthatókkal együtt), vezessünk be a lineáris feltételeket tartalmazó modell megoldása során, és teszteljük a mindenkori részmegoldás optimalitását. Így végső soron a feladatot annak explicit felírása nélkül tudjuk megoldani. A modell a J|res|fj feladatra vonatkozik, azzal a további könnyítéssel, hogy nem követeli meg, hogy az egyes munkákhoz tartozó műveletekre egyértelműen előírt sorrend legyen, hanem megengedi, hogy a szükséges megelőzési feltételeket munkánként külön-külön egy háló írja le. Viszont feltesszük, hogy minden j esetén az fj célfüggvény reguláris, továbbá, hogy a megmunkálási idők egészek. Legyen a j munka műveleteinek halmaza Oj. A j munka ütemezésének nevezzük a tα számokat, ha minden α,βOj esetén tα+pαtβ teljesül, feltéve, hogy az α műveletnek meg kell előznie a β műveletet. Itt tα egyben azt is jelenti, hogy minden α művelet esetén a műveletet a [tα,tα+pα] időintervallumban végzik el. Egy további megszorítás, hogy feltesszük, hogy a feladat véges T időkorláton belül megoldható. Az adatok egész voltából következik, hogy feltehető a tα számok egész volta is. Végül azt a következtetést kapjuk, hogy csak véges sok ütemezés van, ami közül választanunk kell. Ezt a számot a j munka esetén wj jelöli. Az erőforrásokra vonatkozó feltételezések a következők. A figyelembe veendő erőforrások száma s . Minden α művelet az elvégzése során állandó intenzitással használja valamennyi erőforrást, ide értve azt az esetet is, amikor a művelet elvégzéséhez nem kell valamely erőforrás. Ezt a mennyiséget, vagyis azt, hogy az α művelet mennyit igényel a k erőforrásból, bαk jelöli. Ilyen módon bármely j munka és annak h ütemezése esetén megmondható, hogy a k erőforrásból a t időpontban az adott munkának mekkora mennyiségre van szüksége, amit ajhkt jelöl. A k erőforrásból a t időpontban elérhető mennyiség ekt. Hasonlóképpen bármely j munka és h ütemezés esetén egyértelműen meghatározott a j munka során felmerülő költség, ami fjh. Az alapfeladatban a költségeket akarjuk minimalizálni úgy, hogy semmikor sem lépjük túl az erőforrások szabta korlátokat és minden munkára pontosan egy ütemezést választunk ki. Így a fenti jelölésekkel az alábbi feladathoz jutunk: minj=1nh=1wjfjhxjh(1.64)j=1nh=1wjajhktxjhekt,k=1,...,s,t=0,...,T,(1.65)h=1wjxjh=1j=1,...,n,(1.66)xjh{0,1},j=1,...,n,h=1,...,wj.(1.67) Tehát xjh az a döntési változó, ami akkor és csak akkor 1, ha a j munka h ütemezését használjuk, különben 0. Itt a (1.65) egyenlőtlenségek jelentik az ú.n. összekötő feltételeket. Ha ezek nem volnának, akkor a feladat igen egyszerű lenne, ugyanis minden munkára a legkisebb költségű ütemezést kellene választani. Legyenek a λkt számok tetszőleges rögzített, nemnegatív mennyiségek (k=1,...,s;t=0,...,T). Könnyen látható, hogy ekkor a (1.64)–(1.67) feladat célfüggvényének értékét minden megengedett megoldás esetén alulról becsüli az alábbi, ú.n. Lagrange-feladat célfüggvényének értéke a változók ugyanazon értéke mellett minj=1nh=1wjfjhxjh+k=1st=0Tj=1nh=1wjajhktxjhλktk=1st=0Tektλkt,(1.68)h=1wjxjh=1,j=1,...,n;(1.69)xjh{0,1}j=1,...,nh=1,...,wj.(1.70) A középső tagban az összegzés sorrendjét megváltoztatva a célfüggvény az alábbi alakra hozható minj=1nh=1wj(fjh+k=1st=0Tajhktλkt)xjhk=1st=0Tektλkt.(1.71) A fentiek csak a modell felső szintjét jelentik, amelyben csak közvetve, az ajhkt számokon keresztül, jelennek meg a műveletek ütemezései és erőforrásfelhasználásai. Az eddig mondottakat ütemezések megkonstruálására akarjuk felhasználni. Ezt a célt szolgálja a célfüggvény (1.71) formája is. Itt ugyanis jól látható egy munka ütemezésének hatása a Lagrange-feladat célfüggvényére. A továbbiakban ezt a tagot akarjuk becsülni. Az α tevékenységhez szükséges erőforrások felhasználása a fenti jelölések mellett uα(tα)=k=1sbαkt=tαtα+pα1λkt értékkel járul hozzá az adott ütemezésnek a célfüggvénybeli együtthatójához, vagyis a k=1st=0Tajhktλkt összeghez. Tegyük fel, hogy a j munkából már ütemeztük az O^jOj tevékenységeket. Ekkor az előző modell jelöléseit használva az éppen konstruálandó h ütemezés együtthatója legalább max{fj(tα+pα+qα):αO^j}+αO^juα(tα) lesz. A további részleteket elhagyjuk. Az eljárás lényege, amit a fentiekben igyekeztünk demonstrálni, az, hogy ilyen módon az ütemezések konstrukciója során mindvégig becsülni tudjuk a célfüggvény értékét alulról, és így ki lehet szűrni a nem elegendően jó ütemezéseket. A felsorolt adatokból is látható, hogy bár a kezelhető feladatok mérete állandóan növekszik, azonban számos gyakorlati probléma mérete jóval nagyobb, így érthető, hogy a heurisztikus módszereknek nagy jelentőségük van. Mielőtt azonban ezekre rátérnénk, a pontos eredmények közül utolsónak Jackson észrevételét adjuk közre, amelyben kiterjesztette Johnson módszerét a kétgépes, többutas probléma megoldására. 1.46. tétel. Legyen a J2|mj2|Cmax feladat esetén J1 azon munkák halmaza, amelyeket csak az első gépen kell megmunkálni, J2 azon munkák halmaza, amelyeket csak a második gépen kell megmunkálni, J12 azon munkák halmaza, amelyeket először az első gépen, utána a második gépen kell megmunkálni, J21 azon munkák halmaza, amelyeket először a második gépen, utána az első gépen kell megmunkálni. Ekkor a feladat egy optimális ütemezése a következő: az első gépen először a J12 -beli munkák itteni műveleteit végezzük el a Johnson-algoritmus szerinti sorrendben, utána a J1 -beli műveleteket tetszőleges sorrendben, végül a J21 -beli munkák itteni műveleteit ugyancsak a Johnson-algoritmus szerinti sorrendben. a második gépen először a J21 -beli munkák itteni műveleteit végezzük el a Johnson algoritmus szerinti sorrendben, utána a J2 -beli műveleteket tetszőleges sorrendben, végül a J12 -beli munkák itteni műveleteit ugyancsak a Johnson-algoritmus szerinti sorrendben. Megjegyzés. Johnson algoritmusát külön-külön alkalmazzuk a J12 és J21beli munkákra. Azt szokás mondani, hogy a J1 és J2-beli munkák esetén csak egy művelet van. Nem jelent megszorítást azonban, ha akárhány műveletet is megengedünk, mint azt látni fogjuk. Annyi azonnal látható, hogy akárhány műveletet is kelljen elvégezni egy munkán, ezek megtehetők egyetlen menetben, hiszen mihelyst véget ért egy művelet, a munkadarab azonnal feltehető ugyanarra a gépre. Bizonyítás. Tegyük fel, hogy az első gépen a műveletek sorrendje nem azonos az állításbelivel. Ha két szomszédos művelet közül az első J1-beli, a második J12-beli, akkor ezek felcserélése nem változtatja meg az állásidőt az első gépen és nem növeli a második gépen, az első J21 -beli, a második J12 -beli, akkor ezek felcserélése nem növeli az állásidőt egyik gépen sem, mindkettő J12 -beli, de nem a Johnson algoritmus szerinti sorrendben vannak, akkor ezek felcserélése nem változtatja meg az állásidőt az első gépen és nem növeli a második gépen. Tehát az állításban szereplő sorrend az első gépen semmilyen más sorrendnél sem rosszabb. Hasonló átrendezések végezhetők szükség esetén a második gépen is. 1.6.4. Heurisztikus módszerek A továbbiakban rátérünk a heurisztikus módszerek tárgyalására. Mindvégig feltesszük, hogy a célfüggvény reguláris. Az alább bevezetendő fogalmak ilyenekhez előállítandó közelítő megoldások leírására szolgálnak. 1.47. definíció. Egy ütemezést aktívnak nevezünk, ha egyetlen műveletet sem lehet időben előbbre tolni anélkül, hogy valamely más művelet ütemezését hátrébb kellene csúsztatni. 1.9. példa. A 1.8. példában megadott optimális ütemezés nem aktív, mert a 22 műveletet már t=1 -ben meg lehet kezdeni. Hasonlóképpen 43 előbbre hozható a 10 időpontig és ezáltal 44 és 45 is előbbre csúsztatható két egységgel. Végül a 31 művelet is megkezdhető már (t=4) -ben. Így a . ábrán látható ütemezéshez jutunk. 1.9. ábra. Egy optimális megoldás, mely aktív ütemezés. Reguláris célfüggvény esetén mindig van aktív optimális megoldás, mert egy kezdési időpont előbbre hozása egy másik kezdési időpont növelése nélkül nem növelheti a célfüggvény értékét. Az aktív ütemezések úgy is felfoghatók, hogy először meghatározzuk a műveletek sorrendjét a gépeken, aztán minden művelet kezdési időpontját a lehető legkorábbinak választjuk úgy, hogy a gépeken előírt sorrend ne sérüljön meg. Az aktív ütemezések egy fontos alosztálya a következő: 1.48. definíció. Egy ütemezés állásidő nélküli, ha minden gép dolgozik, ha egyáltalán van elvégezhető művelet. 1.10. példa. Az előző példában szereplő módosított optimális megoldás nem állásidő nélküli, mert a 43 művelet már t=5 -ben rendelkezésre áll. Nem előnyös azonban ekkor megkezdeni, mert akkor mind a 13, mind a 32 műveletet kitolnánk, és így végső soron megnövelnénk a teljes átfutási időt. A példa mutatja, hogy az állásidő nélküli ütemezés nem ad mindig optimális megoldást. Az irodalom mégis nagy figyelmet szentel neki, mint természetes heurisztikának, amely különösen nagyméretű feladatoknál jó közelítő megoldásokat ad. Az állásidő nélküli ütemezések előállítása általában egy ú.n. prioritási szabályon alapszik. Ilyeneket láttunk egyetlen gép és párhuzamos berendezések esetében, az utóbbinál lista szerinti ütemezés volt a neve. A leggyakrabban alkalmazott szabályok: az SPT sorrend, az LPT sorrend, a legkevesebb megmaradt megmunkálás (LWR), ahol munkánként megvizsgálják a még hátralévő megmunkálások összidejét, és annak a munkának a soron következő megmunkálását választják, ahol az összidő a legrövidebb, a leghosszabb megmaradt megmunkálás (rövidítve MWR) az előzőnek a fordítottja, a hátralévő műveletek maximális száma (MOPRNR), a FIFO sorrend, az EDD sorrend. A második kettő az első kettő általánosításának tekinthető. Általában az a helyzet, hogy ha van egy szabály, akkor annak az ellenkezőjét is használják bizonyos esetekben. Például az említett FIFO sorrend mellett előfordul a LIFO sorrend alkalmazása is. Egy prioritási szabályon alapuló mohó elindítási módszer az alábbi két követelményt teljesíti:1. Ha egy munkadarab megérkezik egy éppen nem dolgozó gép elé, akkor a gép azonnal megkezdi a megmunkálását.2. Ha egy megmunkálás véget ér, akkor a munkadarab azonnal megérkezik a technológiai útvonalban soron következő gép elé. A most felszabaduló gép pedig az előtte várakozó munkadarabok közül a prioritási szabály alapján kiválasztott megfelelő műveletét kezdi meg azonnal. 1.11. példa. Nézzük meg, hogy mit ad a mohó módszer az MWR prioritási szabály alapján a 1.8. példa feladatára. A prioritási szabályhoz felhasználandó értékek műveletenként a következők: Az ütemezés elkészítését az alábbi táblázat foglalja össze. Ha ebben a munkák alatt egyetlen szám található, akkor a munka éppen azon a gépen van. Ha pedig például 1v12 áll egy munka oszlopában, akkor ez azt jelenti, hogy a munka az első gép előtt vár 12 prioritási értékkel. Ha a cél a teljes átfutási idő minimalizálása, akkor ez az eredmény nem olyan jó, mint az optimális megoldásé, de értéke közel van hozzá. Érdemes összehasonlítani a pontos módszereket a fenti heurisztikus módszerekkel. A pontos módszerek az egész termelő rendszerre, ide értve most a termékeket is, vonatkozó teljes információt követelnek meg, hiszen csak így lehet a megfelelő modellt felállítani. Ezzel szemben a mohó módszer valós idejű eljárásnak tekinthető, hiszen mindig csak akkor dönt, azaz választ ki egy műveletet, ha erre szükség van. Ehhez nem használ mást, mint a rendszer pillanatnyi állapotának ismeretét. Tehát teljesen figyelmen kívül hagyja azokat a műveleteket, amelyek az adott pillanatban nem végezhetők el, függetlenül attól, hogy ennek mi az oka, azaz, hogy a megelőző műveletek még nem fejeződtek be, vagy a munkadarab még meg sem érkezett a rendszerbe, és függetlenül attól is, hogy ezek későbbi megjelenése milyen hatást okoz. Ennek megvan az az előnye, hogy azonnal reagálni képesek váratlan eseményekre. Például egy munkadarab meghibásodása esetén az ezen végzendő további műveletek egyszerűen nem jelennek meg, és így nincs szükség az előre elkészített sorrendek átdolgozására. Ez a módszer tulajdonképpen nem más, mint a rendszer működésének szimulációja, ahol az egyes gépek irányítását a műveletek szintjén egy nagyon egyszerű szabály határozza meg. A mohó módszer hátrányaként említhető, hogy egy prioritási szabály bizonyos célokat jól szolgál, ugyanakkor nagyon rossz eredményeket adhat más vonatkozásban. Egy tipikus példa erre, hogy az SPT szabály kiváló az átlagos átfutási idő minél alacsonyabb értéken való tartására, ugyanakkor számos esetben a határidők súlyos megsértéséhez vezet. A többutas probléma kezelésének fenti két megközelítésében külön-külön rejlő nehézségek leküzdésének egy természetes módja a kétszintes modell, ahol a felső szinten a többutas probléma egy diszkrét programozási modellje található. Elképzeléseik szerint ezt a problémát csak ritkán, például naponta vagy hetente oldják meg. Az alatta lévő szinten döntik el gépenként, hogy a gép előtt várakozó műveletek sorából éppen melyiket végezzék el. A felső szint eredményei alapján számolnak költségeket minden művelet minden (diszkrét) időpontban való megkezdésére. Ezek a költségek fejezik ki az alsó szinten az egyes műveletek fontosságát, azaz súlyát. Az éppen elvégzendő műveletnek valamely prioritási szabály szerint első elemét választják. A költségeket pedig ezen feladat optimális Lagrange-szorzói alapján számítják. Gyakorlatok 1.6–1. Mi a 1.45. tétel párja, ami arra ad feltételt, hogy az α műveletnek az M -beli műveletek előtt kell állnia? 1.6–2. Írjuk fel a Pm||Cmax feladat diszjunktív gráf modelljét. Feladatok 1-1. SPT optimalitása Bizonyítsuk be, hogy az SPT sorrend optimális megoldása az 1||Lj feladatnak.1-2. Késésmentes optimális megoldás Bizonyítsuk be, hogy ha az 1|dj|Cj feladatnak van olyan optimális megoldása, amiben nincs késés, akkor ezen megoldásban az α megmunkálás akkor és csak akkor állhat az utolsó helyen, ha dα1npj és minden i:di1npj esetén pαpi . 1-3. Minimális késés maximalizálása Legyen egy 1|dj|f feladat esetén [1],[2],...,[n] olyan sorrend, amelyre teljesül, hogy d[1]p[1]d[2]p[2]d[n]p[n]. Bizonyítsuk be, hogy ez a sorrend maximalizálja a minimális késést. Útmutatás. Vegyük észre, hogy betervezett állásidő használata nem megengedett. Alkalmazzuk a szokásos,,felcseréléses” módszert. 1-4. Legjobb és legrosszabb lista Tegyük fel, hogy m azonos gépünk van, amelyeken 2m1 megmunkálást kell elvégezni. A megmunkálási idők közül egy értéke m, további m1 értéke m1 és még további m1 értéke 1. Adjuk meg a legjobb és a legrosszabb értéket adó listát. 1-5. LPT-korlát élessége Bizonyítsuk be, hogy ha m gép van és a megmunkálási idők 2m1,2m1,2m2,2m2,...,m+1,m+1,m,m,m, akkor tetszőleges m esetén az LPT ütemezés pontossága a 1.23. tételben megadott felső korláttal egyezik meg.1-6. Azonos párhuzamos gépek Általánosítsuk a 9.4-2. gyakorlat eredményét két gép és tetszőleges m mellett a 2m1,2m1,2m2,2m2,...,m+1,m+1,m,m,m megmunkálási idők esetére. 1-7. Kétgépes feladat Bizonyítsuk be, hogy ha az F3||Cmax probléma esetén a minjt1j>maxjt2j és a minjt3j>maxjt2j feltételek legalább egyike teljesül, akkor a feladat optimális megoldása ugyanaz, mint azé a kétgépes feladaté, ahol a megmunkálási idők munkánként t1j+t2j,t1j+t2j.Útmutatás. Alkalmazzuk a 1.34. tétel bizonyításának módszerét. 1-8. Többutas ütemezés Tekintsük a többutas ütemezési feladatot. Bizonyítsuk be, hogy ha M páronként diszjunktív műveletek egy tetszőleges halmaza és α egy további művelet, mely diszjunktív valamennyi M -belivel, végül C>0 egy tetszőleges szám, akkor minβMrβ+βMpβ+pα+qαC esetén α egyetlen olyan ütemezésben sem követheti valamennyi M -beli műveletet, amelyben a teljes átfutási idő kevesebb, mint C.1-9. Diszjunkt gráf modell Tegyük fel, hogy egy, a diszjunktív gráf modellen alapuló eljárás során a konjunktív élek pillanatnyi halmaza B . Tekintsünk egy diszjunktív {(α,β),(β,α)} élpárt, amelyiknek egyik tagja sincs B -ben. Adjunk egyszerű elegendő feltételt arra, hogy az élpár egyik tagjának hozzá vétele se hozzon létre kört a gráfban. 1-10. Többutas probléma célfüggvényei A többutas probléma (1.58)–(1.62) modellje esetén írjuk fel a szükséges feltételek és változók bevezetésével a wjTj és a wjUj célfüggvényeket. Megjegyzések a fejezethez Az ütemezési algoritmusok tulajdonságainak jó összefoglalója Brucker [5] 2002-ben megjelent monográfiája. Az ütemezési feladatok tömör leírásának rendszere Grahamtől [19] és Lawlertől [28] származik. A Gantt-diagramok használatát Henry Laurence Gantt javasolta 1903-ban. Az 1|rj,dj|Lmax feladat esetében már nem ilyen egyszerű a helyzet, mert a probléma teljes általánosságában NP-teljes.A 9.5. tétel forrása [22] [41]. Az SPT sorrend fogalmát Schmidt [42] vezette be. A 1.7. tétel alapjául szolgáló algoritmus megtalálható Lawler cikkében [27]. Az 1.15. és 1.16. tételek a témakör legkorábbi eredményeihez tartoznak és McNaughton cikkében [31] találhatók meg. Az 1.18. tétel bizonyítása Horntól [21] származik. A 1.24. tétel, a 1.25. tételt megelőző elemzés, valamint a 1.27. tétel forrása Coffman, Garey és Johnson cikke [9]. A 1.27. tételben szereplő korlátot Friesen [13] 1.20-ra javította. A módszert magát Friesen és Langston [14] finomították. Ennek a változatnak az ismert hibakorlátja már 72/61+2k. Bár a szükséges műveletek számának nagyságrendje nem változott, az a konstans, amit a nagy ordó tartalmaz, igen nagy. A további munkák közül megemlítjük még Sahni cikkét [38], ahol a korlát 1+1/k, de a műveletek száma O(n(n2k)m1). Igaz továbbá, hogy minden m esetén rm>1 (lásd a feladatot). A P|pmtn,dj|Umax feladatra, vagyis ahol csak a határidőket betartó, megengedett ütemezés megtalálása a feladat, ha ilyen létezik, illetve annak kimutatása, ha nem létezik, Sahni [39] javasolt O(nlognm) futási idejű algoritmust, amely olyan megoldást állít elő (ha van megoldás), amelyben legfeljebb n2 megmunkálást kell megszakítani. Az Umax célfüggvényre vonatkozó, a 1.19. tételhez hasonló állítás Hujter Mihálytól [22] származik. Az első, dinamikus programozással elért ütemezési eredmény Rothkopf [35] nevéhez fűződik. Lawler és társai [28] később egyszerűsítették a Rothkopf által használt képleteket. A C(L)/C* hányadosra vonatkozó első eredményt – a 1.22. tételt – Graham bizonyította 1966-ban [17]. Ugyancsak Grahamtől származik a 1.23. tétel. A ládapakolási algoritmusokra vonatkozó eredmények összefoglalása megtalálható Coffman, Csirik János és Woeginger [10] cikkében. A korlátozás és szétválasztás részletes leírása megtalálható Vizvári Béla jegyzetében [46]. Az egyutas ütemezési problémával részletesen foglalkoznak a [20] [26] [30] [45] [43] [44]dolgozatok. Az egyutas problémának a (1.42) képlethez kapcsolódó változatát Piehler [32] tanulmányozta. A diszjunktív gráf modell először a [37] dolgozatban jelent meg. A (1.47)–(1.50) képletek közvetlenül adódnak [46] 5. fejezete alapján. Az irodalomban ismert alsó korlátok egy nagyon jó összefoglalását adja [25]. A (1.52) korlátot gyengébb formában, a harmadik tag nélkül közli [7]és [40]. Maga a korlát élesíthető a 1.4. tétel alapján. A (1.53) korlát először a [23]cikkben fordult elő, míg (1.54) megfordítása [4]-ben. A 1.45. tétel alapja [6]. A kritikus blokk fogalmát Grabowski [16] vezette be. A kritikus blokkal kapcsolatos további részletek találhatók a [2]dolgozatban. Az egészértékű programozás első modellje [29] alapján terjedt el a szakirodalomban. A másik tárgyalt modell több vonatkozásban általánosabb, és tekintettel tud lenni különböző erőforrásokra is [11] [12]. Ebben a fejezetben csak a modellt tárgyaljuk – a Fisher által javasolt módszer részletesen megtalálható a [46]könyvben. A (1.64)–(1.67) feladat célfüggvényének elemzése [46]7. fejezetéből származik. Az általános egészértékű programozási feladatra vonatkozóan eddig említett módszerek csak szerény méretű feladatokat képesek egzaktul megoldani. [1]még nem számol be számítástechnikai eredményekről. [11]esetében a legnagyobb vizsgált problémában a munkák száma 5, az erőforrásoké 4. [25]mindössze három feladatot oldott meg, melyek közül a legnagyobb esetén a műveletek száma 36 és mind a munkák, mind a gépek száma 6. [2]már tovább növelte a méretet, a pontosan megoldott legnagyobb feladatokban 8 gép és 64 művelet volt. [6]az, amelyben először oldottak meg egy, az irodalomból jól ismert, és állandó kihívást jelentő 10 munkát és 10 gépet tartalmazó feladatot, továbbá ugyanez a dolgozat beszámol számos, a korábbiaknál nagyobb probléma, például 20 munka, 5 gép és számos művelet megoldásáról is. Johnson módszerének a kétgépes, többutas problémára való kiterjesztése Jackson [24] érdeme. A többutas probléma kezelésére Roundy [36] javasolta a kétszintes modellt. Az on-line algoritmusokra vonatkozó eredmények összefoglalása megtalálható ennek a könyvnek a második kötetében. Az ütemezéselmélet egyik fontos alkalmazási területe a számítógépes feladatmegoldás. Ezzel kapcsolatban ajánljuk Blazewicz és társai [3], Coffman [8] és Pinedo [33] [34] monográfiáit. Pinedo két ajánlott könyve a determinisztikus ütemezés mellett a sztochasztikus ütemezés módszereit és eredményeit is tárgyalja. A 1-2. feladat forrása [42], a 1-4. feladat [15]-ból, a 1-5. feladat [18]-ből származik. Irodalomjegyzék [1] E. Balas. Sequencing via disjunctive graphs: an implicit enumeration algorithm . Operation Research, 17:941–953, 1969. [2] J. R. Barker és G. B. McMahon. Scheduling the General Job-Shop . Management Science, 31:594–598, 1985. [3] J. Blazewicz, K. Ecker, E. Pesch, G. Schmidt, és J. Weglarz. Scheduling Computer and Manufacturing Processes . Springer -Verlag, 2001 (2. kiadás). [4] G. Brooks és C. R. White. An algorithm for finding optimal or near optimal solutions to the production scheduling problem . Journal of Industrial Engineering, 16:34–40, 1965. [5] P. Bruckner. Scheduling Algorithms . Springer -Verlag, 1998. [6] J. Carlier és E. Pinson. Algorithm for solving the job-shop problem . Management Science, 35:164–176, 1989. [7] J. Charlton és C. C. Death. A Method of Solution for General Machine Scheduling Problems . Operations Research, 18:689–707, 1970. [8] E. G. Coffman. Computer and Job Shop Scheduling . John Wiley & Sons, 1976. [9] E. G. Coffman, M. Garey, és D. Johnson. An application of bin-packing to multiprocessor scheduling . SIAM Journal on Computing, 7:1–17, 1978. [10] E. G. Coffman, J. Csirik, és G. J. Woeginger. Approximate solutions to bin packing problems . In P. M. Pardalos és M. G. C. Resende, editors, Handbook of Applied Optimization, pages 607–615. Oxford University Press, 2002. [11] M. L. Fisher. Optimal Solution of Scheduling Problems Using Lagrange Multipliers: Part I . Operations Research, 21:1114–1127, 1973. [12] M. L. Fisher. Optimal Solution of Scheduling Problems Using Lagrange Multipliers: Part II, . In S. E. Elmaghraby, szerkesztő, Symposium on the Theory of Scheduling and Its Applications. Springer -Verlag, 1973. [13] D. K. Friesen. Tighter bounds for the multifit processor scheduling algorithm . Journal of Algorithms, 7:35–59, 1984. [14] D. K. Friesen és M. A. Langston. Evaluation of a MULTIFIT-based scheduling algorithm . Journal of Algorithms, 7:35–59, 1986. [15] M. R. Garey és R. L. Graham. Performance Guarantees for Scheduling Algorithm . Operations Research, 26:3–21, 1978. [16] J. Grabowski. On two-machine scheduling with release and due-dates to minimize maximum lateness . Opsearch, 17:133–154, 1980. [17] R. L. Graham. Bounds for certain multiprocessor anomalies . The Bell Systems Technical Journal, 45:1563–1581, 1966. [18] R. L. Graham. Bounds on multiprocessing timing anomalies . SIAM Journal on Applied Mathematics, 17:416–429, 1969. [19] R. L. Graham, E. L. Lawler, J. K. Lenstra, és A. H. G. Rinnoy Kan. Optimization and approximation in deterministic sequencing and scheduling: a survey . Annals of Discrete Mathematics, 5:287–326, 1979. [20] J. N. D. Gupta és S. S. Reddi. Improved dominance conditions for the three-machine flowshop scheduling problem . Operations Research, 26:200–203, 1978. [21] W. A. Horn. Minimizing Average Flow Time with Parallel Machines . Operations Research, 21:845–847, 1973. [22] M. Hujter. Egy ütemezéselméleti probléma vizsgálata és alkalmazásai (Investigation of a scheduling problem and its applications) , 1987. Doktori értekezés, ELTE TTK. [23] J. R. Jackson. Research Report 43, Management Science Research Project, University of California, 1955. [24] J. R. Jackson. An Extension of Johnson’s Results on Job Shop Scheduling . Naval Research Logistics Quaterly, 3:201–224, 1956. [25] B. Lageweg, J. K. Lenstra, és A. Rinnoy Kan. Job-shop scheduling by implicit enumeration . Management Science, 24:441–450, 1977. [26] B. Lageweg, J. K. Lenstra, és A. Rinnoy Kan. A general bounding scheme for the permutation flow-shop problem . Operations Research, 26:53–67, 1978. [27] E. L. Lawler. Optimal sequencing of a single machine subject to precedence constraints . Management Science, 19:544–546, 1973. [28] E. L. Lawler, J. K. Lenstra, A. H. G. Rinnoy Kan, és D. B. Shmoys. Sequencing and Scheduling: Algorithms and Complexity . In S. C. Graves, A. Kan, és P. H. Zipkin, editors, Handbooks in Operations Research and Management Science, Volume 4: Logistics of Production and Inventory, pages 445–522. Elsevier, 1993. [29] A. S. Manne. On the Job-Shop Scheduling Problem . Operations Research, 9:219–223, 1960. [30] G. B. McMahon. Optimal production schedules for flow shops . Canadian Operation Research Society Journal, 7:141–151, 1969. [31] R. McNaughton. Scheduling with deadlines loss functions . Management Science, 6:1–12, 1959. [32] J. Piehler. Ein Beitrag zum Reihenfolgeproblem, Unternehmensforschung . Unternehmerforschung, 4:138–142, 1960. [33] M. Pinedo. Scheduling: Theory, Algorithms and Systems . Pearson Education, 2001 (2. kiadás). [34] M. Pinedo. Planning and Scheduling in Manufacturing and Services . Springer -Verlag, 2004 (megjelenőben). [35] M. H. Rothkopf. Scheduling independent tasks on parallel machines . Management Science, 12:437–447, 1966. [36] R. O. Roundy, W. L. Maxwell, Y. T. Herer, S. R. Tayur, és A. W. Getzler. A Price-Directed Approach of Production Operations . IIE Transactions, 23:149–160, 1991. [37] B. Roy és B. Sussmann. Les Problémes d’Ordonnuncement avec Contraintes Disjonctives . Note DS no. 9 bis, SEMA, 1964. [38] S. Sahni. Algorithms for scheduling independent tasks . Journal of the ACM, 23:116–127, 1976. [39] S. Sahni. Preemptive Scheduling with Due Dates . Operations Research, 27:929–934, 1979. [40] L. Schrage. Solving Resource-Constrained Network Problems by Implicit Enumeration . Operations Research, 18:263–278, 1970. [41] L. Schrage. Obtaining optimal solutions to resource constrained network scheduling problems , 1971. Publikálatlan kézirat. [42] W. Smith. Various optimizers for single-stage production . Naval Research Logistics Quaterly, 3:59–66, 1956. [43] W. Szwarc. Optimal elimination methods in the m×n sequencing problem . Operations Research, 21:1250–1259, 1973. [44] W. Szwarc. Dominance conditions for the three-machine flow-shop problem . Operations Research, 26:203–206, 1978. [45] W. Szwarc. Elimination methods in the m×n sequencing problem . CWI Quarterly, 18:295–305, 1971. [46] B. Vizvári. Egészértékű programozás . ELTETTK, 1990. Tárgymutató A, Áállásidő általános párhuzamos gépek átfutási idő átlapolás , * Dduál feladat (az egyutas ütemezési problémáé) E, ÉEDD , * EDD, lásd legkorábbi határidő egyutas ütemezési probléma , * előzéses egyutas ütemezési probléma előzésnélküli egyutas ütemezési probléma erőforrás , * FFF FF, lásd mohó ládapakolási algoritmus FIFO sorrend Ggép Hhasonló párhuzamos gépek határidő I, Íirreguláris célfüggvény Kkapacitás Lládapakolási probléma leghosszabb megmunkálási idő legkevesebb megmaradt megmunkálás legkisebb megmunkálási idő legkorábbi határidők sorrendje legrövidebb megmaradt megmunkálási idők legrövidebb megmunkálási idő LIFO sorrend listás ütemezés LPT, lásd leghosszabb megmunkálási idő LPT sorrend , * , * , * Mmegmunkálási idő megszakítás MF algoritmus , * MF ládapakolási algoritmus MOHÓ mohó ládapakolási eljárás munkadarab művelet MWKR sorrend O, Óon-line ütemezési feladat Pprogram puha határidő Rraktározás reguláris célfüggvény rendelkezésre állási idő Ssorozat , * SPT , * , * , * , * , * , * súlyozott legrövidebb megmunkálási idők SWPT, lásd súlyozott legrövidebb megmunkálási idők sorrendje SWPT sorrend SZszállítás Ttechnológiai útvonal tényleges határidő termelési feladat tevékenység többutas ütemezési probléma , * Névmutató BBellman, Richard Blazewicz, Jacek CCoffman, Ed G., Jr. , * CSCsirik János FFisher, M. L. Friesen, D. K. GGantt, Henry Laurence Garey, Michael R. Grabowski, J. Graham, Ronald Lewis HHorn, W. A. JJackson, J. R. Johnson, David S. LLagrange, Joseph-Luis (1736–1813) , * Langston, M. A. Lawler, Eugene L. , * MMcNaughton, R. PPiehler, J. Pinedo, Michael RRothkopf, M. H. SSahni, Sartaj VVizvári Béla