Korlátozás és szétválasztás elve. ADAGOLO adattípus

Hasonló dokumentumok
Amortizációs költségelemzés

Kupac adatszerkezet. A[i] bal fia A[2i] A[i] jobb fia A[2i + 1]

1. ábra. Egy rekurzív preorder bejárás. Egy másik rekurzív preorder bejárás

Általános algoritmustervezési módszerek

Rakov(34125)= Rakov(12543)= Rakov(14532)= Rakov(54321)=-

Az B sorozatban a pontok helyes preorder sorrendben vannak. A preorder bejárásban p k -t közvetlenül q m követi.

... fi. ... fk. 6. Fabejáró algoritmusok Rekurzív preorder bejárás (elsőfiú-testvér ábrázolásra)

Kupac adatszerkezet. 1. ábra.

Programozási módszertan. Mohó algoritmusok

Rakov(34125)= Rakov(12543)= Rakov(14532)= Rakov(54321)=-

angolul: greedy algorithms, románul: algoritmi greedy

Partíció probléma rekurzíómemorizálással

Az optimális megoldást adó algoritmusok

Algoritmizálás, adatmodellezés tanítása 8. előadás

Mohó algoritmusok. Példa:

Korlátozás és szétválasztás módszere Holló Csaba 2

Megoldás meghatározása Ez a szakasz kitölti a c és S táblázatokat, a kiíratás S alapján egy rekurzív algoritmussal megtehető.

Ütemezési feladatok. Az ütemezési feladatok vizsgálata az 50-es évek elején kezdődött, majd

Online migrációs ütemezési modellek

2017/ Szegedi Tudományegyetem Informatikai Intézet

Miskolci Egyetem Gépészmérnöki és Informatikai Kar Informatikai Intézet Alkalmazott Informatikai Intézeti Tanszék

7 7, ,22 13,22 13, ,28

út hosszát. Ha a két várost nem köti össze út, akkor legyen c ij = W, ahol W már az előzőekben is alkalmazott megfelelően nagy szám.

Ütemezési modellek. Az ütemezési problémák osztályozása

Algoritmuselmélet. Katona Gyula Y. Számítástudományi és Információelméleti Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem. 13.

Branch-and-Bound. 1. Az egészértéketű programozás. a korlátozás és szétválasztás módszere Bevezető Definíció. 11.

Példa Hajtsuk végre az 1 pontból a Dijkstra algoritmust az alábbi gráfra. (A mátrixban a c i j érték az (i, j) él hossza, ha nincs él.

Ütemezési problémák. Kis Tamás 1. ELTE Problémamegoldó Szeminárium, ősz 1 MTA SZTAKI. valamint ELTE, Operációkutatási Tanszék

Hátizsák feladat. Példa: A tárgyak (súly, fontosság) párokban (4,6) (3,5) (2,3) (2,3) a hátizsák kapacitása 8.

Melykeres(G) for(u in V) {szin(u):=feher Apa(u):=0} for(u in V) {if szin(u)=feher then MBejar(u)}

Fibonacci számok. Dinamikus programozással

Algoritmusok bonyolultsága

Algoritmizálás. Horváth Gyula Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Gyakori elemhalmazok kinyerése

Példa 30 14, 22 55,

Hátizsák feladat. Példa: A tárgyak (súly, fontosság) párokban (4,6) (3,5) (2,3) (2,3) a hátizsák kapacitása 8.

Számláló rendezés. Példa

9. előadás. Programozás-elmélet. Programozási tételek Elemi prog. Sorozatszámítás Eldöntés Kiválasztás Lin. keresés Megszámolás Maximum.

Példa. Job shop ütemezés

Operációkutatás példatár

álló algoritmusosztályok. Approximációs algoritmusoknak egy olyan algoritmust. Minden algoritmusnak polinomiális idejűnek kell

9. Megoldás keresése visszalépéssel (backtracking)

11. Előadás. 11. előadás Bevezetés a lineáris programozásba

Dr. habil. Maróti György

8. Előadás. Megyesi László: Lineáris algebra, , oldal. 8. előadás Mátrix rangja, Homogén lineáris egyenletrendszer

Online algoritmusok. Algoritmusok és bonyolultságuk. Horváth Bálint március 30. Horváth Bálint Online algoritmusok március 30.

9. Előadás. Megyesi László: Lineáris algebra, oldal. 9. előadás Mátrix inverze, Leontyev-modell

Approximációs algoritmusok

Példa Hajtsuk végre az 1 pontból a Dijkstra algoritmust az alábbi gráfra. (A mátrixban a c i j érték az (i, j) él hossza, ha nincs él.

További forgalomirányítási és szervezési játékok. 1. Nematomi forgalomirányítási játék

Algoritmuselmélet. Mélységi keresés és alkalmazásai. Katona Gyula Y.

Ugrólisták. RSL Insert Example. insert(22) with 3 flips. Runtime?

A lineáris programozás alapfeladata Standard alak Az LP feladat megoldása Az LP megoldása: a szimplex algoritmus 2018/

Algoritmusok és adatszerkezetek II.

A lineáris programozás alapfeladata Standard alak Az LP feladat megoldása Az LP megoldása: a szimplex algoritmus 2017/

Algoritmusok és adatszerkezetek gyakorlat 07

9. Előadás. Megyesi László: Lineáris algebra, oldal. 9. előadás Mátrix inverze, mátrixegyenlet

2. Visszalépéses stratégia

Felvételi vizsga mintatételsor Informatika írásbeli vizsga

Minimális feszítőfák Legyen G = (V,E,c), c : E R + egy súlyozott irányítatlan gráf. Terjesszük ki a súlyfüggvényt a T E élhalmazokra:

1/ gyakorlat. Lineáris Programozási feladatok megoldása szimplex módszerrel. Pécsi Tudományegyetem PTI

8. Mohó algoritmusok Egy esemény-kiválasztási probléma. Az esemény-kiválasztási probléma optimális részproblémák szerkezete

Miskolci Egyetem Gépészmérnöki és Informatikai Kar Informatikai Intézet Alkalmazott Informatikai Intézeti Tanszék

Elmaradó óra. Az F = (V,T) gráf minimális feszitőfája G-nek, ha. F feszitőfája G-nek, és. C(T) minimális

Sorozatok határértéke SOROZAT FOGALMA, MEGADÁSA, ÁBRÁZOLÁSA; KORLÁTOS ÉS MONOTON SOROZATOK

Dinamikus programozás vagy Oszd meg, és uralkodj!

Módosítható Prioritási sor Binomiális kupaccal. Wednesday, March 21, 12

Egyesíthető prioritási sor

1/ gyakorlat. Lineáris Programozási feladatok megoldása szimplex módszerrel. Pécsi Tudományegyetem PTI

Adaptív dinamikus szegmentálás idősorok indexeléséhez

1. Előadás Lineáris programozás

A MAXIMUM-KUPACOL eljárás helyreállítja az A[i] elemre a kupactulajdonságot. Az elemet süllyeszti cserékkel mindaddig, amíg a tulajdonság sérül.

A Verem absztrakt adattípus

Edényrendezés. Futási idő: Tegyük fel, hogy m = n, ekkor: legjobb eset Θ(n), legrosszabb eset Θ(n 2 ), átlagos eset Θ(n).

Analízis előadás és gyakorlat vázlat

A számítástudomány alapjai. Katona Gyula Y. Számítástudományi és Információelméleti Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem

end function Az A vektorban elõforduló legnagyobb és legkisebb értékek indexeinek különbségét.. (1.5 pont) Ha üres a vektor, akkor 0-t..

Diszkrét, egészértékű és 0/1 LP feladatok

Tuesday, March 6, 12. Hasító táblázatok

Számjegyes vagy radix rendezés

Melykeres(G) for(u in V) {szin(u):=feher Apa(u):=0} for(u in V) {if szin(u)=feher then MBejar(u)}

Algoritmuselmélet. Katona Gyula Y. Számítástudományi és Információelméleti Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem. 12.

2018, Diszkrét matematika

Függvények növekedési korlátainak jellemzése

A 2016/2017 tanévi Országos Középiskolai Tanulmányi Verseny első forduló javítási-értékelési útmutató. INFORMATIKA II. (programozás) kategória

GRÁFELMÉLET. 7. előadás. Javító utak, javító utak keresése, Edmonds-algoritmus

Döntéselőkészítés. VII. előadás. Döntéselőkészítés. Egyszerű Kőnig-feladat (házasság feladat)

Programozási segédlet

Számítógépes döntéstámogatás. Genetikus algoritmusok

Egyesíthető prioritási sor

További programozási esetek Hiperbolikus, kvadratikus, integer, bináris, többcélú programozás

Operációkutatás vizsga

bármely másikra el lehessen jutni. A vállalat tudja, hogy tetszőlegesen adott

Gráfok, definíciók. Gráfok ábrázolása. Az adott probléma megoldásához ténylegesen mely műveletek szükségesek. Ábrázolások. Példa:

Hálózati Folyamok Alkalmazásai. Mályusz Levente BME Építéskivitelezési és Szervezési Tanszék

FÜGGVÉNYTANI ALAPOK A) ÉRTELMEZÉSI TARTOMÁNY

A félév során előkerülő témakörök

2. Visszalépéses keresés

Dinamikus programozás - Szerelőszalag ütemezése

BASH script programozás II. Vezérlési szerkezetek

Átírás:

Korlátozás és szétválasztás elve ADAGOLO adattípus Értékhalmaz: E Adagolo : A E Műveletek: A : Adagolo, x : E {Igaz} Letesit(A) {A = /0} {A = A} Megszuntet(A) {Igaz} {A = A} Uresit(A) {A = /0} {A = A} Betesz(A,x) {A = Pre(A) {x}} {A /0} Kivesz(A,x) {x Pre(A) Pre(A) = A {x}} {A = A} Elemszam(A) {Elemszam = A } Közös általánosítása a sornak, veremnek és prioritási sornak. Teszőleges kivételi szabállyal lehet egy speciális adattípust kapni belőle. Korlátozó függvény Egy általános algoritmust adunk meg, ami egy minimalizálási problémán működik, ahol z a célfüggvény. Az algoritmus használ egy AK korlátozó függvényt, amelyre a következő tulajdonság teljesül. Minden X pontjára a megoldástért leíró fának fennáll, hogy AK(X) z(y ) az összes Y megoldásra, amely leszármazottja X-nek a fában. Az AK függvény azért hasznos, mert amennyiben már van egy megoldásunk, aminek a célfüggvényértéke OP- TERT, akkor azokat a részfákat,a melyek X gyökerére AK(X) OPT ERT nem kell bejárnunk, mert biztosan nem tartalmaznak jobb megoldást. KorlatValaszt(F) OPT:=Nil OPTERT:=Inf Letesit(A:Adagolo) If F=Nil Then return //Üres fa If Megoldas(F) Then If z(f)<optert Then OPTERT:=z(F), OPT:=F Betesz(A,F) While(Elemszam(A)!=0) Kivesz(A,F) p:=f.elsofiu While (p!=nil) // a gyerekeken sorbamenve If Megoldas(p) Then If z(p)<optert //ha jobbat talál Then OPTERT:=z(p), OPT:=p If (LehetMego(p) and AK(p)<OPTERT) Then Betesz(A,p) //ha nem zár ki p:=p.testver Return(OPT) 1

A feladatspecifikus algoritmushoz a következő részletek megadása szükséges megoldástér és az azt leíró fa korlátozó függvény (hatékonyan számítható, de elég éles) az adagoló kivételi szabályának megadása Az algoritmus gyorsítása A korlátozó függvény hatékonysága attól is függ mennyire jó az aktuálisan ismert legjobb megoldásunk az OPT változóban. Így az algoritmus gyorsítása érdekében szokás az egész eljárást egy heurisztikus algoritmussal kezdeni, és az általa kapott lehetséges megoldást elhelyezni az OPT változóban. Bizonyos alkalmazásokban előfordulhat, hogy az alsó korlát számítása során egyéb (a vizsgált ponttól különböző) lehetséges megoldást is meghatározunk. Ilyenkor szokás, ezeket a megoldásokat is felhasználni az aktuálisan ismert legjobb megoldás javítására. Szétválasztási függvény A korlátozás és szétválasztás módszerét gyakran egy korlátozó függvény és egy szétválasztó függvény által definiálják. A szétválasztó függvény a megoldástér részhalmazain definiált. Minden részhalmazhoz az adott halmaz egy partícióját rendeli hozzá. A szétválasztási függvény a megoldástér fa reprezentációjának felel meg. A szétválasztási függvényből a következőképpen kapjuk meg a megoldástért leíró fát. A részhalmazok a fa részfáinak felelnek meg, egy adott részhalmaz felbontása a neki megfelelő részfa további részfákra bontását jelenti. Optimális pénzváltás Az optimális pénzváltási problémában adottak p 1,..., p n pénzérmék és egy E összeg, a feladat kiválasztani az érmék egy minimális elemszámú S halmazát, amelyre teljesül, hogy i S p i = E. A megoldástér pontjait (a pénzek részhalmazát) a pénzek indexeinek az S {1,...,n} halmazának X = (i 1,...,i k ) növekvő felsorolásáként reprezentáljuk. Ekkor a bejáráshoz használt függvények Apa(i 1,...,i k 1,i k ) = (i 1,...,i k 1 ), ha k 1 és Nil egyébként. A LehetMego, Megoldás és AK függvényeket a következőképpen kaphatjuk meg. A LehetMego függvény megadja, ha az eddig meghozott döntéseket nem lehet kiegészíteni egy felbontássá, vagy azért mert már nagyobb összeget választottunk, vagy azért mert minden további elemet kiválasztva sem érhetjük el E-t. Tehát LehetMego(i 1,...,i k ) = True akkor és csak akkor, ha k p i j E k p i j + n p j E. j=i k +1 Továbbá Megoldas(i 1,...,i k ) = True akkor és csak akkor, ha k p i j = E Az AK függvény meghatározásához feltesszük, hogy a pénzérmék érték szerint nemnövekvő sorrendbe vannnak rendezve. Ekkor 2

k AK(i 1,...,i k ) = k + (S p i j )/p ik +1. Példa A váltópénzek 5, 4, 4, 2, 1 a felváltandó összeg 8. Az ADAGOLO egy felső korlát szerinti minimumos prioritási sor. A két db 4 forintost megkülönböztetjük, az egyiket, amelyiket a sorban előre vesszünk 4 jelöli. Az ADAGOLO-ba az (5), (4 ) megoldáskezdemények kerülnek be. Ekkor OPT ERT (legjobb ismert megoldás) értéke végtelen. Az ADAGOLO-ban a függvényértékek AK((5)) = 1 + (8 5)/4 = 2, FK((5)) = 1 + (8 5)/1 = 4 AK((4 )) = 1 + (8 4)/4 = 2, FK((4 )) = 1 + (8 4)/1 = 5. Az FK szerinti minimumos sor az (5) kezdeményt adja ki. Az ADAGOLO-ba az (5,2) megoldáskezdemény kerül be. Erre AK((5,2)) = 2+ (8 7)/1 = 3, FK((5,2)) = 1 + (8 7)/1 = 3. Az FK szerinti minimumos sor az (5,2) kezdeményt adja ki. Az ADAGOLO-ba egyetlen megoldáskezdemény kerül be az (5,2,1), erre AK(5,2,1) = FK(5,2,1) = 3, és találtunk egy megoldást. Az aktuális optimális megoldás (5,2,1) a hozzá tartozó GFK érték 3. Az FK szerinti minimumos sor az (5,2,1) kezdeményt adja ki, nem kerül új elem az ADAGOLO-ba. Az FK szerinti minimumos sor a (4 ) kezdeményt adja ki. Az ADAGOLO-ba egyetlen megoldáskezdemény kerül be (4 4), találunk egy megoldást a (4,4) megoldást. Ezt megjegyezzük, és GFK = 2. Az FK szerinti minimumos sor az (4,4) kezdeményt adja ki, nem kerül új elem az ADAGOLO-ba. Az ADAGOLO üres, az eljárás véget ér. Maximum feladatok Ha maximum feladatunk van, akkor lehet a célfüggvény -1-szeresét vizsgálni, de megadható az algoritmus maximum feladatra is. A különbség, hogy egy FK felső korlátot kell számolni a pontokra, és azok az ágak zárhatóak le, ahol a felső korlát kisebb, mint OPTERT. KorlatValaszt(F) OPT:=Nil OPTERT:=-Inf Letesit(A:Adagolo) If F=Nil Then return //Üres fa If Megoldas(F) Then If z(f)>optert Then OPTERT:=z(F), OPT:=F Betesz(A,F) While(Elemszam(A)!=0) Kivesz(A,F) p:=f.elsofiu 3

While (p!=nil) // a gyerekeken sorbamenve If Megoldas(p) Then If z(p)>optert //ha jobbat talál Then OPTERT:=z(p), OPT:=p If (LehetMego(p) and FK(p)>OPTERT) Then Betesz(A,p) //ha nem zár ki p:=p.testver Return(OPT) Profit maximalizáló ütemezés A feladatban munkákat kell ütemezni, minden munkának van egy határideje, egy végrehajtási ideje és egy profitja. A cél a lehető legtöbb összprofitot elérő munkát elvégezni a határidők betartásával. Lemma: Ha egy munkahalmaznak van határidőt tartó ütemezése, akkor az az ütemezés is tartja a határidőt, amely a munkákat növekvő határidő szerint hajtja végre. Bizonyítás Vegyük a halmaznak azt a határidő tartó megoldást, amelynek a leghosszabb kezdőszelete határidő szerint növekvő. Ha nem a teljes halmaz határidő szerinti, akkor az első eltérésnél hozzuk előre azt a j munkát, amelynek a legkorábbi a határideje. Az így kapott sorrend is határidőt tartó, mivel a hátrább kerülő munkák legkésőbb j eredeti befejezési idejében fejeződnek be, ami kisebb, mint j határideje, így kisebb az adott munka határidejénél is. Következésképpen feltehetjük, hogy a kiválasztott munkahalmazt mindig növekvő határidő szerint ütemezzük, és feltesszük azt is, hogy eleve ilyen sorrendben lettek megadva. Ekkor a megoldástérben csak a munkák részhalmazait kell vizsgálni. Így a megoldástér pontjait a munkák indexeinek olyan S {1,...,n} halmazának X = (i 1,...,i k ) növekvő felsorolásáként reprezentáljuk. A bejáráshoz használt függvények Apa(i 1,...,i k 1,i k ) = (i 1,...,i k 1 ), ha k 1 és Nil egyébként. A LehetMego függvény megadja, hogy az eddig kiválasztott munkák határidő szerinti sorrendben tartják- e a határidőket. Azaz LehetMego(i 1,...,i k ) akkor és csak akkor igaz, ha j = 1,...,k esetén j r=1 i r.vegreha jtido i j.hatarido. Az FK korlátozó függvényhez feltesszük, hogy minden még nem eldöntött munkát ütemezünk, így FK(i 1,...,i k ) = ( k r=1 i r.pro f it + n r=i k +1 i r.pro f it). Hátizsák feladat Egy adott hátizsákba tárgyakat akarunk pakolni. Adott n tárgy minden tárgynak van egy fontossági értéke ( f [i]), és egy súlya (s[i]), a hátizsákba maximum összesen S súlyt pakolhatunk. Szeretnénk úgy választani tárgyakat, hogy az összfontosság maximális legyen. Tehát feladatunk, hogy kiválasszuk a tárgyaknak olyan halmazai közül, amelyekre az összsúly nem haladja meg S-t azt, amelyre maximális az összfontosság. A megoldás itt is az elemek egy részhalmaza, így a megoldástér pontjait (a tárgyak részhalmazát) a tárgyak indexeinek az S {1,...,n} halmazának X = (i 1,...,i k ) növekvő felsorolásáként reprezentálhatjuk. Ekkor a bejáráshoz használt függvények 4

Apa(i 1,...,i k 1,i k ) = (i 1,...,i k 1 ), ha k 1 és Nil egyébként. Korlátozó függvény A megoldástér egy adott X = (i 1,...,i k ) pontjában az adott részfában az 1,...,i k tárgyakra már meghoztuk a döntést. Az eddig elért haszon k f i j a felhasznált súly a kapacitásból k s i j, így a hátralevő (i k +1,...,n) tárgyakhoz S k s i j kapacitás marad. Következésképpen ahhoz, hogy a részfában az optimális megoldást megtaláljuk meg kell oldanunk egy kisebb hátizsák feladatot. A hátizsák feladat megoldása helyett egy relaxált változatot oldunk meg a töredékes hátizsák feladatot, amelyben a tárgyaknak részeit is be lehet rakni a hátizsákba, ez nyilvánvalóan felső korlátot ad az eredeti feladat optimális célfüggvényértékére. Másrészt ez a korlátozó függvény hatékonyan számítható, mivel a mohó algoritmus (ami haszon/súly érték alapján veszi be a tárgyakat) optimális megoldást ad rá. Érdemes megjegyezni, hogy ez a függvény speciális esete annak a gyakran használt módszernek, ahol egy egészértékű programozási feladat helyett, azt a lineáris programozási feladatot használjuk korlátnak, ahol nem kötjük ki, hogy a változók egészek. Példa Vegyük a hátizsák problémát, ahol tárgyak (súly, fontosság) párokban A = (4,6) B = (3,5) C = (2,3) D = (2,3) a hátizsák kapacitása 8. Adagolóként felső korlát szerinti maximum prioritási sort használunk. Az ADAGOLO-ba az (A), (B) megoldáskezdemények, akik egyben megoldások kerülnek be. Ekkor a OPT ERT (legjobb ismert megoldás) 6. Amikor a (C) és (D) megoldáskezdeményeket vizsgáltuk OPT ERT FK(C) és OPT ERT FK(D) állt fenn, így nem kerültek be. Az ADAGOLO-ban a korlátozó függvények FK((A)) = 6 + 5 + 3/2 = 25/2, FK((B)) = 5 + 3 + 3 = 11. Az FK szerinti maximumos sor az (A) kezdeményt adja ki. Az (A,B) megoldás, így OPT ERT = 6 + 5 = 11. Az aktuális optimális megoldást felülírjuk. Bekerül az ADAGOLO-ba. A korlát FK((A,B)) = 6 + 5 + 3/2 = 25/2. Az (A,C) megoldás, és FK(A,C) = 6+3+3 OPT ERT, így bekerül az ADAGOLO-ba. A korlátok FK((A,C)) = 12. Az FK szerinti maximumos sor az (A,B) kezdeményt adja ki. A fiúkra (A,B,C) és (A,B,D) nem LEHETMEGO, így nem kerülnek be az ADAGOLO-ba. Az FK szerinti maximumos sor az (A,C) kezdeményt adja ki. A fia (A,C,D) megoldás, így OPT ERT = 6+3+3 = 12. Az aktuális optimális megoldást felülírjuk, a megoldás bekerül az ADAGOLO-ba. Az FK szerinti maximumos sor az (A,C,D) majd a (B) kezdeményeket adja ki, mindkettőre az FK érték nem nagyobb, mint OPT ERT. Az ADAGOLO üres, az eljárás véget ér. 5