Iványi Antal alkotó szerkeszt INFORMATIKAI ALGORITMUSOK

Méret: px
Mutatás kezdődik a ... oldaltól:

Download "Iványi Antal alkotó szerkeszt INFORMATIKAI ALGORITMUSOK"

Átírás

1 Iványi Antal alkotó szerkeszt INFORMATIKAI ALGORITMUSOK mondat Kiadó Vác, 2013

2 A könyv a Nemzeti Kulturalis Alap támogatásával készült. Alkotó szerkeszt : Iványi Antal Szerz k: Mira-Cristiana Anisiu (35. fejezet), Bacsárdi László (38. fejezet), Domoszlai László (39. fejezet), Galambos Máté (38. fejezet), Gombos Gerg (41. fejezet) Gregorics Tibor (32. fejezet) Imre Sándor(38. fejezet), Iványi Antal (33., 34. és 36. fejezet), Kása Zoltán, Muhammad Ali Khan (34. fejezet) Kiss Attila (40. és 41. fejezet) Kósa Balázs (40. fejezet), Matuszka Tamás (40. fejezet), Pinczel Balázs (40. fejezet), Shariefuddin Pirzada (33. és 34. fejezet), Rácz Gábor (41. fejezet) Szécsi László (37. fejezet), Szidarovszky Ferenc (39. fejezet), Szirmay-Kalos László (37. fejezet), Lektorok: Antal György (37. fejezet), Blázsik Zoltán (35. fejezet), Kása Zoltán (33., 34.és 36. fejezet), Kátai Zoltán (32. fejezet), Iványi Anna Barbara (Irodalomjegyzék) Iványi Antal (38. fejezet), Molnár Sándor (39. fejezet), Sidló Csaba István (40. és 41. fejezet) c 2013 Mira-Cristiana Anisiu, Bacsárdi László, Domoszlai László, Gombos Gerg, Gregorics Tibor, Imre Sándor, Iványi Antal, Kása Zoltán, Muhammad Ali Khan, Kiss Attila, Kósa Balázs, Matuszka Tamás, Pinczel Balázs, Shariefuddin Pirzada, Rácz Gábor, Szécsi László, Szidarovszky Ferenc, Szirmay-Kalos László ISBN: mondat kiadó, 2600, Vác, Nádas utca 6. Nyomás és kötés: mondat Nyomdaipari és Szolgáltató Kft.

3 Tartalomjegyzék El szó Bevezetés a 3. kötethez VII. DISZKRÉT MÓDSZEREK Heurisztikus gráfkeres algoritmusok (Gregorics Tibor) Útkeresési feladatok Általános gráfkeres algoritmus Tulajdonságok Nevezetes kiértékel függvények Nem-informált gráfkeresések Heurisztika a gráfkeresésben Az A algoritmus család A algoritmus A algoritmus A c algoritmus Az A algoritmus hatékonyságának elemzése Memória igény Különböz heurisztikájú A algoritmusok memória igényének összehasonlítása Az A algoritmus memória igényének összehasonlítása más útkeres algoritmusokéval Futási id Összehasonlítás-alapú rangsorolás (Iványi Antal) Bevezetés a szuperversenyekhez Bevezetés az (a, b)-versenyekhez El írt pontsorozattal rendelkez (1, 1)-versenyek létezése El írt pontsorozattal rendelkez (a, b)-versenyek l tezése Tetsz leges pontsorozattal rendelkez verseny létezése Naiv helyreállító algoritmus e kiszámítása El írt pontsorozattal rendelkez (a, a)-versenyek létezése Ponthalmazok és királyok (Shariefuddin Pirzada, Iványi Antal, Muhammad Ali Khan)

4 1588 Tartalomjegyzék 35. Szavak bonyolultsága (Kása Zoltán, Mira-Cristiana Anisiu) Egyszer bonyolultsági mértékek Véges szavak Végtelen szavak Szógráfok De Bruijn-gráfok Rauzy-gráfok Szavak bonyolultsága Részszóbonyolultság Maximális bonyolultság Globális maximális bonyolultság Teljes bonyolultság Általános bonyolultsági mértékek Szivárvány szavak A d 1 = 1 eset A d 2 = n 1 eset Tetsz leges szavak Palindrombonyolultság Véges szavak palindromjai Teljes bonyolultság Végtelen szavak palindromjai Tökéletes tömbök (Iványi Antal) VIII. PÁRHUZAMOS MÓDSZEREK GPGPU: Számítások grakus processzorokon (Szirmay- Kalos László, Szécsi László) A grakus cs vezeték modellje A GPU mint az inkrementális képalkotás megvalósítása 1698 Tesszelláció A csúcspontárnyaló A geometria-árnyaló Vágás Raszterizáció lineáris interpolációval A pixelárnyaló Kompozitálás GPGPU a grakus cs vezeték modelljének felhasználásával A kimenet A bemenet Függvények és paramétereik

5 Tartalomjegyzék A GPU mint vektorprocesszor A SAXPY BLAS függvény megvalósítása Képsz rés A vektorfeldolgozáson túl SIMD vagy MIMD Redukció Szórás Párhuzamosság vagy újrafelhasználás A GPGPU programozási modell: CUDA és OpenCL Mátrix-vektor szorzás A mátrixvektor szorzás további párhuzamosítása Esettanulmány: Számítógépes áramlásdinamika Az áramlásdinamika euleri megoldása Advekció Diúzió A küls er tér Vetítés Euleri szimuláció a GPU-n A dierenciálegyenletek lagrange-i megoldása Lagrange-i megoldás a GPU-n Quantumalapú algoritmusok (Bacsárdi László, Galambos Máté, Imre Sándor) IX. GYAKORLATI MÓDSZEREK Koniktushelyzetek kezelése (Szidarovszky Ferenc, Domoszlai László) Többcélú programozás alapjai Hasznossági függvények alkalmazása Súlyozásos módszer Távolságfügg módszerek Irányfügg módszerek Egyensúlypontok módszere Kooperatív játékok módszerei Csoportos döntéshozatal Pareto-játékok alkalmazása Axiomatikus módszerek A Szemantikus Web lekérdez nyelvei (Pinczel Balázs, Kósa Balázs, Matuszka Tamás, Kiss Attila) Szemantikus adatok RDF reprezentáció

6 1590 Tartalomjegyzék SPARQL lekérdez nyelv Szintaxis Szemantika A SPARQL lekérdez nyelv bonyolultsági kérdései And és Filter m veletek And, Filter és Union m veletek Az Opt m velet Az unió-normálforma Jól tervezett SPARQL lekérdezések A SPARQL optimalizálása Algebrai optimalizálás Szemantikus optimalizálás A Szemantikus Web alkalmazásai (Rácz Gábor, Gombos Gerg, Kiss Attila) A SPARQL kiértékelése MapReduce módszerrel Adatok tárolása Bemeneti fájl kiválasztása GenerateBestPlan algoritmus Alkalmazás közösségi hálók elemzésére Közösségi hálózatok reprezentálása RDF segítségével Közösségi hálók lekérdezése és transzformálása Csoportok kiválasztása hatékonyan Közösségi hálózatok lekérdezése MapReduce módszerrel 1822 Többszörös összekapcsolás Kiválasztó összekapcsolás Lekérdezésterv generálás Színes ábrák fejezet színes ábrái fejezet színes ábrái Irodalomjegyzék Tárgymutató Névmutató

7 El szó Nagy örömmel ajánlom az Olvasók gyelmébe az Informatikai algoritmusok cím tankönyvet, Iványi Antal gondos szerkesztésében. A számítógépes algoritmusok az informatika igen fontos és igen gyorsan fejl d területét alkotják. Hatalmas hálózatok tervezése és üzemeltetése, nagyméret tudományos számítások és szimulációk, gazdasági tervezés, adatvédelmi módszerek, titkosítás és még sok más alkalmazás igényel hatékony, gondosan tervezett és pontosan elemzett algoritmusokat. Sok évvel ezel tt Gács Péterrel írtunk egy kis könyvecskét [74] Algoritmusok címmel. Az Informatikai algoritmusok két kötete mutatja, hogy milyen sokrét és szerteágazó területté fejl dött ez a téma. Külön örömet jelent, hogy a magyar informatika ilyen sok kiváló képvisel je fogott össze, hogy ez a könyv létrejöjjön. Nyilvánvaló számomra, hogy diákok, kutatók és alkalmazók egyik legfontosabb forrásmunkája lesz hosszú ideig. Budapest, november Lovász László

8 Bevezetés a 3. kötethez A harmadik kötet 3 részt és 10 fejezetet tartalmaz. A Diszkrét módszerek cím VII. rész Gregorics Tibor (ELTE IK) Heurisztikus gráfkeres algoritmusok cím 32. fejezetével kezd dik. Az Összehasonlítás-alapú rangsorolás cím 33. fejezetet Iványi Antal (ELTE IK) és Shariefuddin Pirzada (Kashmir University), a Szavak bonyolultsága cím 35. cím fejezetet Kása Zoltán (Sapientia Erdélyi Magyar Tudományegyetem) és Mira-Cristiana Anisiu (Tiberiu Popovici Institute of Numerical Mathematics), a Tökéletes tömbök cím 36. fejezetet Shariefuddin Pirzada (University of Kashmir), Iványi Antal (ELTE IK) és Muhammad Ali Khan (King Fahd University, Saud-Arabia)) írta. A Párhuzamos módszerek cím VIII. részben Szirmay-Kalos László és Szécsi László (mindkett BME VIK) Általános célú grakai processzorok cím??., valamint Bacsárdi László,( Galambos Máté és Imre Sándor (mindhárom BME VIK) Kvantum számítások cím 38. fejezetéb l áll. Végül a Gyakorlati módszerek cím IX. részben Szidarovszky Ferenc (University of Arizona) és Domoszlai László (ELTE IK) Koniktus helyzetek cím 39., Pinczel Balázs, Kósa Balázs, Matuszka Tamás és Kiss Attila A szemantikus web lekérdez nyelvei cím??., valamint Rácz Gábor, Gombos Gerg és Kiss Attila A szemantikus web alkalmazásai cím??. fejezete van. A LATEX style fájlt Csörnyei Zoltán Belényes Viktor, és Iványi Antal írták. Az ábrákat a szerz k rajzolták. Az irodalomjegyzék ugrópontjait Iványi Anna Barbara lektorálta és egészítette ki. Az ábrákat Cserg Bálint konvertálta. A kolofon oldalon lév ugrópontok segítségével az Olvasók kapcsolatba léphetnek a kötet alkotóival. Új gyakorlatokat és feladatokat, valamint a tartalomra vonatkozó észrevételeket köszönettel fogadunk. A nyomtatott els két kötet és az elektronikus els kötet megjelenését az Oktatási Minisztérium, a harmadik nyomtatott kötet megjelenését pedig a Nemzeti Kulturális Alap támogatta. Budapest, november

9 Tartalomjegyzék 1593 Iványi Antal

10

11 VII. DISZKRÉT MÓDSZEREK

12 32. Heurisztikus gráfkeres algoritmusok A mesterséges intelligencia (MI) feladatok közös jellemz je, hogy igen nagy problématérben kell a megoldásukat megtalálni. Ezért ezen feladatok megoldására többnyire keresést alkalmazunk. Egy nagyon nagy problématérben történ keresés eredményessége is és hatékonysága is er sen befolyásolható azzal, hogy milyen mértékben és min ségben tudunk a keres algoritmusba a megoldandó feladattól származó extra ismereteket beépíteni. Ezt a vezérlési ismeretet szokták heurisztikának nevezni. Annak megítélése, hogy egy heurisztika milyen módon hat annak az algoritmusnak a m ködésére, amelyben alkalmazzuk, általában csak empirikus módon határozható meg. Van azonban a kereséseknek egy érdekes csoportja, ahol a heurisztika jól deniált tulajdonságai alapján lehet következtetni az algoritmus eredményességére és hatékonyságára: ezek a heurisztikus gráfkeres algoritmusok. Miel tt a gráfkereséseket részletesen megvizsgálnánk, el ször jellemezzük azokat az úgynevezett útkeresési feladatokat, amelyeket a gráfkeres algoritmusokkal meg szeretnénk oldani. A fejezet felépítése a következ. El ször a alfejezetben az útkeresési feladatokat mutatjuk be, majd a. alfejezetben az általános gráfkeres algoritmust, a alfejezetben a nevezetes kiértékel algoritmusokat, a alfejezetben az A algoritmus családot, végül a alfejezetben az A algoritmus hatékonyságát elemezzük, Útkeresési feladatok Az MI feladatok modellezésére több módszert is kidolgoztak, és ezek meglep en sokszor képezik le a megoldandó problémát egy élsúlyozott irányított gráfban történ útkeresési feladatra. Legyen az (N, A, c) egy élsúlyozott irányított gráf, amely csúcsainak halmaza az N, éleinek halmaza az A N N, az (n, m) A egy n csúcsból m csúcsba irányuló élt jelöl (az él kiinduló csúcsát szül nek, végcsúcsát gyereknek hívjuk), a c : A R pedig az élekhez súlyt (a továbbiakban költséget) rendel függvény. A szokásoktól némileg eltér en itt feltételezzük, hogy az irányított gráfok-

13 32.1. Útkeresési feladatok 1597 ban akár végtelen sok csúcs is lehet. Ez abból adódik, hogy a vizsgált feladatok problématerének mérete nagyon nagy, s t esetenként valóban végtelen. Az informatikai megoldások szempontjából viszont nincs különbség a végtelen és a nagyon nagy méret között: az olyan algoritmusok úgysem használhatók, amelyek arra rendezkednek be, hogy megvizsgálják a teljes problémateret. Fentiek természetes következménye, hogy gráfjainkban végtelen sok irányított él fordulhat el. Kikötjük azonban azt, hogy a csúcsokból kivezet élek száma véges, azaz mindegyik csúcsnak csak véges sok gyereke van. (Egy csúcshoz azonban tartozhat végtelen sok szül csúcs.) Ez a megszorítás nem jelent valódi korlátozást, mert a kivezet éleket általában a megoldandó feladathoz deniált m veleteket generálják. Egy adott pillanatban alkalmazható m veletek száma pedig egy valós feladat esetében mindig véges. Ráadásul a m veleteknek pozitív végrehajtási költsége van már ha egyáltalán számít a végrehajtási költségük, és meggyelhet, hogy a m veletek költségeinek inmuma is egy pozitív szám. Így azt is kiköthetjük, hogy az él-súlyozott irányított gráfjaink élsúlyai (élköltségei) egy, a teljes gráfra érvényes pozitív valós számnál nem kisebbek. Ezt a súlykorlátot gyakran szokták a görög δ bet vel jelölni, az általa leírt tulajdonságot pedig δ-tulajdonságnak hívni. (Az élek súlyait egységesen egységnyinek tekintjük akkor, amikor a feladatban semmilyen utalás sincs a költségekre.) Egy végtelen sok csúcsból álló, de egy csúcshoz csak véges sok kivezet élt rendel, δ-tulajdonságú (N, A, c) él-súlyozott irányított gráfot röviden δ- gráfnak δ-gráf szoktunk nevezni. Egy útkeresési feladat egy adott tulajdonságú, δ-gráfbeli irányított út megkeresését jelenti. Egy n N csúcsból m N csúcsba vezet irányított úton egy (n, n 1 ), (n 1, n 2 ),..., (n k 1, m) élsorozatot értünk. Ha csak azt kívánjuk jelölni, hogy egy út milyen csúcsokat érint, akkor az útra hivatkozhatunk az érintett csúcsok sorozatával is: (n, n 1, n 2,..., n k 1, m). (Ez a jelölés azonban nem egyértelm, hiszen két csúcs között több él is vezethet.) Az n m szimbólumot akkor használjuk majd, ha egy n csúcsból m csúcsba vezet útról kell beszélnünk, de nem lényeges, hogy milyen közbees csúcsok mentén valósul ez meg. Ha α =< (n, n 1 ), (n 1, n 2 ),..., (n k 1, m) > egy konkrét n-b l m-be vezet út, akkor ezt az n α m szimbólummal is jelölhetjük. Egy úton ugyanaz a csúcs (s t ugyanaz az él) többször is el fordulhat, amennyiben a gráfban vannak körök, azaz kiinduló csúcsukba visszatér utak. Az {n m} az összes n-b l m-be vezet irányított út halmazát, az n M, ahol M N, pedig az összes n-b l M valamelyik csúcsába vezet irányított út halmazát jelöli. Egy irányított út hosszán az utat alkotó élek számát értjük, és egy α út esetében ezt az α jelöli. Az út költségét a hosszúság fogalmával analóg

14 Heurisztikus gráfkeres algoritmusok módon az utat alkotó élek költségeinek összegeként deniáljuk. Formálisan, ha α =< (n 0, n 1 ), (n 1, n 2 ),..., (n k 1, m k ) >, akkor c(α) = k c(n i 1, n i ) i=1 Az α {n m} út költségét a c(α) szimbólum jelöli majd. Nem lesz zavaró, hogy az él-költséget is c-vel jelöltük, hiszen egy (n, m) él egy speciális irányított útnak tekinthet, amelynek a költsége c(n, m). Az útköltség lényegében az élköltség fogalmának általánosítása. A δ-gráfokban, amennyiben vezet egy csúcsból (n) egy csúcshalmazba (M) út, akkor létezik ezek között legrövidebb út is, s t legolcsóbb költség, azaz optimális út is. Az els állításhoz elég azt látni, hogy ha α az egyik n M út, akkor az ennél rövidebb n M utak száma véges. Ez abból következik, hogy egy δ-gráfban minden csúcsnak véges sok gyermeke van, így az n csúcsból kiinduló, de egy megadott korlátnál (például az α hosszánál) nem hosszabb utakból véges sok van. Ennél fogva ki lehet választani az n M utak közül a legrövidebbet. A második állításhoz a δ-tulajdonságot is fel kell használni. Mivel emiatt minden él legalább δ > 0 súlyú, így ha α n M, akkor a legolcsóbb n M-beli út hossza nem lehet nagyobb, mint c(α)/δ. (Ugyanis minden c(α)/δ-nál hosszabb β útra fenn áll, hogy c(β) β δ > c(α).) Azt pedig éppen az el bb láttuk be, hogy egy adott korlátnál (ez most c(α)/δ) nem hosszabb n M-beli utak száma véges, és ezek közül ki lehet választani a legolcsóbbat. Bevezetjük a c : N N R függvényt, amely egy δ-gráfban megadja azt az optimális (legolcsóbb) költséget, amelynek árán egy csúcsból egy másikba el lehet jutni. Ezt mindegyik n és m csúcsra értelmezzük. Ha van út n-b l m-be, akkor az összes {n m}-beli út költségének minimumaként, ha nincs, akkor végtelen nagynak tekintjük. Formálisan: c (n, m) := { minα {n m} c(α) ha van n m ha nincs n m Az n m szimbólummal egy n-b l m-be vezet optimális utat jelölünk, az összes n m optimális utat pedig az { n m} halmaz tartalmazza. Használhatjuk a c (n, M) jelölést arra az optimális (legolcsóbb) költségre, amellyel el lehet jutni n-b l az M csúcshalmaz valamelyikébe, azaz c (n, M) := min α n M c(α). Ha nincs n M-beli út, akkor a c (n, M) értékét végtelen nagynak tekintjük. Egy c (n, M) költség n M-beli utat n-b l M-be vezet optimális útnak hívunk. Egyszerre több ilyen út is létezhet, ezért jelöli az n M az összes n M-beli optimális utat.

15 32.1. Útkeresési feladatok 1599 Egy útkeresési feladat modellezésekor az a célunk, hogy a feladat problématerét egy δ-gráfbeli, adott csúcsból (startcsúcsból) induló irányított utak halmazaként fogalmazzuk meg, amelyek között olyan utat keresünk, amely adott csúcsok (célcsúcsok) egyikébe vezet. Gyakran az optimális utat keressük. Ennek megfelel en egy útkeresési feladat gráfreprezentációján azt értjük, ha megadunk egy (N, A, c) δ-gráfot, az úgynevezett reprezentációs gráfot, kijelöljük annak s N startcsúcsát és T N célcsúcsait. A feladat általánosan az, hogy keresünk egy s T -beli úgynevezett megoldási utat, vagy röviden megoldást, esetenként egy s T -beli optimális megoldást. Több olyan módszert is ismerünk, amelyek segítségével egy problémát útkeresési feladatként fogalmazhatunk meg, és ezáltal lehet vé válik, hogy a problémára úgy tekinthessünk, mint egy δ-gráfbeli út keresésére. Ezek között talán az egyik legjobban ismert módszer az állapottér reprezentáció. Az állapottér reprezentáció alkalmazása során a megoldandó feladatból kinyert ismereteket négy részben kell megfogalmazni. Az els az állapottér, amely a feladat homlokterében álló adatok lehetséges érték-együtteseinek (állapotainak) halmaza. Ezen az állapottéren deniáljuk a feladat m veleteit, amelyek állapotból állapotba képz operátorok. Meg kell még adni a feladat lehetséges kezd állapotait és egy adott kezd állapothoz tartozó célállapotokat közvetlenül vagy közvetve egy feltétel segítségével. Példaként vegyük az úgynevezett 15-ös kirakó játékot. Ez egy 4 4-es keretben elhelyezett 15 sorszámozott (vagy képekkel ellátott) 1 1-es lapocskát tartalmaz és egy 1 1-es üres helyet. Egy lapocskát a vele szomszédos üres helyre lehet áttolni. A feladat az, hogy egy adott kezd állásból kiindulva érjünk el egy kívánt célállásba. (Sorszámozott lapocskák esetében ez a célállás gyakran az, ahol a lapocskák számai balról jobbra sorfolytonosan kiterítve növeked sorozatot alkotnak, az üres hely pedig a jobb alsó sarok.) Ezt a feladatot modellezhetjük egy 4 4-es mátrix segítségével, amelyben 0 és 15 közé es számok mindegyike pontosan egyszer fordul csak el. A 0 az üres helyet szimbolizálja, a többi szám pedig a megfelel sorszámú lapocskákat. A feladat egy állása, azaz egy állapota egy ilyen mátrixszal adható meg. Hatékonysági okokból célszer az állapotban külön eltárolni azt is, hogy éppen hol (milyen koordinátán, azaz melyik sorban és oszlopban) található az üres hely. Jelöljük az állapotok halmazát leíró halmazt A-val, az aktuális állapotot akt-tal. A m veleteket egy olyan T ol(irány) : A A operátor írja le, amely az aktuális állapot üres helyét (röviden akt.üres ) tolja el a megadott irányba jobbra, fel, balra vagy le: irány {(1, 0), (0, 1), ( 1, 0), (0, 1)}. A m velet végrehajtásának el feltétele, hogy akt.üres+irány (itt az összeadást koordinátánként kell végrehajtani) egy érvényes pozíció legyen, azaz mind-

16 Heurisztikus gráfkeres algoritmusok két koordinátája 1 és 4 közé essen. A m velet hatására az aktuális állapot mátrixának akt.üres és akt.üres+irány pozícióin felcserél dnek az értékek, az akt.üres új értéke pedig akt.üres+irány lesz. Gyakorlatok Adjunk állapottér reprezentációt a huszár bejárás problémára. Egy n n-es sakktáblán áll egy huszár (ló), amellyel el kell jutni a sakktábla egy adott mez jér l egy másik adott mez jére úgy, hogy a huszár lépés-szabályát követjük (L alakban, tehát el ször egyik irányban, majd rá mer leges irányban is lépünk, összesen csak hármat). Becsüljük meg reprezentációnak megfeleltetett irányított gráf csúcsainak számát, valamint startcsúcsból kivezet utak számát Adjunk állapottér reprezentációt az alábbi kocka világ problémára. Adott egy asztalon néhány kocka (A, B, C), valamint egy robotkar. A robotkar négy m veletet képes végrehajtani: felemel egy kockát (amelyen nincs másik kocka, azaz szabad) az asztalról; leemel egy szabad kockát egy másik kockáról; lerak egy kockát az asztalra; rátesz egy kockát egy másik szabad kockára. A cél az, hogy egy tetsz leges kiinduló állásból indulva felépítsünk egy adott konstrukciót, mondjuk az A B C tornyot. A reprezentáció megadásán túl becsüljük meg külön az állapottér és külön a problématér méretét. (Tipp: Egy állapot leírásához az alábbi predikátum szimbólumok alappéldányainak listáját használjuk: on(x, y) x rajta van az y-on; ontable(x) x az asztalon van; clear(x) x teteje szabad; holding(x) robotkar fogja az x-et; handempty robotkar üres!) Becsüljük meg reprezentációnak megfeleltetett irányított gráf csúcsainak számát, valamint startcsúcsból kivezet utak számát Adjunk állapottér reprezentációt a kancsó problémára. Adott három eltér rtartalmú kancsó: egy 5 literes, egy 3 literes és egy 2 literes. Kezdetben az 5 literes tele van borral. Töltögetéssel érjük el, hogy a 2 literes kancsóba pontosan 1 liter bor kerüljön, de a maradék bor is legyen meg hiánytalanul a másik két kancsóban. Egyik kancsóból egy másikba csak úgy szabad tölteni, hogy ennek következtében vagy az egyik kancsó kiürül, vagy a másik kancsó lesz tele. Becsüljük meg reprezentációnak megfeleltetett irányított gráf csúcsainak számát, valamint a startcsúcsból kivezet utak számát Általános gráfkeres algoritmus A gráfkeres algoritmusok a startcsúcsból kiindulva fokozatosan tárják fel a reprezentációs gráfot úgy, hogy a startcsúcsból kiinduló utakat derítik fel. A reprezentációs gráf már felfedezett részét keres gráfnak hívjuk és azt G- vel jelöljük. A keres gráf a startcsúcsból kivezet összes útnak tartalmazza

17 32.2. Általános gráfkeres algoritmus 1601 valamilyen hosszan a kezd szeletét (kezdetben minden útról csak a startcsúcsot). A startcsúcsból kivezet utaknak mindig lesz egy olyan csúcsa, az úgynevezett nyílt csúcs, amely már G-ben van (már felfedeztük) és éppen arra vár, hogy kiterjesszük, azaz az összes gyerekét megismerjük, megvizsgáljuk. A NYÍLT halmazban a kiterjesztésre váró nyílt csúcsok foglalnak helyet. Azokat a G-beli csúcsokat, amelyeket kiterjesztettünk, zárt csúcsoknak nevezik. A NYÍLT halmazból a cél elérése szempontjából legjobbnak látszó csúcsot választjuk ki mindig kiterjesztésre, és ezzel minden lépésben tulajdonképpen újraértékeljük a startcsúcsból kivezet, már feltárt utakat abból a célból, hogy a legígéretesebb úton folytassuk a keresést. Ha egy csúcs kiterjesztése során új információhoz jutunk a csúcs gyerekeir l (például most fedezzük fel azokat, vagy így találunk azokhoz egy új utat), akkor betesszük a NYÍLT halmazba a gyerekeket miközben a kiterjesztett csúcsot kivesszük onnan. Mindezek alapján el lehet készíteni a gráfkeres algoritmusnak a vázát. Ebben a n := select(nyílt) utasítás választja ki egy elemét a NYÍLT halmaznak, a cél() függvény dönti el egy csúcsról, hogy célcsúcs-e, a Γ(n) pedig az n csúcs összes gyerekét tartalmazó halmazt jelöli. Az algoritmusban az " Γ(n)" kifejezés kétféle kontextusban is szerepel. Egyik helyen csak az n csúcs gyerekeit uniózza hozzá a nyílt csúcsokat tartalmazó halmazhoz (NYÍLT {n} Γ(n)), a másik helyen az n csúcsból annak gyerekeihez vezet éleket teszi bele a keres gráfba (G Γ(n)). procedure GK0 (hibás változat!) G := {s} : NYÍLT := {s} while NYÍLT loop n := select(nyílt) if cél(n) then return van megoldás G := G Γ(n) NYÍLT := NYÍLT {n} Γ(n) endloop return nincs megoldás Err l az algoritmusról rögtön látni, hogy hibás. Egyik baj vele az, hogy ha kört tartalmaz a reprezentációs gráf, akkor ez az algoritmus végtelen ciklusba eshet. A másik probléma az, hogy a megoldás megtalálásakor nem tudja megadni a megoldást, csak jelzi azt, hogy talált-e ilyet vagy sem. A harmadik gond pedig az vele, hogy még csak kísérletet sem tesz arra, hogy optimális megoldási utat találjon. A fenti hibák kijavítása el tt vezessünk be három függvényt. Legyen az f : NYÍLT R az úgynevezett kiértékel függvény, amelyet arra fogunk használni, hogy a segítségével választjuk ki a NYÍLT halmaz

18 Heurisztikus gráfkeres algoritmusok legígéretesebb csúcsát kiterjesztésre. Nyilvánvaló, hogy ez a függvény alapvet fontosságú szerepet játszik majd abban, hogy a keresés találjon megoldást, illetve, hogy optimális megoldást adjon. Ennek a függvénynek a részletesebb vizsgálatával majd kés bb foglalkozunk, egyel re csak annyit jegyezzünk meg, hogy ez egy dinamikus függvény. Ez egyfel l abból látszik, hogy az értelmezési tartománya, a NYÍLT halmaz, folyamatosan változik a gráfkeresés m ködése közben, másfel l a keresés két különböz id pillanatában az f függvény ugyanazon csúcshoz eltér értéket rendelhet. Legyen a π : N N az a visszamutató pointer, amely minden G-beli (tehát már felfedezett) csúcshoz (a startcsúcs kivételével) megjelöli annak egyik szül jét. Ennél fogva a keresés során elért bármelyik csúcshoz egyértelm en kijelöl egy a startcsúcsból odavezet irányított utat, így sikeres terminálás esetén a célcsúcsból indulva a megoldási út is könnyen kiolvasható. A visszamutató pointer értékeit az algoritmus segítségével fogjuk kiszámolni. Ezek az értékek dinamikusan változhatnak, hiszen keresés közben célszer egy csúcshoz mindig azt a szül csúcsot megjelölni, amelyen keresztül a lehet legolcsóbban lehet oda eljutni. A π visszamutató pointer egy irányított feszít fát határoz meg a G keres gráfban, amelyet röviden π feszít fának hívunk majd. Ennek a fának a gyökere az s startcsúcs, és minden csúcshoz pontosan egy startcsúcsból kiinduló G-beli irányított utat tartalmaz. Úgy kellene módosítani a gráfkeres algoritmust, hogy a π egy optimális irányított feszít fát tartson nyilván a G-ben, azaz a feszít fa minden csúcshoz a startcsúcsból odavezet G-beli utak közül az egyik legolcsóbbat tartalmazza. Röviden: legyen a π optimális. Hangsúlyozzuk, hogy ez a feszít fa nem a teljes reprezentációs gráfra, hanem csak a G keres gráfra nézve lenne optimális. Reményeink szerint ez és egy megfelel kiértékel függvény együttesen biztosíthatják majd azt, hogy a gráfkeresés a teljes reprezentációs gráfra nézve optimális megoldást tudjon találni. Az optimális feszít fa el állításához szükségünk lesz arra, hogy a G-beli csúcsoknál nyilvántartsuk a startcsúcsból odavezet π feszít fabeli út költségét. Erre szolgál majd az algoritmus által számolt g : N R költségfüggvény. Ez is dinamikus függvény, hiszen egy csúcsba többféle eltér költség út is vezethet a startcsúcsból, így az ott nyilvántartott költség attól függ en változik, hogy ezen utak közül eddig melyeket fedezte fel az algoritmus. Valahányszor egy újabb s n utat talál, össze kell vetni ennek költségét az n csúcsnál eddig nyilvántartott g(n) költséggel, és ha az új költség jobb, akkor le kell cserélni a g(n) értékét erre. Ezzel biztosíthatjuk, hogy a g optimális legyen a G-ben. Ha emellett ügyelünk arra is, hogy a g(n) érték mindig a π feszít fa által kijelölt startcsúcsból n csúcsba vezet út (s π n) költségét mutassa (azaz g(n) = c π (s, n)), másképpen fogalmazva a textbfg és a π

19 32.2. Általános gráfkeres algoritmus 1603 konzisztens legyen, akkor a π feszít fa is optimális lesz. Egy n G csúcsra akkor mondjuk majd, hogy korrekt, ha a g a G-ben optimális és konzisztens π-vel. Ellenkez esetben az n csúcs inkorrekt. Ha egy G keres gráf minden csúcsa korrekt, akkor a keres gráfot is korrektnek nevezzük. Hogyan módosítsuk a gráfkeresés GK0 algoritmusát úgy, hogy az képes legyen olyan g és π függvény értékeket kiszámolni, hogy a G keres gráfja korrekt legyen? Ennek érdekében minden kiterjesztésnél vizsgáljuk meg az éppen kiterjesztett n csúcs összes gyermekét. Egy m Γ(n) gyermekcsúcsra három eset fordulhat el. Ha ekkor találkozunk el ször az m csúccsal, akkor állítsuk be π(m) értékeket az m egyetlen ismert szül jére, az n-re, így egy n csúcson keresztül vezet startcsúcsból induló út lesz az m csúcshoz kijelölve. Ez az út az n csúcsig terjed szakaszból (ennek költsége: g(n)) és az (n, m) élb l áll, ezért az út költsége g(n) + c(n, m): ez legyen a g(m) értéke. Az m csúcs ebben az esetben bekerül a NYÍLT halmazba. A másik eset az, amikor az m csúccsal már korábban találkoztunk, de most egy minden eddiginél olcsóbb úton jutottunk el hozzá, azaz az m inkorrektté válik. Ennek kijavítására ilyenkor az el z esethez hasonlóan módosítjuk a g(m) és π(m) értékeit. A harmadik esetben, amikor az m csúcs már ismert, találunk hozzá egy újabb utat, de az nem olcsóbb a nyilvántartott útnál. Ekkor nem kell semmit se csinálnunk. if m / G then π(m) := n : g(m) := g(n) + c(n, m) : NYÍLT := NYÍLT {m} elseif m G és g(m) > g(n) + c(n, m) then π(m) := n : g(m) := g(n) + c(n, m) elseif m G és g(m) g(n) + c(n, m) then SKIP Sajnos ez a megoldás nem elégséges: a keres gráf ezzel együtt is inkorrektté válhat. Tekintsük ennek alátámasztásaként az alábbi példát. Az ábrán egy olyan szituáció látható, amikor egy n csúcs kiterjesztése után egy minden korábbinál olcsóbb utat találunk az n csúcs m jel gyermekéhez. A korábban megadott eljárás módosítja az m csúcs g és π értékeit, de mégis inkorrektté válik a keres gráf. A jelenséget az okozza, hogy az m csúcsot már korábban kiterjesztettük, azaz zárt csúcs lett, így vannak a G-ben leszármazottai. Az n kiterjesztése után a k jel csúcshoz például a feszít fa egy 3 költség utat mutat, de g(k) = 5, azaz elromlott a k-nál a g és π közötti konzisztencia; az l jel csúcsnál pedig a g(l) és π ugyan konzisztens, de egy 5 költség utat mutatnak, pedig most már egy 4 költség út is vezet l-be, azaz ebben a csúcsban a g nem optimális. Milyen megoldásokat adhatunk erre a problémára feltéve, hogy az n csúcs kiterjesztése el tt korrekt volt a keres gráf?

20 Heurisztikus gráfkeres algoritmusok ábra. Példa arra, amikor egy kiterjesztés után inkorrektté válik a keres gráf. 1. Járjuk be az m csúcs leszármazottait és módosítsuk azok g és π értékeit, így tegyük újra korrektté a keres gráfot. 2. Irányítsuk úgy a keresést, hogy soha ne következzen az be, hogy egy zárt csúcshoz minden addiginál olcsóbb utat találjunk. 3. Ne tör djünk a problémával, csak tegyük vissza az m csúcsot a NYÍLT halmazba. Az els válasz szerint egy (például mélységi) gráfbejárást kell a gráfkeresésbe beépíteni. Ennek során nem is kell az m csúcs összes leszármazottját feltétlenül megvizsgálni. Ha ugyanis az m csúcs egy k leszármazottjánál nem kell módosítani g és π értékeket, mert a k korrekt maradt, akkor a k csúcs gyerekei is csak úgy válhattak inkorrekté, ha van az m csúcsból a k csúcsot elkerül másik út is. A mélységi bejárás úgy is minden m csúcsból kivezet utat megvizsgál, ezért a korrekt k csúcs ellen rzése után nem kell annak gyerekeivel (és azok leszármazottaival) foglalkozni. A második válasz megvalósítása egy érdekes vállalkozás. A célunkat például elérhetnénk úgy, ha biztosítjuk azt, hogy amikor egy csúcsot kiterjesztünk, akkor már ismerjük az odavezet (az egész reprezentációs gráfra nézve) optimális utat. Ez az elképzelés azonban jóval messzebbre vezet: azt a kérdést feszegeti, hogy hogyan lehet optimális utat találni az egyes csúcsokhoz. Ehhez azonban egyel re még keveset tudunk a keresés irányítását végz kiértékel függvényekr l, így ezt a lehet séget kés bb tudjuk csak kielemezni. A harmadik válasz els hallásra igen meglep, de logikus. Azzal ugyanis, hogy az m csúcsot visszatesszük a NYÍLT halmazba, megteremtjük annak a lehet ségét, hogy újra ki lehessen terjeszteni. Ha a keresés szempontjából érdekes ez az irány, akkor az m csúcsot ki is fogja újra terjeszti a keresés,

21 32.2. Általános gráfkeres algoritmus 1605 és ekkor megtörténik a gyerekeinek is a felülvizsgálata. Összességében így sor kerülhet akár az m összes leszármazottjának az ismételt vizsgálatára is. Ez a lusta megoldás hagyja ugyan elromolni a keres gráf korrektségét, de abban bízik, hogy ez nem jelent majd problémát a megoldás illetve az optimális megoldás el állításánál. Az ötlet megvalósítása kétség kívül nem kerül semmibe, a korábban kitalált kódot kell csak annyiban módosítani, hogy egy korrigált csúcs mindig kerüljön vissza a NYÍLT halmazba. Futási id szempontjából azonban fontos kérdést vet fel: hányszor tud ugyanaz a csúcs visszakerülni a NYÍLT halmazba és újra kiterjeszt dni. Mi a legutóbbi ötletet karoljuk fel, és ennek alapján adjuk meg a gráfkeres algoritmus általános változatát. procedure GK (általános gráfkeres algoritmus) G := {s} : NYÍLT := {s} : π(s) := nil : g(s) := 0 while NYÍLT loop n := min f (NYÍLT) if cél(n) then return van megoldás foreach m Γ(n) loop return van megoldás if m / G vagy g(m) > g(n) + c(n, m) then π(m) := n : g(m) := g(n) + c(n, m) NYÍLT := NYÍLT {m} endif endloop G := G Γ(n) NYÍLT := NYÍLT {n} endloop return nincs megoldás Lényeges eleme az algoritmusnak az, hogy ahhoz, hogy a GK algoritmus megoldást találjon nem elég rátalálnia egy célcsúcsra, mert a célcsúcs NYÍLT halmazbeli megjelenése még nem állítja le a keresést. Csak akkor terminál az algoritmus, amikor kiválasztja kiterjesztésre a célcsúcsot. A kés bbi szóhasználatban az egyszer ség kedvéért ezt a célcsúcs kiterjesztésének mondjuk majd annak ellenére, hogy ilyenkor már nem kerül sor a célcsúcs utódainak vizsgálatára Tulajdonságok Az általános gráfkeres algoritmustól csak speciális kiértékel függvények esetében várhatunk igazán eredményes és hatékony m ködést, de az algoritmus néhány fontos tulajdonságát érdemes már általános is esetre megfogalmazni.

22 Heurisztikus gráfkeres algoritmusok Ezeket lemmák és tételek formájában mondjuk ki. Az els lemma azt vizsgálja meg, hogy hányszor kerülhet sor ugyanannak a csúcsnak a kiterjesztésére. Lehet vé tettük ugyanis, hogy egy csúcs visszakerülhessen a NYÍLT halmazba, amikor olcsóbb utat találunk hozzá azért, hogy a leszármazottainak esetleges inkorrektségét a csúcs ismételt kiterjesztésével helyre lehessen állítani. Ez lényegesen megnövelheti a futási id t, de szerencsére az lemma szerint erre nem kerülhet végtelen sokszor sor lemma. A GK ugyanazt a csúcsot legfeljebb véges sokszor terjeszti csak ki. Bizonyítás. Egy n csúcs ismételt kiterjesztésére csak azt követ en kerülhet sor, hogy az algoritmus egyszer már eljutott az n csúcshoz, és kiterjesztette. Jelöljük C-vel az n csúcshoz legels alkalommal talált s n út költségét. Becsüljük meg azon s n utak számát, amelyek olcsóbbak C-nél: legfeljebb ennyiszer kerülhet vissza az n NYÍLT halmazba, és ennyiszer terjeszt dhet ki újra. Egy δ-gráfban a C-nél olcsóbb utak rövidebbek, mint C/δ. A δ- tulajdonság miatt ugyanis minden él költsége legalább δ, és ezért már egy C/δ hosszú út költsége is nagyobb vagy egyenl lesz, mint C. Másfel l viszont a C/δ korlátnál rövidebb s-b l induló utak száma véges, hiszen minden csúcsból véges sok kivezet él indul. Tehát egy adott korlátnál rövidebb (C-nél olcsóbb) s n utak száma véges. A következ tétel a GK terminálási feltételét fogalmazza meg tétel. Véges δ-gráfban a GK mindig terminál. Bizonyítás. Egy véges gráfnak véges sok csúcsa van. δ-gráf esetén ezek mindegyike az lemma értelmében legfeljebb véges sokszor terjeszt dhet ki. Véges sok csúcs tehát összességében véges lépésben végleg kikerül a NYÍLT halmazból, azaz végül a NYÍLT halmaz üres lesz (a GK sikertelenül terminál), hacsak nem áll le korábban a keresés egy célcsúcs megtalálásával (a GK sikeresen terminál). Ez a tétel implicit módon azt is kimondja, hogy a körök nem okozhatnak végtelen ciklust a GK m ködésében. A következ lemma a GK algoritmus m ködésére jellemz invariáns állítást adja meg. Pongyola megfogalmazásban ez annyit tesz, hogy a GK algoritmus minden startcsúcsból kiinduló valamelyik másik csúcshoz (és nemcsak a célcsúcsokhoz) vezet optimális útnak a kezd szeletét a m ködés bármelyik pillanatában már tökéletesen ismeri. A pontosabb megfogalmazás el tt be kell vezetnünk egy jelölést. Legyen g : N R az úgynevezett eddig megtett

23 32.2. Általános gráfkeres algoritmus 1607 út optimális költségfüggvénye, amely minden n N csúcsra megadja az s n optimális út költségét, azaz g (n) = c (s, n) lemma. (invariáns lemma) Legyen n egy tetsz leges s-b l elérhet csúcs. A GK az n csúcs kiterjesztése el tt minden pillanatban bármelyik s n optimális úton nyilvántart egy olyan m csúcsot, amelyikre teljesül, hogy 1. m NYÍLT 2. g(m) = g (m) 3. minden m csúcsot megel z k csúcsra: mind zárt, egyik se nyílt, és g(k) = g (k). Bizonyítás. A bizonyítást a GK iterációi szerinti teljes indukcióval végezzük. A legels iterációs lépés el tt mindegyik vizsgált útra az s startcsúcs az, amelyik rendelkezik az 1., 2., 3. tulajdonságokkal. Feltesszük, hogy az i-dik iterációs lépés el tt teljesül az állítás, és felkészülünk arra, hogy megmutassuk, hogy ez az i-dik lépés során is megmarad. Rögzítsünk egy tetsz leges α-val jelölt olyan s n utat, ahol az n csúcsot a GK még az i-dik lépésben sem terjeszti ki. Ennek az útnak az indukciós állítás szerint van olyan m csúcsa, amely rendelkezik az 1., 2., 3. tulajdonságokkal. 1. eset: Lehet, hogy az i-dik lépés során nem az m csúcsot terjesztjük ki, ekkor m-re továbbra is fennáll 1., 2., 3., azaz ebben az esetben készen is vagyunk a bizonyítással. 2. eset: Ha az i-dik lépés során az m csúcsot terjesztjük ki (az m nem lehet azonos n csúccsal, hiszen, feltevésünk szerint, az n csúcsot nem terjeszthetjük még ki), akkor kell keresni egy olyan csúcsot az α úton, amelyik átveszi az invariáns állításban szerepl m csúcs szerepét. Az m csúcsnak az α úton fekv utóda az m, amely az m csúcs kiterjesztése után vagy nyílt lesz, vagy nem. Ha m NYÍLT, akkor az 1. nyilván teljesül m -re, de a g(m ) g(m) + c(m, m ) = g (m) + c(m, m ) = g (m ) miatt a 2. is, a 3. pedig azért, mert az α úton az m el tti k csúcsok már eddig is zártak és nem nyíltak voltak g(k) = g (k) tulajdonság mellett, az m pedig most vált zárttá a g(m) = g (m) mellett miközben ki került a NYÍLT halmazból. Ha viszont m / NYÍLT, akkor ez csak úgy lehetséges, hogy az m kiterjesztése el tt már g(m ) = g (m ) fenn állt. Ehhez kell lenni egy olyan

24 Heurisztikus gráfkeres algoritmusok β {s m } optimális útnak, amely mentén már az i-dik lépés el tt elértük az m -t úgy, hogy a β minden l csúcsa g(l) = g (l) mellett lett kiterjesztve, és ennél fogva nem lett újra nyílt. Tekintsük most azt az utat, amelyik a β-t magába foglalva elvezet az m - ig, majd onnan az α-án tovább halad az n-be. Ez is egy s n optimális út, és erre is érvényes az indukciós állítás, azaz van rajta valahol egy olyan m nyílt csúcs, amelyre teljesül az 1., 2., 3. De ez az m csúcs csak az m után helyezkedhet el ezen az úton, hiszen az m -ig (a β-n) nincsenek nyílt csúcsok. Az m ezek szerint az α m utáni szakaszán van, és ezzel találtunk az α-n olyan csúcsot, amelyre 1., 2., 3. fenn áll az i-dik lépést követ en. Egy útkeresés helyességének kritériuma az, hogy ha van megoldási út egy δ-gráfban, akkor talál egy megoldást. Ezt az általános gráfkeres algoritmusra csak véges δ-gráf esetén lehet bebizonyítani tétel. Ha egy véges δ-gráfban létezik s t megoldás (t T), akkor a GK egy megoldás megtalálásával terminál. Bizonyítás. Tekintsünk egy s t megoldási utat. Amíg a t célcsúcsot nem terjesztjük ki, addig a szerint (legyen a lemmabeli n csúcs most a t célcsúcs) a NYÍLT halmaz mindig tartalmaz egy csúcsot err l az útról, azaz a GK nem terminálhat üres NYÍLT halmazzal. De az tétel miatt mindenképpen terminálnia kell. Így ezt nem teheti meg másképpen, mint (vagy a t, vagy egy másik) célcsúcs kiterjesztésével. Gyakorlatok Tervezzünk egy olyan eljárást, amely segítségével egy a NYÍLT halmazba visszakerült csúcs keres gráfbeli leszármazottait újra korrektté lehet tenni Nevezetes kiértékel függvények Egy gráfkeres algoritmus keresési stratégiája a kiértékel függvényben ölt testet. Ez dönt arról, hogy egy adott pillanatban a már megismert startcsúcsból kivezet utak közül melyiken lépjen tovább a keresés. Ezeknek az utaknak az utoljára felfedezett csúcsai alkotják a NYÍLT halmazt, amelyeket a kiértékel függvény értékei alapján rangsorolhatunk: a függvény mutatja meg, melyik nyílt csúcsot kell kiterjeszteni, azaz melyik a legjobb, a legígéretesebb a cél elérése szempontjából, legalábbis a rendelkezésre álló információ alapján. A kiértékel függvény alapvet en kétféle lehet: nem-informált, amelyik csak általános, bármelyik feladat gráfkereséssel történ megoldásánál alkalmazható szempontot vesz gyelembe; illetve heurisztikus, amelyik a

25 32.3. Nevezetes kiértékel függvények 1609 konkrét megoldandó feladattól származó többlet ismeretet is tartalmaz Nem-informált gráfkeresések Nem-informált kiértékel függvényt használ például a mélységi gráfkeresés, (M GK) amely a vizsgált reprezentációs gráf minden élének súlyát egységnyinek tekinti, és a kiértékel függvénye az egyes csúcsokba vezet útköltségnek, az algoritmus által számolt g függvénynek mínusz egyszerese, azaz f = g. Egységnyi élsúlyok esetén a g költségfüggvény egy csúcsban a startcsúcsból odavezet már megtalált út hosszúságát mutatja, így a g kiértékelés mindig a startcsúcstól legtávolabb es, a legmélyebben fekv nyílt csúcs kiterjesztését részesíti el nyben. (Azonos mélység csúcsok esetén véletlenszer en, vagy valamilyen másodlagos szempont alapján dönt.) Ezt a keresést gyakran egy mélységi korláttal is ellátják, így ha létezik a mélységi korlátnál nem hosszabb megoldási út, akkor a keresés megoldás megtalálásával terminál, hiszen egy δ-gráfnak a startcsúcsból a mélységi korláton belül elérhet része egy véges gráf, arra pedig érvényesek a és a tételben kimondott állítások. A mélységi gráfkeresés nem azonos a depth-rst kereséssel, amelyet visszalépéses keresésnek is szoktak nevezni. Kétség kívül sok a közös a két keresésben. Ugyanazon mélységi korlátot alkalmazva hasonló sorrendben vizsgálják meg a reprezentációs gráf csúcsait, ugyanazt a megoldás találják meg, ha van megoldás. Ezeken a hasonlóságokon túllépve azonban az egyik egy gráfkeresés, amelyik a reprezentációs gráfnak a már felfedezett részét teljes egészében eltárolja, a másik pedig csak egyetlen, a startcsúcsból kivezet aktuális utat tart nyilván. Ennek következtében a mélységi gráfkeresés jóval több memóriát igényel, de kevesebb lépésben képes terminálni, mint egy visszalépéses keresés. Egyrészt azért, mert gráfkeresésként bármelyik pillanatban át tud váltani az eddig preferált út vizsgálatáról egy másikra, és ehhez nem kell számos visszalépést elvégeznie. Másrészt azért, mert nem fordulhat vele el az, hogy egy már korábban bejárt részt újra megvizsgáljon, ha oda egy másik úton is eljut, mint azt teszi a visszalépéses keresés, amely elfelejti azokat a csúcsokat, ahol már korábban járt, de visszalépett onnan. A mélységi gráfkeresés ellentétpárja a szélességi gráfkeresés. Ennek kiértékel függvénye a startcsúcshoz legközelebb es nyílt csúcsot preferálja, azaz f = g. Belátható, hogy ha van megoldás, akkor az SZGK még végtelen nagy δ gráfokban is terminál és a legrövidebb megoldást találja meg. Az is megmutatható, hogy ez a keresés sosem fog egy csúcsot egynél többször kiterjeszteni, mert amikor el ször kiterjeszti, már ismeri az odavezet legrövidebb utat, aminél kés bb nem tud már rövidebbet találni, és így nem teheti vissza a NYÍLT halmazba sem.

26 Heurisztikus gráfkeres algoritmusok Az egyenletes gráfkeresés (EGK) a szélességi gráfkeresés általánosítása abban az értelemben, hogy az élek eredeti súlyát veszi gyelembe. Az f = g kiértékel függvény ekkor a legolcsóbb úton elért nyílt csúcsnak fog kedvezni, hiszen a g általában egy csúcsba vezet út költségét, és nem a hosszát mutatja. Bebizonyítható, hogy az EGK végtelen δ-gráfokban mindig az optimális megoldást találják meg, ha van megoldás. Az is igazolható, hogy a keresés egy csúcsot legfeljebb egyszer terjeszt ki, mert amikor el ször kiterjeszti már ismeri az odavezet legolcsóbb utat. Ezeket a tulajdonságokat a kés bb kimondott és bizonyított általánosabb tételek speciális eseteként kaphatjuk meg. Mind a szélességi, mind az egyenletes gráfkeresés alternatív megoldást nyújt arra problémára, hogy mi történjen a gráfkeresés során egy olyan csúcs inkorrekt leszármazottaival, amelyikhez minden eddiginél olcsóbb (rövidebb) utat találunk. Nos, ezeknél az algoritmusoknál ez probléma nem fordulhat el. Eredményesség szempontjából az EGK a lehet legjobb keresés, de hatékonyság szempontjából csapnivaló. Az a stratégia, amely mer óvatosságból mindig a startcsúcshoz legközelebbi nyílt csúcsot terjeszti ki, szélességében terjeszkedve próbálja meg felfedezni a reprezentációs gráfot, ami nemcsak sok iterációs lépést, azaz nagy futási id t igényel, hanem tekintélyes méret memóriát is. Ez még az egyszer bbnek számító 15-ös kirakó játék esetében is azt eredményezi, hogy nem tudjuk ezzel a módszerrel megoldani a feladatot, mert a számítógépeink kapacitása ezt nem teszi lehet vé. Az EGK nagyon hasonlít Dijkstra legrövidebb utak algoritmusára, de néhány fontos dologban különbözik attól. Az EGK végtelen gráfokon is m ködik, ezért nem is képes az összes startcsúcsból kivezet optimális utat megtalálni, az inicializálása nem tartalmazhatja azt a lépést, amelyben a Dijkstra algoritmus a gráf összes csúcsához egy kezdeti költséget rendel. Ugyanakkor a végtelen gráfok élsúlyaira fenn kell állnia a δ-tulajdonságnak szemben azzal, hogy a Dijkstra algoritmusnál csak a negatív élsúlyokat zárjuk ki Heurisztika a gráfkeresésben Az MI problémák szempontjából azok a kiértékel függvények az érdekesek, amelyek egy nyílt csúcs ígéretességének megítélésekor heurisztikus ismeretekre is támaszkodnak. A heurisztika a gráfkeres algoritmusoknál olyan függvény formájában fogalmazható meg, amelyik minden csúcsra megbecsüli annak a legolcsóbb útnak a költségét, amelyen az adott csúcsból célcsúcsba lehet eljutni. A továbbiakban ezt a h : N R függvényt heurisztikus függvénynek hívjuk majd. A 15-ös kirakó játék esetén jól ismert heurisztika a rossz helyen lev lapok

27 32.4. Az A algoritmus család 1611 számát megadó függvény (W ), amelyik az aktuális állásra megadja, hogy hány olyan lapocskát tartalmaz, amelyik nem a célállásbeli helyén található. Az, hogy hány lapot kell még a helyére eljuttatni a hátralev lépések számára ad egy durva alsó becslést. A játék egy másik nevezetes heurisztikus függvénye a Manhattan függvény (P ), amelyik az aktuális állásbeli lapocskáknak a célállásbeli helyükt l vett Hamilton távolságainak összegét adja meg. A Hamilton távolság egy lapocskára azt mutatja meg, hogy minimálisan hány lépésben kell azt vízszintes és függ leges irányban elmozdítani ahhoz, hogy a célbeli helyére kerüljön. A P tehát azt írja le, hogy hány lépést kell minimálisan végezni a cél eléréséig. Ez is alsó becslés, de jóval nomabb, mint a W. A kés bbi fejezetekben több nevezetes heurisztikus gráfkeresést mutatunk majd. Itt csak a példa kedvéért említünk egyet. El retekint gráfkeresésnek (best rst) szokták nevezni azt, amikor a kiértékel függvény egy az egyben a heurisztikus függvény, azaz egy csúcs kiterjesztésre történ kiválasztásakor csak azt vizsgáljuk, hogy mekkora költség út vezet az adott csúcsból egy célcsúcsba. Az ilyen f = h kiértékel függvény keresésekr l nem sok mindent lehet általában elmondani. Végtelen reprezentációs gráfokban nem biztos, hogy terminálnak, még akkor sem, ha létezik megoldási út. Ennek ellenére vannak olyan speciális feladatok, ahol sikeresen alkalmazzák. Gyakorlatok Mutassuk meg, hogy ha van megoldás, akkor a SZGK egy δ-gráfban mindig a legrövidebb megoldást találja meg Adjunk heurisztikákat az el z alfejezet gyakorlataiban szerepl problémákhoz Az A algoritmus család Talán a leghíresebb heurisztikus gráfkeres algoritmusok azok, amelyek kiértékel függvényei egy csúcsnál együttesen veszik gyelembe a startcsúcsból oda vezet út költségét és a célba vezet hátralev út költségét. Miel tt bemutatnánk ezeket, bevezetünk néhány jelölést, amelyet a kés bbiekben használni fogunk. Találkoztunk már az idevezet optimális költség függvényével g : N R, amely egy tetsz leges csúcsra megadja annak a legolcsóbb útnak a költségét, amelyen a startcsúcsból az adott csúcsba lehet eljutni, azaz g (n) := c (s, n). Könny látni, hogy a gráfkeres algoritmus által számolt g költség függvény a G-beli csúcsokra egy fels becslése a g -nak, azaz minden N-beli n csúcsra g(n) g (n). Ha nincs s n út, akkor g (n) =.

28 Heurisztikus gráfkeres algoritmusok Legyen d : N R az idevezet optimális távolság függvénye, amely egy tetsz leges csúcsra megadja annak a legrövidebb útnak a hosszát, amelyen a startcsúcsból az adott csúcsba lehet eljutni, azaz minden N-beli n csúcsra d (n) := min α {s n} α. Nyilvánvaló, ha létezik s n út, akkor minimális hosszúságú is létezik, hiszen hogy δ-gráfokban az adott hosszúságnál rövidebb startcsúcsból induló utak száma véges. Ezen kívül a g (n) d (n) δ is fenn áll, hiszen az optimális s n út nem biztos, hogy a legrövidebb is. Ha viszont nem létezik s n út, akkor d (n) =. Legyen h : N R a hátralev optimális költség függvénye, amely egy tetsz leges csúcsra megadja annak a legolcsóbb útnak a költségét, amelyen az adott csúcsból egy célcsúcsba lehet eljutni, azaz minden N-beli n csúcsra h (n) := c (n, T ). Ha nincs n T út, akkor h (n) =. A h heurisztikus függvény ennek a h függvénynek egy becslése, azaz minden N-beli n csúcsra h(n) h (n). Legyen f : N R az optimális költség függvénye, amely egy tetsz leges csúcsra megadja annak a legolcsóbb útnak a költségét, amelyen a startcsúcsból indulva az adott csúcsot érintve célcsúcsba lehet jutni, azaz minden N-beli n csúcsra f (n) := g (n) + h (n). Könny látni, hogy egy optimális megoldási út mentén az f állandó, hiszen ennek az útnak minden csúcsán ugyanaz a startcsúcsból induló célcsúcsba vezet optimális út megy keresztül, így mindegyikre azonos az f függvény értéke. Ennél fogva az is igaz, hogy az összes optimális megoldási út minden n csúcsára fenn áll, hogy f (n) = f (s), azaz f (s) az optimális megoldás költségét adja meg. Most pedig térjünk rá az A algoritmus-család bemutatására A algoritmus Az A algoritmus olyan gráfkeres algoritmus, amelyik kiértékel függvénye f = g + h alakú, ahol g az algoritmus által számolt költségfüggvény, h pedig egy nem-negatív heurisztikus függvény. Meggyelhet, hogy az additív kiértékel függvény tagonként ad becslést az f = g + h optimális költségfüggvényre, hiszen g g és h h. A heurisztikus függvényre tett nem-negatív megszorítás fontos, de könny biztosítani. Ha ugyanis negatív becslést adunk egy csúcsnál a célba vezet hátralev optimális út költségére (ami soha nem lehet negatív), akkor ott a becslést könnyen korrigálhatjuk nullára. Talán meglep, de paradox módon A algoritmus a nem-informált EGK is, hiszen annak f = g kiértékel függvénye felírható f = g+0 alakban, ahol a második tag formailag egy nem-negatív heurisztikus függvény, amely nullával becsüli minden hátralev útnak a költségét. Természetesen sokkal érdekesebbek azok a példák, ahol egy konkrét fel-

29 32.4. Az A algoritmus család 1613 adathoz készítünk heurisztikus függvényt. A 15-ös kirakó játék rossz helyen lev lapok számát megadó W függvénye és a hátralev lépések számát becsl P biztos nem negatív, így a g + W és g + P kiértékel függvényt használó gráfkeresések A algoritmusok. Vizsgáljuk most meg, milyen eredményt várhatunk az A algoritmustól lemma. Ha egy δ-gráfban az A algoritmus nem terminál, akkor bármelyik NYÍLT halmazába bekerült csúcsot véges lépésen belül kiterjeszti. Bizonyítás. Mindenekel tt vegyük észre, hogy egy NYÍLT halmazba került csúcs kiértékel függvényértéke egyenesen arányos a csúcsnak a startcsúcshoz viszonyított mélységével: minél mélyebben van, annál nagyobb ez az értéke. (Jelölje d(n) a g(n) költség s n út hosszát.) f(n) = g(n) + h(n) g(n) d(n) δ d (n) δ Tegyük fel, hogy bekerül a NYÍLT halmazba egy m csúcs. Ennek kiterjesztését csak azon csúcsok el zhetik meg, amelyek kiértékel függvényértéke kisebb vagy egyenl, mint f(m). Ennek azonban az a feltétele, hogy ezek a csúcsok ne legyenek mélyebben, mint f(m)/δ. Ha ugyanis egy n csúcs mélyebben van, azaz d (n) > f(m)/δ, akkor az f(n) d (n) δ miatt f(n) > f(m), azaz n csúcs nem el zheti meg m csúcsot a kiterjesztésnél. Egy adott szintnél magasabban elhelyezked csúcsok száma egy δ- gráfban viszont véges. A véges sok f(m)/δ-nál magasabban lev csúcs a lemma következményeként véges lépésben végleg kiterjeszt dik, azaz elt nik a NYÍLT halmazból, és ezután már semmi nem áll az m csúcs kiterjesztésének útjába. Erre a lemmára támaszkodik az alábbi tétel bizonyítása tétel. Ha egy δ-gráfban létezik megoldás, akkor az A algoritmus egy megoldás megtalálásával terminál. Bizonyítás. Ha létezik megoldás, akkor létezik egy α = (s = n 0, n 1, n 2,..., n k 1, n k = t) optimális megoldási út is. Az algoritmus kezdetben kiterjeszti az s startcsúcsot (ha az nem célcsúcs), és nyílt lesz az n 1 csúcs, amelyre g(n 1 ) = g (n 1 ) teljesül. Az lemma miatt n 1 véges lépésen belül kiterjeszt dik, de ezt követ en is lesz a lemma miatt az α úton olyan n i csúcs (0 < i k), amely nyílt, g(n i ) = g (n i ), és minden n j (0 j < i) csúcs már zárt. Az lemma miatt n i is véges lépésen belül kiterjeszt dik. Folytatva ezt a gondolatsort, véges lépésben a t célcsúcs is kiterjesztésre kerül majd, és terminál az algoritmus.

30 Heurisztikus gráfkeres algoritmusok Ez a folyamat csak abban az esetben zajlik le másképp, ha az algoritmus már korábban, a t kiterjesztése el tt terminál. Ez azonban nem következhet be a NYÍLT halmaz kiüresedésével, hiszen annak mindig lesz egy az α útról származó eleme. Kizárólag egy másik (nem feltétlenül optimális megoldású) célcsúcs megtalálásával állhat le korábban a keresés. Összességében tehát az algoritmus biztosan talál egy megoldást. Ez a tétel lényegesen különbözik a és a tételek állításaitól. Nem mondja, hogy az A algoritmus mindenképpen terminál, csak rámutat arra, hogy ha létezik megoldás, akkor fog találni egyet akár még végtelen δ-gráfban is A algoritmus Az A algoritmus heurisztikus függvénye egy nem-negatív értékkel becsüli a célhoz vezet hátralev optimális út költségét. Ha ez a függvény ráadásul alsó becslést ad, akkor egy min ségében új algoritmushoz jutunk. Az A algoritmus olyan A algoritmus, amelyik heurisztikus függvénye megengedhet (admissible), azaz minden n N csúcsra fenn áll, hogy h(n) h (n). Néz pont kérdése, hogy az A algoritmust speciális A algoritmusnak tekintjük-e (mi ezt tesszük), vagy speciális heurisztikát használó A algoritmusnak. A mi álláspontunk mellett az szól, hogy az A algoritmusnak megváltoznak a tulajdonságai az A algoritmushoz képest. Könny látni, hogy egy megengedhet heurisztika minden célcsúcsban nulla értéket ad. Az EGK nemcsak A, hanem egyben A algoritmus is, hiszen az azonosan nulla heurisztika biztos alsó becslést ad a hátralev optimális út költségére. A 15-ös kirakó játék esetén a W is és a P is alulról becsüli a hátralev lépések számát, azaz mindkett megengedhet. A W durvább becslést ad azzal, hogy csak a rossz, nem a célbeli helyén álló lapocskák számát mutatja, a P ennél nomabb, hiszen azt adja össze, hogy minimálisan mennyit kell különkülön a lapocskákat vízszintes és függ leges irányban elmozdítani ahhoz, hogy a célbeli helyükre kerüljenek. Az alábbi lemma azt mondja ki, hogy a kiterjesztésre kiválasztott csúcsok kiértékel függvényértéke nem lehet nagyobb, mint az optimális megoldás költsége lemma. Az A algoritmus által kiterjesztett minden n csúcsra fenn áll, hogy f(n) f (s). Bizonyítás. Ha nincs megoldási út az algoritmus által vizsgált δ-gráfban, akkor az f (s) végtelen nagynak tekinthet, ilyenkor az állítás triviális. Ha van megoldás, akkor legyen az α egy s t optimális megoldási út. Amíg

31 32.4. Az A algoritmus család 1615 az algoritmus nem terminál (tehát a t célcsúcsot sem terjesztette ki) a lemma miatt az α úton mindig lesz egy olyan m N csúcs, amelyik az n csúcs kiterjesztésekor éppen nyílt és g(m) = g (m). Az algoritmus az n csúcsot terjeszti ki az m ellenében, azaz f(n) f(m). Az f(m) viszont felírható g (m)+h(m) alakban, ahol a h(m) h (m) a heurisztika a megengedhet sége miatt, így f(m) g (m) + h (m) = f (m) áll el. Az f állandó egy optimális megoldási út mentén, azaz f (m) = f (s). Összeolvasva megkapjuk a bizonyítandó állítást: f(n) f(m) = g(m)+h(m) = g (m)+h(m) g (m)+h (m) = f (m) = f (s). A következ tétel talán a leggyelemreméltóbb eredménye az egész fejezetnek tétel. Ha egy δ-gráfban létezik megoldás, akkor az A algoritmus egy optimális megoldás megtalálásával terminál. Bizonyítás. Mivel az A algoritmus egy speciális A algoritmus, ezért a tétel érvényes rá: talál megoldást. Mindössze azt kell csak megmutatnunk, hogy az általa talált megoldás optimális is. Tegyük fel indirekt módon, hogy ez nem igaz: amikor egy t célcsúcs kiterjesztésével terminál, akkor g(t) > f (s). De a miatt (speciálisan t-re felírva) f(t) f (s). Az f(t) = g(t) + h(t), ahol a h(t) a megengedhet ség miatt biztosan nulla, azaz g(t) f (s). Ez ellentmond az indirekt feltevésünknek A c algoritmus A heurisztikára tett további megszorításokkal növelni lehet az A algoritmus el nyös tulajdonságait. Az A c algoritmus olyan A algoritmus, amelyik heurisztikus függvénye monoton (monotone restriction), azaz minden (n, m) A élre fenn áll, hogy h(n) h(m) c(n, m). A monoton tulajdonság a heurisztikus függvény által adott becslés következetességére utal. Ilyenkor ugyanis nem fordulhat el az, hogy a heurisztika rossznak látná a cél elérésének esélyét egy csúcsból, miközben a csúcsból kis költség lépéssel elért utódcsúcsot már hirtelen igen ígéretesnek tartaná. Az azonosan nulla heurisztikus függvény monoton, így már meg sem lep dünk azon, hogy az EGK egy speciális A c algoritmus is. De monoton tulajdonságú a 15-ös kirakó játék W és P heurisztikája is, hiszen mindkét heurisztika legfeljebb eggyel csökken egy lépés során.

32 Heurisztikus gráfkeres algoritmusok ábra. Példa nem mononoton megengedhet heurisztikára (s startcsúcs, t célcsúcs). Felvet dhet az a kérdés, hogy van-e egyáltalán olyan megengedhet heurisztika, amelyik nem monoton. Az alábbi ábra egy ilyenre mutat példát. Jól látható, hogy a heurisztikus függvény minden csúcsban alulról becsli a célba vezet hátralev út költségét (tehát megengedhet ), de az (s, n) él mentén nem teljesül a monoton tulajdonság, hiszen h(s) h(n) > c(s, n) lemma. (háromszög egyenl tlenség) Ha a h heurisztika monoton, akkor nemcsak az élekre, hanem bármely α {n m} útra is fenn áll, hogy h(n) h(m) c(α). Bizonyítás. Vegyünk egy α = (n, n 1 ), (n 1, n 2 ),..., (n k 1, m) utat, ahol n = n 0 és n k = m. A h monoton, ezért az út éleire fenn áll a monoton tulajdonság: h(n 0 ) h(n 1 ) c(n 0, n 1 ) h(n k 1 ) h(m) c(n k 1, m) Adjuk össze ezeket az egyenl tlenségeket, és azt kapjuk:... h(n) h(m) i=1..k c(n i 1, n i ) = c(α). A lemma következménye, hogy bármely n, m N csúcsra a h(n) h(m) c (n, m) összefüggés is teljesül. Ha ugyanis nincs n m út, akkor c (n, m) =, azaz az állítás triviális, egyébként meg c (n, m) az n m út költsége, amely útra a lemma állítása ugyanúgy igaz, mint bármelyik más n m útra tétel. Ha egy heurisztikus függvény monoton és a célcsúcsokban nulla értéket vesz fel, akkor szükségképpen megengedhet is. Bizonyítás. Rögzítsünk egy tetsz leges n N csúcsot és mutassuk meg, hogy h(n) h (n). A lemma el bb taglalt következménye miatt minden t T célcsúcsra is fenn áll, hogy h(n) h(t) c (n, t). Ennél fogva a legolcsóbb n T útra is, amelynek költségét korábban a c (n, T )-vel jelöltük,

33 32.4. Az A algoritmus család 1617 és ami deníció szerint a h (n). Teljesül tehát a h(n) h(t) h (n), de feltétel volt, hogy h(t) = 0, így h(n) h (n). Ennek a tételnek a gyakorlati haszna az, hogy egy A c algoritmus felismerésénél nem kell az alkalmazott heurisztikus függvény megengedhet ségét igazolni. Elég belátni, hogy monoton és a célcsúcsokban nulla értéket vesz fel. A monoton tulajdonság igazolása általában könnyebb a megengedhet ség bizonyításánál, hiszen egy adott heurisztikus függvényt a szintén ismert élsúlyokkal kell összehasonlítani (h(n) h(m) c(n, m)), szemben azzal, amikor a csak elméletben létez hátralev optimális költségfüggvénnyel kell összevetni (h(n) h (n)) lemma. Amikor az A c algoritmus egy n N csúcsot kiterjeszt, akkor már ismeri a startcsúcsból hozzá vezet optimális utat, azaz g(n) = g (n). Bizonyítás. Tegyük fel indirekt módon, hogy az n kiterjesztésekor g(n) > g (n). (g(n) < g (n) nyilván nem lehetséges.) Biztos vezet a startcsúcsból út az n csúcsba, így létezik s n optimális út is. A lemma miatt van olyan m N csúcs a vizsgált s n optimális úton, amelyre m NYÍLT és g(m) = g (m). Az indirekt feltevés miatt ez az m nem lehet azonos n- nel, azaz az algoritmus az n csúcsot m ellenében választja ki kiterjesztésre, tehát f(n) f(m). Tudva, hogy f(m) = g(m) + h(m) = g (m) + h(m), és a lemma miatt h(m) h(n) c (m, n), azt kapjuk, hogy f(m) g (m) + c (m, n) + h(n). Az m csúcsot is tartalmazó s n optimális úton érvényes, hogy g (m) + c (m, n) = g (n). Felhasználva az indirekt állítást is az f(n) f(m) = g(m) + h(m) = g (m) + h(m) g (m) + c (m, n) + h(n) = g (n) + h(n) < g(n) + h(n) = f(n) ellentmondásra jutunk. Ennek a lemmának egyenes következménye az alábbi tétel tétel. Az A c algoritmus m ködése során minden csúcs legfeljebb egyszer terjeszt dik ki. Bizonyítás. Nyilvánvaló, hogy ha az algoritmus g(n) = g (n) mellett terjeszt ki egy n N csúcsot, akkor nem fordulhat többé el, hogy talál az n csúcshoz egy minden eddiginél, azaz a g (n)-nél is olcsóbb utat. Emiatt egy zárt csúcs nem kerülhet vissza a NYÍLT halmazba, tehát nem is kerülhet sor az újbóli kiterjesztésére. Így arra a korábban feltett kérdésre is választ kaptunk, hogy hogyan lehet

34 Heurisztikus gráfkeres algoritmusok úgy irányítani egy gráfkeresést, hogy ne keletkezzenek inkorrekt csúcsok. Az inkorrekt csúcsok kialakulása ugyanis a zárt csúcsok újbóli kiterjesztésének következményei. Gyakorlatok Mutassuk meg, hogy az A algoritmus minden olyan n csúcsot kiterjeszt, amely bekerül a NYÍLT halmazba és az f(n) < f (s) teljesül rá Bizonyítsuk be, hogy ha az A algoritmus egy n csúcsot f(n) kiértékel függvényérték mellett kiterjeszt, akkor minden olyan m csúcsot kiterjeszt, amelyik bekerül a NYÍLT halmazba és az f(m) < f(n) teljesül rá Lássuk be, hogy az A c algoritmus által kiterjesztett csúcsok kiértékel függvényértékei monoton növeked számsorozatot alkotnak Az A algoritmus hatékonyságának elemzése Láttuk, hogy az A algoritmus eredményesség szempontjából a legtöbbet nyújtja: optimális megoldást talál, ha van megoldás. A továbbiakban ennek az algoritmusnak a hatékonyságát vizsgáljuk meg. A hatékonyság vizsgálat során olyan útkeresési feladatok megoldását elemezzük, amelyekhez ismerünk megengedhet heurisztikákat (csak ekkor van ugyanis értelme az A algoritmusról beszélni). Feltesszük, hogy ezen feladatoknak van megoldása, hiszen az A algoritmus csak ebben az esetben terminál biztosan. Tapasztalni fogjuk, hogy a hatékonysági vizsgálataink rendhagyóak lesznek abból a szempontból, hogy sem a memória igényt, sem a futási id t nem tudjuk a megoldandó feladat méretének, azaz a keresés tárgyát képez reprezentációs gráf méretének függvényében megadni, hiszen a reprezentációs gráf végtelen nagy is lehet. Ezért a memória igény elemzésénél az A algoritmust más útkeres algoritmusokkal fogjuk összehasonlítani, a futási id t pedig a memória igény függvényében értékeljük majd Memória igény Egy gráfkeres algoritmus memória igényében az algoritmus által nyilvántartott keres gráf mérete dominál. A keres gráf mérete jól jellemezhet azzal, ha csak a lezárt, azaz a ténylegesen kiterjesztett csúcsok számát vizsgáljuk. Nem számítjuk tehát ide a megtalált célcsúcsot, amelynek kiterjesztése, pontosabban kiterjesztésre történ kiválasztása nem jár együtt az utódainak el állításával és megvizsgálásával. Mivel a keres gráf akkor a legnagyobb, amikor

35 32.5. Az A algoritmus hatékonyságának elemzése 1619 a keresés terminál, ezért a memória igényt a termináláskor ismert zárt csúcsok számával adjuk meg. Kétféle vizsgálatot is végzünk. El ször azt elemezzük, hogyan változik a memória igény akkor, ha ugyanazon feladatot eltér heurisztikus függvények mellett oldjuk meg. Utána az A algoritmust más, hasonló eredmény (azaz optimális megoldást adó) útkeres algoritmusokkal vetjük majd össze. Ez utóbbiak között lehetnek olyanok is, amelyek nem gráfkeres algoritmusok, ezért nem biztos, hogy ugyanúgy egy lépésben terjesztenek ki egy csúcsot, mint a gráfkeresések, hanem például egyenként tárják fel annak gyerekeit. Egy csúcsot ilyenkor is csak azután tekintünk lezártnak, ha már el állítottuk az összes gyerekét. Amíg tehát a gráfkereséseknél a kiterjesztés és a lezárás egymás szinonimái, addig más útkereséseknél csak a lezárást lehet értelmezni. Az összehasonlításoknál viszont nem egyszer en a zárt csúcsok számát vetjük majd össze, hanem ennél jóval er sebb kritériumot vizsgálunk. Legyenek X és Y útkeres algoritmusok. 1. Az X jobb Y -nál egy adott útkeresési problémára nézve, ha az X m ködése során az Y által lezárt csúcsok halmazának egy valódi részhalmazát zárja csak le. 2. Az X nem rosszabb Y -nál egy adott útkeresési problémára nézve, ha X m ködése során legfeljebb csak azokat a csúcsokat zárja le, amelyet az Y is lezár. Különböz heurisztikájú A algoritmusok memória igényének összehasonlítása A józan ész azt sejteti, hogy ha két heurisztika közül az egyik er sebb, mint a másik, akkor egy algoritmus az er sebb heurisztikával jobb, de legalább is nem rosszabb annál, amikor a gyengébb heurisztikát használja. Két heurisztika közül azt tekintjük er sebbnek, amelyik pontosabb becslést ad a hátralev optimális költségr l. Ha h 1 és h 2 megengedhet heurisztikák, akkor ezt leírhatja a h 1 h 2 összefüggés, hiszen ez már azt mutatja, hogy a h 2 közelebb simul alulról a h hátralev optimális költségfüggvényhez, mint a h 1. Az alábbi deníció egy ennél szigorúbb kritériumot használ. Legyen egy (R = (N, A, c), s, T ) reprezentációval megadott olyan útkeresési problémánk, amelyre ismert a h 1 illetve h 2 megengedhet heurisztikus függvény. Legyenek A 1 és A 2 olyan A algoritmusok, amelyek rendre a h 1 illetve h 2 heurisztikákat használják. Azt mondjuk, hogy az A 2 jobban informált, mint az A 1, ha minden n N T csúcsra teljesül, hogy h 1 (n) < h 2 (n). Az alábbi tétel állítása nem váratlan: az er sebb heurisztikát használó A algoritmus nem rosszabb, mint a gyengébb heurisztikát használó. Az azonban

36 Heurisztikus gráfkeres algoritmusok meglep, hogy ezt milyen körülményesen lehet csak bebizonyítani tétel. Legyenek A 1 és A 2 rendre a h 1 és h 2 heurisztikát használó A algoritmusok. Ha A 2 jobban informált, mint az A 1, akkor A 2 nem rosszabb A 1 -nél. Bizonyítás. Mutassuk meg az A 2 algoritmus által lezárt csúcsokra az A 2 terminálásakor nyilvántartott feszít fabeli mélységük (szintjük) szerinti teljes indukcióval, hogy azokat a csúcsokat az A 1 algoritmus is mind lezárja. A 0-dik szinten csak a startcsúcs van, amit vagy mindkett algoritmus lezár, ha a startcsúcs nem célcsúcs, vagy egyik sem, amennyiben a startcsúcs egyben célcsúcs is. A d-edik szintig minden csúcsról feltesszük, hogy ha azt A 2 lezárta, akkor A 1 is. Most pedig indirekt tegyük fel, hogy a d + 1-edik szinten van olyan m N csúcs, amit csak az A 2 zár le. (Megjegyezzük, hogy ha A 2 lezárja az m csúcsot, akkor m nem lehet célcsúcs.) Világos, hogy m csúcsnak be kell kerülnie a NYÍLT halmazba, ahhoz, hogy A 2 kiterjeszthesse. Ekkor egyrészt a lemma miatt f 2 (m) f (s) fennáll, ahol az f 2 (m) az m csúcs A 2 általi lezárásakor számolt kiértékel függvényértéke. Másrészt mivel az A 2 a d szinten keresztül talált utat az m csúcshoz, ezért az m csúcsnak a d szinten van egy A 2 által lezárt szül je, amelyet az indukciós feltevés miatt az A 1 is lezár. Következésképpen az m csúcs az A 1 m ködése során is bekerül a NYÍLT halmazba, de az indirekt feltevés miatt ott is marad. Amikor az A 1 terminál, akkor f 1 (m) f (s), ugyanis ha f 1 (m) < f (s) lenne, akkor az A 1 biztosan kiterjesztené az m csúcsot még az f (s) költség célcsúcs kiterjesztése el tt, ami ellentmond az indirekt feltevésnek. Harmadrészt g 2 (m) g 1 (m), mert az indukciós feltevés miatt az A 1 biztosan feltárja az m csúcshoz vezet A 2 által talált legolcsóbb, tehát d szint alatti utat, de lehet, hogy talált egy még olcsóbbat. Itt a g 1 az A 1 algoritmus költségfüggvénye annak terminálásakor, g 2 pedig az A 2 algoritmus által számolt költségfüggvény, amikor az m csúcsot kiterjeszti. Összegezve f 2 (m) f (s) f 1 (m) = g 1 (m) + h 1 (m) g 2 (m) + h 1 (m) < g 2 (m) + h 2 (m) = f 2 (m), ami ellentmondás, és ezzel beláttuk az indukciós lépést. A fenti tétel bizonyításában ki kellett használni a jobban informáltság éles kritériumát, amely megköveteli, hogy minden n nem célcsúcsra teljesüljön a h 1 (n) < h 2 (n). Két heurisztika összehasonlítására gyengébb kritériumokat is használhatunk, de ezekre nem ismerünk a fenti tételhez hasonló eredményeket. Ugyanakkor a gyakorlatban, egy-egy konkrét példán meggyelhet, hogy gyengébb kritérium alapján er sebbnek tartott heurisztikájú A

37 32.5. Az A algoritmus hatékonyságának elemzése 1621 algoritmus nemhogy nem terjeszt ki több csúcsot, hanem jóval kevesebb zárt csúccsal terminál, mint egy gyengébb heurisztikájú. Más szavakkal, az er sebb heurisztikájú A algoritmus jobb, a gyengébb heurisztikájú társánál. Példaként vegyük a 15-ös kirakó játék W és P heurisztikáit. Ezekre fenn áll, hogy W P, és vannak olyan nem célcsúcsok, ahol egyenl a két heurisztikus érték. Nem mondhatjuk tehát, hogy a P -t használó A algoritmus jobban informált, mint a W -t használó, de a konkrét futtatási eredmények a P -t használó algoritmus memória igényét jóval kisebbre mérik. Az alábbi táblázat a 15-ös kirakó játéknak néhány futtatási eredményét mutatja különböz távolságú start és cél esetén. Kiértékel függvény: g + 0 g + W g + P 6 lépés hosszú optimális megoldás esetén 13 lépés hosszú optimális n.a megoldás esetén 21 lépés hosszú optimális n.a megoldás esetén 30 lépés hosszú optimális n.a. n.a megoldás esetén 34 lépés hosszú optimális megoldás esetén n.a. n.a Ha egy feladathoz több (h 1,..., h k ) megengedhet heurisztikus függvényt is ismerünk, akkor a memória igény csökkentése érdekében elkészíthetjük e függvények maximumát: minden n csúcsnál a h(n) = max(h 1 (n),..., h k (n)) heurisztikus függvényértékkel számolunk. Az így kapott új heurisztikus függvény továbbra is megengedhet, de jobban simul alulról a h hátralev optimális költségfüggvényhez, azaz er sebb heurisztika, mint a komponens heurisztikák bármelyike. Ha ezzel nem is jutunk feltétlenül jobban informált A algoritmushoz, de a tapasztalatok alapján ez is kevesebb csúcs lezárásával terminál majd. Az A algoritmus memória igényének összehasonlítása más útkeres algoritmusokéval Megengedhet útkeres algoritmusoknak nevezzük azokat az algoritmusokat, amelyek (R = (N, A, c), s, T ) reprezentációval megadott útkeresési problémákat képesek megoldani úgy, hogy ha megengedhet heurisztikát építünk beléjük, akkor garantáltan optimális megoldás megtalálásával terminálnak, feltéve, hogy van a problémának megoldása. Ilyen megengedhet útkeres algoritmus az A algoritmus, amelyet

38 Heurisztikus gráfkeres algoritmusok megengedhet heurisztika esetén A algoritmusnak nevezünk. De jó példa az egyenletes gráfkeresés, az EGK is, amely bár nem használ heurisztikát, de garantáltan optimális megoldást talál, ha van megoldás. Megengedhet útkeres algoritmus az A algoritmus, amely egy olyan gráfkeres algoritmus, aminek kiértékel függvénye egy n nyílt csúcshoz a visszamutató pointerekkel nyilvántartott s n úton fekv m csúcsok g(m)+ h(m) értékeinek maximumát rendeli, azaz f(n) = max m s π ng(m) + h(m). Továbbá, ha döntenie kell egy célcsúcs és egy vele azonos függvényérték másik csúcs kiválasztása között, akkor mindig a célcsúcsot választja kiterjesztésre. De nemcsak gráfkeres algoritmus lehet megengedhet útkeres algoritmus. Az IDA (iteratívan mélyül A ) a nevével ellentétben egy iterációba szervezett visszalépéses keresés. Egyre növeked mélységi korlát mellett járja be a reprezentációs gráfot a mélységi bejárás elve szerint. A megengedhet heurisztikát arra használja, hogy egyrészt vágásokkal gyorsítson a keresésen, másrészt kiszámolja, hogy a következ iterációban mekkora mélységi korlátot kell használni ahhoz, hogy az els ként megtalált megoldási út garantáltan optimális költség legyen. Itt kell megjegyeznünk azt, hogy az ilyen nem gráfkeresést végz megengedhet útkeres algoritmusok memória igénye nem a lezárt csúcsok számától függ. Az IDA algoritmus, mint a visszalépésen kereséseké általában, csak az aktuális utat tartja a memóriában, memória igénye tehát a leghosszabb felderített út hosszával arányos. Azokat a lezárt csúcsokat, amelyekr l visszalépett, elfelejti, így azok nem terhelik a memóriát. (Ugyanezért viszont az IDA futási ideje jóval hosszabb lehet, mint egy gráfkeresésé, mert egy már lezárt, de elfelejtett csúcsot képes újra és újra lezárni, ráadásul az iterációba szervezés miatt ez több menetben is megismétl dhet.) Az ilyen nem gráfkeresést végz algoritmusoknál egy csúcs lezárását tágabban értelmezzük a csúcs kiterjesztésénél. Egy csúcs kiterjesztése során egy lépésben dolgozzuk fel annak gyerekeit; a lezárás több lépésben is történhet, és az összes gyerek feldolgozásával fejez dik be. Az alább bemutatott memória igényt tárgyaló eredmények a lezárt csúcsok számával kapcsolatosak. Az állítások a nem gráfkeresést végz megengedhet útkeres algoritmusokra is érvényesek, de csak a gráfkeresés jelleg megengedhet útkeres algoritmusok memóriaigényének összehasonlítására alkalmasak. Egy X és Y algoritmus memória igényének összehasonlításnál továbbra is azt vizsgáljuk, hogy egy feladaton az X által lezárt csúcsok halmaza részee (nem rosszabb), vagy valódi része-e (jobb) az Y által lezárt csúcsok halmazának. Ahhoz, hogy megállapítsuk, hogy X általában jobb-e, vagy általában nem rosszabb-e mint Y, a m ködésüket minden olyan útkeresési prob-

39 32.5. Az A algoritmus hatékonyságának elemzése 1623 lémára meg kell vizsgálni, amelyekhez ismerünk megengedhet heurisztikát. Ha ugyanahhoz a feladathoz több megengedhet heurisztika is kapcsolható, akkor érdemes (legalábbis a memóriaigény vizsgálata során) ezekre önálló feladatokként gondolni, azaz a heurisztikát amelyet eddig inkább az algoritmus speciális része volt most a feladat részének fogjuk tekinteni annak ellenére, hogy nem jelenik meg a feladat reprezentációjában. A megengedhet heurisztikájú útkeresési feladatokat röviden megengedhet feladatoknak fogjuk nevezni. Vizsgálataink során fontos szerep jut a megengedhet feladatok két speciális csoportjának. Az egyik a monoton és célban nullát adó heurisztikus függvény (ezek a tétel értelmében megengedhet ek is) feladatok lesznek. A másik csoportba azok a megengedhet heurisztikájú feladatok tartoznak, amelyekben létezik olyan optimális megoldási út, hogy annak mentén - a célcsúcs, és esetleg a startcsúcs kivételével - minden csúcsra a h < h egyenl tlenség áll fenn. Annak eldöntésére, hogy egy feladatosztályon egy X algoritmus a memória igényt tekintve hatékonyabb-e egy Y algoritmusnál, többféle deníciót lehet használni. Az egyik sokszor használt kritérium szerint egy X algoritmus akkor uralkodik egy Y algoritmus felett egy adott feladatosztályra nézve, ha a feladatosztály minden feladatára az X nem rosszabb Y -nál. Ha emellett még az is igaz, hogy az Y nem uralkodik az X felett az adott feladatosztályra nézve (azaz legalább egy feladaton az X jobb az Y -nál), akkor az X szigorúan uralkodik Y felett az adott feladatosztályra nézve. A mi célunk az, hogy az A algoritmus uralkodását vizsgáljuk a megengedhet útkeres algoritmusok körében, azaz nem egy algoritmust egy másikkal, hanem egy algoritmust egy algoritmus osztállyal kell összevetnünk. Tovább bonyolítja a helyzetet, hogy az A algoritmus (több más útkeres algoritmushoz hasonlóan) nem determinisztikus, hiszen el fordul, hogy kizárólag a kiértékel függvény értékei alapján nem lehet egyértelm en kiválasztani kiterjesztésre a soron következ csúcsot a NYÍLT halmazból. (Más útkeres, nem gráfkeres algoritmusoknál ehhez hasonló helyzet az, amikor azt kell eldönteni, hogy egy csúcs melyik utódjára lépjünk tovább.) Az egyformán jónak t n lehet ségek közül véletlenszer en is választhat az A algoritmus, de valamilyen másodlagos elv (tie-breaking rule) alkalmazásával a m ködése determinisztikussá tehet. Ezért az A algoritmusra úgy tekinthetünk, mint arra az algoritmus családra, amely az A algoritmus determinisztikus változatait tartalmazza. Ennek megfelel en kiterjesztjük az uralkodás fogalmát algoritmus osztályok (algoritmus családok) közötti összehasonlításra. Az X algoritmus osztály uralkodik az Y algoritmus osztály felett egy adott feladatosztályra nézve, ha minden feladaton az Y minden y

40 Heurisztikus gráfkeres algoritmusok tagjára van olyan x tagja az X-nek, hogy x nem rosszabb, mint az y. Ha emellett az Y nem uralkodik az X felett adott feladatosztályra nézve (azaz legalább egy feladaton az Y bármelyik y változatához találni az X-nek olyan x változatát, amelyik jobb y-nál), akkor az X szigorúan uralkodik Y felett az adott feladatosztályra nézve. Ennyi el készítés után térjünk rá annak elemzésére, hogy vajon az A algoritmus (pontosabban algoritmus család) hatékonyabb-e a memória igény tekintetében az összes megengedhet útkeres algoritmusnál, vagy ha nem, akkor van-e nála hatékonyabb algoritmus. A továbbiakban, ha mást nem mondunk, akkor egy algoritmuson mindig megengedhet útkeres algoritmust értünk, feladaton pedig egy olyan megengedhet útkeresési problémát, amelynek van megoldása. Egy A algoritmus memória igényének kiszámításánál meghatározóak azok a csúcsok, amelyeket biztosan lezár. Ha egy NYÍLT halmazba került n csúcsra mindvégig az f(n) > f (s) teljesül, akkor azt a csúcsot biztosan nem terjeszti ki az A, mert ez ellentmondana a lemmának. De mi a helyzet azokkal a nyílt csúcsokkal, amelyekre f(n) f (s) áll fenn? Mivel az A a megengedhet feladatokon optimális megoldást talál, így a terminálása egy f (s) kiértékel függvényérték célcsúcs kiválasztásakor következik be. Ezért közvetlenül a terminálás el tt már nem lehet olyan n nyílt csúcs, amelyre az f(n) < f (s) feltétel igaz lenne. Következésképpen azokat a nyílt n csúcsokat, amelyre f(n) < f (s) teljesül (ez így is marad, mivel az A m ködése során az f(n) értéke nem n het) biztosan lezárja az A. Ahhoz viszont, hogy egy ilyen n csúcs bekerüljön a NYÍLT halmazba az is kell, hogy vezessen hozzá a startcsúcsból csupa biztosan lezárt csúcson keresztül út. Egy olyan n nyílt csúcs viszont, amelyre az f(n) = f (s) áll fenn, csak akkor kerül biztosan lezárásra, ha ezen a csúcson keresztül vezet az egyetlen optimális megoldási út. Ha ellenben van n-t elkerül optimális megoldási út, akkor a lemma miatt mindig lesz a NYÍLT halmazban ez utóbbi útnak egy olyan m csúcsa, amelyre fenn áll a g(m) = g (m), a h megengedhet sége miatt pedig f(m) = g (m) + h(m) g (m) + h (m) = f (m) = f (s). Ha tehát egyszerre van a NYÍLT halmazban m és n, akkor f(m) f (s) = f(n), és az A algoritmus családnak biztos van olyan tagja, amelyik ilyenkor az m-nek kedvez. Összefoglalva, egy feladat reprezentációs gráfjának azon csúcsait az A algoritmus által biztosan lezárt csúcsoknak nevezzük, amelyekhez vezet olyan út a startcsúcsból, amelyiknek a startcsúcs kivételével minden n csúcsa valamikor nyílt lesz és az f(n) < f (s) feltétel teljesül rá. A startcsúcs kivételét ebben a meghatározásban az indokolja, hogy amen-

41 32.5. Az A algoritmus hatékonyságának elemzése 1625 nyiben az nem célcsúcs, akkor biztosan lezárja valamennyi gráfkeres algoritmus, így az A algoritmus is, még f(s) = f (s) esetén is lemma. A monoton és célban nulla értéket adó heurisztikájú feladatokon bármelyik megengedhet útkeres algoritmus lezárja azokat a csúcsokat, amelyeket az A algoritmus biztosan lezár. Bizonyítás. Tegyük fel indirekt módon azt, hogy van olyan ((N, A, c), s, T ) feladat egy h monoton és célban nulla heurisztikával, hogy annak egyik n N csúcsát az A minden változata lezárja, de egy Y megengedhet útkeres algoritmus nem. Ebben a feladatban kell lennie az n csúcsot elkerül optimális megoldási útnak is, különben az Y algoritmus nem találhatna optimális megoldást (hiszen ha nem zárja le az n-t, akkor nem vizsgálja meg az utódait sem), ami ellent mond annak, hogy Y egy megengedhet útkeres algoritmus. Mivel pedig a g (n) + h(n) f(n) mindig igaz, és valamikor f(n) < f (s) is, így a g (n) + h(n) < f (s) is fenn áll. Vezessünk be két jelölést. Legyen D = g (n) + h(n), és C = f (s), amelyekre a fentiek szerint D < C teljesül. Konstruáljunk egy új feladatot az eddig vizsgált ((N, A, c), s, T ) feladat felhasználásával. Egészítsük azt ki egy új célcsúccsal (t), és egy új (n, t) éllel, rendeljünk az új élhez is súlyt és az új célcsúcshoz heurisztikus értéket. Az új feladat tehát ((N t, A (n, t), c), s, T t), amelynek c súlyfüggvénye azonos az eredeti feladat súlyfüggvényével attól eltekintve, hogy kiterjesztjük az új élre is: c(n, t) = h(n)+(c D)/2. Kiterjesztjük az eredeti feladat heurisztikus függvényét is az új feladatra úgy, hogy az új célcsúcsban legyen nulla: h(t) = 0. Megmutatható, hogy az új feladat heurisztikája monoton és célban nulla érteket vesz fel. Ehhez egyrészt látjuk, hogy a heurisztika az eddigi célcsúcsokon kívül az új célcsúcshoz is nulla értéket rendel, másrészt elég megmutatni, hogy az eddigi éleken kívül az új él mentén is monoton tulajdonságú. Ez az új él súlya miatt adódik: h(n) h(t) = h(n) h(n) + (C D)/2 = c(n, t) Megjegyezzük, hogy az új feladat heurisztikája a tétel értelmében ezek szerint megengedhet is. Az új feladatnak egyetlen optimális megoldása az s t út, ugyanis ennek költsége (g (t)) kisebb az eredeti feladat optimális megoldásának költségénél (C-nél): g (t) = g (n) + c(n, t) = g (n) + h(n) + (C D)/2 = D + (C D)/2 = (C + D)/2 < C.

42 Heurisztikus gráfkeres algoritmusok Az Y nem zárja le az n csúcsot, ezért az s t megoldást sem találhatja meg. Ez ellentmondás, hiszen az Y megengedhet útkeres algoritmus, tehát optimális megoldást kellene találnia egy megengedhet feladaton (az új feladat pedig ilyen). Ennek a lemmának a következménye az alábbi tétel tétel. A monoton és célban nullát adó heurisztikájú feladatokra nézve az A algoritmus család uralkodik a megengedhet útkeres algoritmusokon. Bizonyítás. Válasszunk egy tetsz leges monoton és célban nulla heurisztikájú F feladatot és egy Y megengedhet útkeres algoritmust. Ha az F feladatban létezik olyan optimális megoldási út, hogy annak minden csúcsát biztosan lezárja az A algoritmus, akkor az A algoritmus egyik tagja sem fog a biztosan lezárandó csúcsokon kívül mást lezárni, azaz olyan n csúcsokat, amelyekre f(n) = f (s). Az Y a lemma miatt minden olyan csúcsot lezár, amelyet A biztosan lezár, azaz Y bármelyik változatára van annál nem rosszabb A változat (s t az összes A változat ilyen). Ha az F feladat nem tartalmaz el bb jellemzett optimális megoldási utat, akkor készítsük el az A algoritmusnak azt a változatát, amelyik a biztosan lezárt csúcsokon kívül csak azokat a csúcsokat zárja le, amelyek az Y (vagy annak egy változata) által talált optimális megoldási úton vannak. Más szavakkal, ha a nyílt halmazban több olyan n csúcs is van, amelyre f(n) = f (s) igaz, akkor ezek közül az Y által talált megoldási úton fekv kiválasztását részesítsük el nyben. Az A ezen változata csak olyan csúcsokat zár le, amelyeket az Y is lezár. Sajnos az A algoritmusról általánosabb esetben, azaz az összes megengedhet feladatra nézve nem tudunk a fenti tételhez hasonló eredményt mutatni. Lehet ugyanis olyan feladatot és olyan algoritmust találni, hogy ennél az algoritmusnál nincs az A algoritmusnak nem rosszabb változata. Tekintsük a szélességi gráfkeresés alábbi módosítását. A kiterjesztési sorrend a csúcsok mélységét l függ. Egy m csúcs kiértékel függvényértékét a csúcs els felfedezésekor talált úton fekv n szül csúcsa alapján az f(m) := f(n) + 1 képlettel számoljuk majd. Ez alól egyetlen kivétel lesz: a startcsúcs "legutolsó" gyereke esetében a mélységet 2.5-re állítjuk. Ez arra szolgál, hogy a legutolsó gyereket majd csak a második szinten lev csúcsok után válassza ki az algoritmus kiterjesztésre. A keresés a mélység mellett hasonlóan minden más gráfkereséshez külön számolja a g költségfüggvényt is, és a visszamutató pointereket is ennek megfelel en változtatja. Amikor az algoritmus egy célcsúcsot talál, akkor nem áll le, hanem további megoldásokat keres, és a talált

43 32.5. Az A algoritmus hatékonyságának elemzése ábra. Példa, ahol SZGK nem terjeszt ki egy az A által biztosan kiterjesztett csúcsot (a nem jelzett heurisztikus értékek nullák, s startcsúcs, t célcsúcs). legolcsóbb megoldást jegyzi meg az odavezet út C költségével együtt. Ezt a költséget vágó heurisztikaként is felhasználja: ha ugyanis nincs remény arra, hogy egy kiterjesztésre kiválasztott n csúcson keresztül egy minden eddiginél olcsóbb megoldást találjunk, mert max k {s n} g(k)+h(k) C, akkor n csúcs gyerekeit nem állítjuk el, az n csúcs kikerül a NYÍLT halmazból. Az itt bemutatott SZGK algoritmus megengedhet. Szélességi stratégiája miatt biztos talál megoldást, ha van, ezután pedig a vágó heurisztika garantálja a terminálást. Mivel az optimális megoldás a vágó heurisztika által kijelölt mélységi korláton belül található (ezt biztosítja a megengedhet h függvény felhasználása) ahol a keresés minden utat megvizsgál, így biztos megtalálja az optimális megoldást. Vegyük az SZGK algoritmusnak a ábrán látható feladatra azt a változatát, amelyik jobbról balra haladva terjeszti ki egy szint csúcsait. Kiterjeszti az s csúcsot, majd a k és m csúcsokat is, de az n-t, mint legutolsó gyerekcsúcsot még nem, hanem el bb megtalálja a t célcsúcshoz vezet 5 költség utat. Ezután pedig mivel az n-hez vezet eddig talált legolcsóbb (nyilvántartott) úton g(m) + h(m) = 6, és C = 5, nem kerül sor az n csúcs gyerekeinek el állítására. Ugyanezen a feladaton ellenben az A algoritmus mindenképpen (minden változata) kiterjeszti az n csúcsot közvetlenül az s csúcs kiterjesztése után. Az A algoritmusnak tehát nincs olyan változata, amelyik nem rosszabb az SZGK bármelyik változatánál, tehát az A algoritmus nem uralkodik az SZGK algoritmuson a megengedhet feladatokra nézve. Ez azt is jelenti, hogy az A nem uralkodik az összes megengedhet útkeres algoritmuson sem a megengedhet feladatokra nézve. De vajon van-e az összes megengedhet útkeres algoritmuson uralkodó

44 Heurisztikus gráfkeres algoritmusok másik algoritmus? Az SZGK biztos nem ilyen, hiszen ennek mindegyik változata kiterjeszti az m csúcsot, amelyet A algoritmus egyik változata sem. Tehát nem mondhatjuk, hogy az SZGK nem rosszabb az A -nál, ennél fogva nem is uralkodik rajta. Ez az érdekes kölcsönhatás, amely a fenti példában az A és az SZGK között bekövetkezett, nem véletlen. Ezt mutatja az alábbi lemma lemma. Vegyünk egy olyan megengedhet feladatot, ahol van olyan optimális megoldási út, amely mentén minden csúcsra (a cél csúcs és esetleg a startcsúcs kivételével) fenn áll a h < h feltétel. Ha egy megengedhet útkeres algoritmus egy Y változata nem zárja le ennek a feladatnak egy olyan csúcsát, amelyet az A biztosan lezár, akkor ugyanezen feladatnak kell lennie olyan csúcsának is, amelyet Y lezár, de az A algoritmus egyetlen változata sem. Bizonyítás. Tegyük fel indirekt módon azt, hogy a lemma állításában szerepl F = ((N, A, c), s, T ) megengedhet feladatnak van egy olyan A által biztosan kiterjesztett n csúcsa, amelyet egy megengedhet útkeres algoritmus Y változata nem zár le, és egyébként Y csak csúcsokat zár le, amelyet A is lezár. Konstruálni fogunk egy másik olyan megengedhet feladatot, amelyben az Y nem tud optimális megoldást találni, és ez ellentmond annak, hogy Y egy megengedhet útkeres algoritmus. Figyeljük meg az A algoritmust az F feladat megoldása során, és jelöljük D-vel azon csúcsok kiértékel függvényértékeinek maximumát, amelyeket az A biztosan kiterjeszt; C-vel az F feladat optimális megoldási költségét; G-vel a termináláskor el állt keres gráfot; c G (m, k)-val a G-beli legolcsóbb m k út költségét (ha nincs ilyen út, akkor ez végtelen). Nyilván fennáll, hogy D < C. Legyen F = (G (n, t), c), s, T t) olyan feladat, amelynek c súlyfüggvénye azonos az F feladat súlyfüggvényével attól eltekintve, hogy kiterjesztjük az új élre is: c(n, t) = (D + C)/2 c G (s, n). (Az s n út biztos létezik, és a c(n, t) költség pozitív, hiszen c G (s, n) D < C.) Kiterjesztjük az eredeti feladat heurisztikus függvényét is az új feladatra úgy, hogy az új célcsúcsban legyen nulla: h(t) = 0. Ett l kezdve meg kell különböztetni az F és az F feladatban c függvényeit, és ennek megfelel en a h és g függvényeit is. Ennek érdekében használjuk az a c F, h F, g F jelöléseket. A c F (m, k) = c G (m, k) kivéve azokat az eseteket, amikor a k speciálisan a t célcsúcs. Ilyenkor c F (m, t) = c F (m, n) + c(n, t). Mivel az új feladat s t megoldási útjának költsége kisebb, mint az eredeti feladat optimális megoldási költsége: c F (s, t) = c F (s, n)+c(n, t) = c F (s, n)+(d+c)/2 cg (s, n) = (D+C)/2 < C,

45 32.5. Az A algoritmus hatékonyságának elemzése 1629 ezért az új feladat egyetlen optimális megoldása az s t út lesz. A h heurisztikus függvény az F feladaton is megengedhet, azaz G minden u csúcsára h(u) h F (u). Ugyanis azoknak az u csúcsoknak, amelyeket az F feladaton m ködve nem terjesztett ki az A (azaz g(u)+h(u) C), nincsenek utódai a G-ben. Ezért ha u nem célcsúcs, akkor h F (u) = ; ha u célcsúcs, akkor h(u) = 0, tehát h(u) h F (u) biztos teljesül. Mi a helyzet azokkal az u csúcsokkal, amelyeket az A kiterjesztett (azaz g(u) + h(u) D < C)? Ha feltesszük, hogy az egyik ilyen u csúcsra a h(u) > h F (u) fennáll, akkor a g(u) + h(u) > g(u) + h F (u) c F (s, u) + c F (u, T ) == (D + C)/2 > D, ellentmondáshoz jutunk. Feltételezésünk szerint az F feladat megoldásakor az Y algoritmus nem zárja le az n csúcsot, így az F feladatnál is hasonlóan kell m ködnie. Ha viszont Y elkerüli az n csúcs kiterjesztését, akkor nem fogja megtalálni az s t optimális megoldást, amely ellentmond annak, hogy megengedhet útkeres algoritmus. A ábra feladata éppen a lemmában vázolt feladat típusba tartozik. A lemma arra mutat rá, hogy nem is olyan könny olyan algoritmust találni, amelyen az A nem uralkodik, de az uralkodik A -on. A lemma megmutatta, hogy melyek azok a megengedhet feladatok, amelyekre nézve az A algoritmus ugyan nem uralkodik minden megengedhet útkeres algoritmuson, de olyan algoritmus sincs, amely akárcsak egy ilyen feladaton jobb lenne az A algoritmusnál. Ez a gondolatsor vezet el az alábbi tételhez tétel. Nincs olyan megengedhet útkeres algoritmus, amelyik uralkodna az összes megengedhet útkeres algoritmuson a megengedhet feladatokra nézve. Bizonyítás. Ha lenne ilyen uralkodó Y algoritmus, akkor ennek a lemmában vázolt speciális megengedhet feladatokra nézve is uralkodnia kell többek között az A algoritmuson is. De éppen a lemma miatt egyetlen ilyen speciális megengedhet feladaton sem teheti meg, hogy olyan csúcsot ne zárjon le, amelyet A lezár. Az Y tehát ugyanazokat a csúcsokat zárja le a speciális megengedhet feladatokon is (így a ábra feladatán is), mint az A algoritmus. De az ábra feladatán az SZGK algoritmus nem zár le olyan csúcsot, amelyet az A algoritmus minden változata is, és az Y is lezár. Ez pedig cáfolja, hogy Y uralkodna minden megengedhet útkeres algoritmuson, hiszen az SZGK algoritmuson nem uralkodik. Megmutattuk, hogy az A algoritmus nem talál legy z re a megengedhet útkeres algoritmusok között két speciális megengedhet feladatokra nézve. Hiszen az A uralkodik a monoton és célban nulla heurisztikájú feladatokra

46 Heurisztikus gráfkeres algoritmusok nézve, és nincs nála jobb az olyan feladatokon sem, ahol van olyan optimális megoldási út, amely mentén minden csúcsra (a cél csúcs és esetleg a startcsúcs kivételével) fennáll a h < h feltétel. És bár igaz, hogy A nem uralkodik a megengedhet útkeres algoritmusokon az összes megengedhet feladatra nézve, de erre más algoritmus sem képes. A teljes képhez hozzátartozik, hogy ismerünk olyan algoritmust, amely uralkodik, s t szigorúan uralkodik az A algoritmuson a megengedhet feladatokra nézve. Ez a már említett A algoritmus. A vizsgált két speciális megengedhet feladatosztály feladatain az A "csak" nem rosszabb az A - nál, de lehet e speciális feladatosztályokon kívül olyan megengedhet útkeresési feladatot találni, ahol jobb. Ugyanakkor a tétel értelmében ez az algoritmus sem uralkodik az összes megengedhet útkeres algoritmuson a megengedhet útkeresési feladatokra nézve Futási id Egy gráfkeresés futási ideje egyfel l az iterációk számától (a kiterjesztések számától) függ, másfel l egy-egy iterációs lépés végrehajtási idejét l. Az utóbbi azonban csak a konkrét feladatok ismeretében becsülhet, mert ez egyrészt a kiterjesztend csúcs kiválasztásának, pontosabban az ehhez használt heurisztikus függvényérték kiszámításának idejét l, másrészt egy csúcs átlagos gyerekszámától függ. A futási id általános elemzésénél mindezek miatt csak az iterációk számát vizsgáljuk. Az iterációk (kiterjesztések) számát a zárt (kiterjesztett) csúcsok számának függvényében fogjuk megadni. Jelölje a továbbiakban k a termináláskor meglév zárt csúcsok számát. Nyilvánvaló, hogy legalább k iterációra szükség van ahhoz, hogy k zárt csúcs létrejöhessen. A futási id re adható alsó korlát tehát k. Ez éles korlát, hiszen ha az A algoritmus speciálisan egy A c algoritmus, akkor egy csúcsot legfeljebb egyszer terjeszt csak ki ( tétel). Sajnos k zárt csúcs el állítása a k-nál általában jóval több kiterjesztést igényel. Egy csúcs elvileg annyiszor terjeszt dhet ki, ahány különböz körmentes út vezet hozzá a startcsúcsból. Persze ehhez az is kell, hogy mind az élsúlyok, mind a heurisztikus függvényértékek olyanok legyenek, hogy a csúcsot el ször a legdrágább út mentén találja meg a keresés és utána ki is terjessze, majd egy kicsivel olcsóbb út mentén és újra kiterjessze, és csak a legutoljára találja meg a legolcsóbb utat, amely után megint ki kell terjeszteni. Az ábrán látható úgynevezett Martelli-féle gráfnak k + 1 darab csúcsa van. A csúcsokat megsorszámozzuk: 0-dik a startcsúcs, a k-dik a célcsúcs. A gráfban a lehet legtöbb olyan élt vesszük fel, hogy a startcsúcsból egy közbees csúcsba a lehet legtöbb körmentes úton lehessen eljutni. A k 1-dik

47 32.5. Az A algoritmus hatékonyságának elemzése 1631 csúcsból a célcsúcsba egyetlen él vezet: N = {n i i = 0... k}, T = {n k } A = {(n i, n j ) 0 i < j < k} {(n k 1, n k )} c(n i, n j ) = 2 k 2 i 2 k 1 j + j i (0 i < j < k) h(n i ) = c(n 0, n k 1 ) c(n 0, n i ) + k 1 i (0 < i < k), h(n 0 ) = h(n k ) = 0 c(n k 1, n k ) = h(n 1 ) k ábra. Martelli gráfja. Ebben a gráfban minden csúcs a lehet legtöbbször terjeszt dik ki: annyiszor, ahány különböz út vezet hozzá: a startcsúcs egyszer, az i-edik csúcs 2 i 1 -szer (1 i k) terjeszt dik ki. A kiterjesztések száma összesen: i k 2 = 1 + (2 k 1 1)/(2 1) = 2 k 1 Ez az éles fels határ meglehet sen elrettent. Természetesen másik heurisztikus függvényt használva még egy ilyen gráfon is lényegesen kedvez bb lehet a kiterjesztések számának aránya a zárt csúcsok számához képest. Nézzük meg például az azonosan nulla heurisztikát, azaz az EGK-t a fenti Martelli-féle gráfon. Ne felejtsük el azonban, hogy más heurisztika esetén a zárt csúcsok száma is változhat. Extrém esetben az is elképzelhet, hogy h 1 heurisztika mellett k 1 zárt csúccsal terminál az A algoritmus, és ehhez k 1 kiterjesztést végez, míg h 2 heurisztika mellett k 2 zárt csúcs mellett 2 k 2 1 kiterjesztést végez, de k 2 jóval kisebb, mint k 1, ezért 2 k 2 1 < k 1.

48 Heurisztikus gráfkeres algoritmusok A futási id csökkentése Habár az A algoritmus több mutató (eredményesség, memória igény) alapján egy jól használható heurisztikus gráfkeresésnek t nik, a futási idejére adott exponenciális fels korlát nem teszi túl vonzóvá. Ezért érdemes megvizsgálni azt, hogy milyen alternatívái vannak a futási id javításának. A javítások egyik irányát az jelöli ki, ha kiemeljük az A algoritmus m ködésében azt a jelenséget, hogy ugyanaz a csúcs nagyon sokszor kerülhet kiterjesztésre. Ezt hatékonyan lehet csökkenti például úgy, hogy egy úgynevezett másodlagos kiértékel függvényt vezetünk be az els dleges f kiértékel függvény mellé. Amikor vannak olyan nyílt csúcsaink, amelyek f szerinti értékei kisebbek, mint valamelyik korábbi kiterjesztésnél a kiterjesztett csúcs f értéke, akkor ezen nyílt csúcsok közül a másodlagos kiértékel függvény segítségével választunk kiterjesztend csúcsot. Ez az ötlet arra épít, hogy a g tulajdonképpen egy g + 0 alakú függvény, amelynek azonosan nulla heurisztikája monoton, és ez egy csúcs legfeljebb egyszeri kiterjesztését eredményezi. Ezt a tulajdonságot próbálja meg a B algoritmus legalább lokálisan érvényesíteni. B algoritmusnak azt a gráfkeres algoritmust nevezzük, amelyet az A algoritmusból kapunk úgy, hogy egyrészt kiegészítjük azt egy F változóval, amelyre kezdetben az F := f(s) értékadást hajtjuk végre, másrészt lecseréljük az A algoritmus n := min f (NYÍLT) utasítását az alábbira: if min f (NYÍLT) < F then n := min g (m NYÍLT f(m) < F ) else n := min f (NYÍLT) : F := f(n) endif Meg lehet mutatni, hogy a B algoritmus majdnem minden tekintetben azonos tulajdonságú az ugyanolyan heurisztikát használó A algoritmussal (megengedhet heurisztika esetén optimális megoldást talál, ha van megoldás; ugyanazokat a csúcsokat zárja le, mint az A algoritmus), egyedül a futási ideje más, legrosszabb esetben is csak polinomiális, k lezárt csúcs mellett az 1 2 k2 -tel arányos. Ugyanazon csúcs többszöri kiterjesztése a használt heurisztika nem monoton tulajdonságának következménye. Ezért a B algoritmus úgy módosítja futás közben a megvizsgált csúcsok megengedhet heurisztikus függvényértékeit, hogy a már vizsgált élek mentén teljesüljön a monoton tulajdonság. Ez a módszer tehát változtatja a heurisztikát, úgy is fogalmazhatunk, hogy m ködése közben megtanul egy jó heurisztikát. Ráadásul ezt úgy éri el, hogy sohasem csökkenti, hanem növeli a heurisztikus függvény egy-egy csúcsban felvett értékét. Ezáltal a heurisztika, miközben meg rzi megenged-

49 32.5. Az A algoritmus hatékonyságának elemzése 1633 het tulajdonságát, egyre közelebbi alsó becslést ad a h hátralev optimális költségfüggvényre. (Ráadásul a B algoritmus még egy másik módját is alkalmazza a heurisztika növelésének.) Ha ezáltal az algoritmus nem is lesz a korábbi deníciónk értelmében jobban informált, de egy fokozatosan er söd heurisztikához jut, amely a tapasztalatok szerint csökkenti a lezárt csúcsok számát. Megmutatható például, hogy a B algoritmus nem zár le több csúcsot, mint a B algoritmus. Ennek megfelel en a memória igény függvényében megadott futási id sem romlik, s t javul. Összehasonlítva például a Martelliféle gráfokon a B és B algoritmust, látható, hogy amíg a B négyzetes futási idej, addig a B csak lineáris. Habár konstruálhatók olyan gráfok is, amelyeken a B is négyzetes futási idej a termináláskor számolt zárt csúcsok számához képest, de még itt is legalább kétszer olyan gyorsak, mint a B algoritmus. A B algoritmus ötletét használja fel a korábban már említett A algoritmus is, amelyik kiértékel függvénye egy csúcs kiértékelésénél nem az eredeti heurisztikus függvényt, hanem annak megnövelt értékét veszi gyelembe, anélkül, hogy módosítaná a csúcsokhoz rendelt heurisztikus függvényértékeket. A futási id csökkentésének másik módját adják a mohó gráfkeresések, amelyek a lezárt csúcsok számát csökkentik. Ezek a gráfkeresések nem akkor terminálnak, amikor egy célcsúcsot kiválasztanak kiterjesztésre, hanem már akkor, amikor a célcsúcs megjelenik a NYÍLT halmazban. Ez nyilvánvalóan jelent sen gyorsítja a futási id t, és csökkenti a memória igényt. Igaz, hogy általában egy mohó A algoritmus az alkalmazott heurisztika megengedhet ségének ellenére sem talál feltétlenül optimális megoldást, de megmutatható, hogy ha a célcsúcsok szül csúcsaiban a heurisztikus függvény értéke pontos becslést ad, azaz éppen a hátralev él költségével azonos, akkor az algoritmus garantáltan optimális megoldást talál. Példa erre a 15-ös játék W vagy P heurisztikája, amelyek a célcsúcs el tti csúcsokban 1 értéket vesznek fel. Gyakorlatok Mutassuk meg, hogy az A algoritmus megengedhet. (Tipp: Próbáljuk meg a és a lemmák állításait az A algoritmusra belátni.) Hajtsuk végre a Martelli gráfra (32.4. ábra) az A algoritmust, majd a B algoritmust. Írjuk le mindkét algoritmusnál az egymás után kiterjesztett csúcsokat (ugyanazt a csúcsot akár többször is) a kiterjesztésükkor számolt f kiértékel függvényértékükkel. Hasonlítsuk össze a két algoritmusnál kapott sorozatot.

50 Heurisztikus gráfkeres algoritmusok Feladatok 32-1 Csökken kiértékel függvény Egy gráfkeres algoritmus kiértékel függvényét csökken nek nevezzük akkor, ha egy nyílt csúcs függvény értéke csak akkor változik meg és akkor is csak csökkenhet, ha az eddiginél olcsóbb utat találunk hozzá. Szemléltessük a gráfkeres algoritmusok m ködését egy olyan grakonnal, amelyik vízszintes tengelyén a kiterjesztett csúcsokat tüntetjük fel (ugyanazt a csúcsot akár többször is), függ leges tengelyén pedig az éppen kiterjesztett csúcs aktuális kiértékel függvényértékét jelöljük. Válasszunk ki a m ködési grakon függvény értékeinek sorozatából egy monoton növeked részsorozatot úgy, hogy belevesszük e legels (a startcsúcs kiterjesztésekor számolt) értéket, majd mindig a soron következ nem kisebb értéket. Hívjuk ezeket az értékeket küszöbértékeknek, a hozzájuk tartozó csúcsot küszöbcsúcsnak, két szomszédos küszöb csúcs között végzett kiterjesztéseket ároknak. Bizonyítsuk be, hogy egy csökken kiértékel függvényt használó GK keres gráfja minden küszöbcsúcs kiterjesztéskor korrekt. (Tipp: Mutassuk meg, hogy a küszöbcsúcsok kiterjesztésekor nem lehet zárt csúcs a NYÍLT halmazban.) 32-2 A versus A algoritmus Lássuk be, hogy az A algoritmus szigorúan uralkodik az A algoritmus felett a megengedhet feladatokra nézve. Ehhez egyrészt mutassuk meg, hogy minden megengedhet feladathoz és az A algoritmus bármelyik változatához van az A algoritmusnak olyan változata, amelyik csak olyan csúcsokat zár le, amelyeket az A változat is lezár; másrészt konstruáljunk olyan feladatot, ahol az A algoritmus összes változatára lehet az A algoritmusnak jobb változatát találni A algoritmus memória igénye Bizonyítsuk be, hogy nincs olyan megengedhet útkeres algoritmus, amelyik szigorúan uralná az A algoritmust a megengedhet feladatokra nézve. Ehhez elég lenne belátni azt, hogy ha lenne olyan Y megengedhet algoritmus, amelyikhez egy megengedhet feladaton az A algoritmus bármelyik változatára találunk olyan csúcsot, amelyet az Y nem zár le, de az adott A változat igen, akkor lehet olyan megengedhet feladatot is találni, ahol legalább az egyik A változat nem fog egy olyan csúcsot lezárni, amelyet az Y biztosan lezár.

51 32. fejezet megjegyzései 1635 Megjegyzések a fejezethez A heurisztikus keresés fogalmát el ször Newell és Ernst [84] használta ben egy olyan keresésre, amelynek kiértékel függvénye a hátralev út költségére adott becslést. Az A algoritmust Hart, Nilsson és Raphael publikálta [52] 1968-ban. Nilsson foglalja össze az A algoritmust érint javításokat, módosításokat [87] 1971-ben, majd 1980-ban [86], ahol megjelenik az általános gráfkeres algoritmus, annak nem informált és heurisztikus osztályozása, és az A, A, A c algoritmusok didaktikus összefoglalása. Pearl 1984-ben [93] írt könyvet a heurisztikus keresésekr l, Pearl és Korf [94] pedig 1987-ben tekintette át a keresési technikákat. Magyar nyelven magyar szerz k több olyan könyvet is írtak, amelyek a heurisztikus kereséseket foglalják össze: Fekete, Gregorics és Nagy 1990-ben megjelent könyve [38] és a Futó Iván szerkesztésében 1999-ben megjelent könyv [46], illetve magyarra lefordítva is lehet olvasni e témakörr l Russell és Norvig [100] könyvében. A heurisztikus gráfkeresések memória igényével Bagchi és Mahanti [10] 1983-ban, majd Dechter és Pearl 1985-ben [29] foglalkozott behatóan. Utóbbiak jellemezték az A algoritmust. Martelli 1977-ben [77] mutatott rá arra, hogy az A algoritmus futási ideje legrosszabb esetben exponenciális, és kidolgozta a B algoritmust, melynek futási ideje legrosszabb esetben négyzetes. Mér 1984-ben [76] dolgozta ki a B algoritmust, amely mintául szolgált az A algoritmushoz. Az IDA algoritmust Korf publikálta [67] 1985-ben. A mohó A algoritmushoz kapcsolódó eredményeiket Ásványi és Gregorics 1998-ban [106] tették közzé.

52 33. Összehasonlítás-alapú rangsorolás Az informatika egyik gyakran el forduló feladata különböz objektumok rangsorolása. Ennek a témakörnek a kutatói gyakran foglalkoznak különböz alkalmazásokkal, például a biológiában Landau, kémiában Hakimi, hálózatokkal Kim, Toroczkai, Miklós, Erd s L. Péter és Székely A. László, Newman és Barabási, összehasonlítás-alapú döntéshozással, Bozóki Sándor, Fülöp János, Kéri Gerzson, Poesz Attila, Rónyai Lajos és sporttal kapcsolatban Iványi, Antal, Lucz Loránd, Pirzada Shariefuddin, Sótér Péter és Zhou Guofei. Népszer módszer két (esetleg három) elem összehasonlítása minden lehetséges módon és bizonyos számú pont kiosztása az összehasonlított objektumok között. Ebben a fejezetben általános modellt javaslunk hasonló rangsorolási feladatokhoz és a modellhez kapcsolódva els sorban a foksorozatok tesztelésével, helyreállításával és leszámlálásával foglalkozunk Bevezetés a szuperversenyekhez Legyenek n és m pozitív egészek, a = (a 1,..., a m ), b = (b 1,..., b m ) és k = (k 1,..., k m ) nemnegatív egészekb l álló vektorok, ahol a i b i (i = 1,..., m) és 0 < k 1 < < k m. Egy (a, b, k, m, n)-szuperverseny egy x n méret M mátrix, melynek oszlopai a versenyben részt vev versenyz knek felelnek meg (a rangsorolandó objektumokat reprezentálják), sorai pedig az objektumok összehasonlításainak. Az M mátrix megengedett elemei a {0, 1,..., b max } { } halmazhoz tartoznak, ahol m ij = azt jelenti, hogy a P j játékos nem résztvev je az i-edik sornak megfelel összehasonlításnak, míg m ij = k azt jelzi,hogy P j az i-edik sornak megfelel összehasonlításban (meccsen) k pontot kapott. A mátrix elemeire teljesül, hogy b max = max 1 i n b i. Az M mátrix i-edik oszlopában lév elemek összegét (a csillagokat nullaként vesszük számításba) d i -vel jelöljük és a P i játékos pontszámának nevezzük: x d i = m ij (i = 1,..., x). (33.1) j=1 A d(d 1,..., d n ) sorozatot az adott verseny pontvektorának, míg a

53 33.1. Bevezetés a szuperversenyekhez 1637 pontszámok növekv en rendezett sorozatát pontsorozatnak nevezzük és az s = (s 1,..., s n ) módon jelöljük. A szuperversenyek különböz sportok pontszámait kombinálják. Például Magyarországon népszer ek a sakk-bridzs, sakk-tenisz és a tenisz-bridzs versenyek. Adott sportot jellemez a megengedett pontszámok halmaza. Például teniszben a megengedett eredmények halmaza S tenisz = {0 : 1}, sakkban S sakk = {0 : 2, 1 : 1}, labdarúgásban S football = {0 : 3, 1 : 1}, az ulti egyszer sített változatában pedig S ulti = {(0, 1, 1), (0, 0, 2). Különböz lehetséges pontozások vannak egyéni teniszversenyre, például S etenisz = {(0, 2, 2, 2), (1, 1, 1, 3)}. Az S i sport egy meccsén résztvev játékosok számát k i -vel, az egy meccsen kiosztható pontok számának minimumát a i -vel, maximumát b i -vel jelöljük. Ha egy szuperverseny egyetlen sport meccseib l áll, akkor a a, b és k vektorok helyett az egyszer bb a, b és k jelöléseket használjuk. Ha a játékosok száma nem lényeges, vagy a szövegkörnyezet meghatározza, akkor az n paramétert elhagyjuk. Ha a kiosztott pontok tetszés szerint oszthatók két egész részre, akkor az adott sport teljes, egyébként hiányos. Ennek a deníciónak megfelel en a a sakk teljes (2,2)-sport, míg a labdarúgás hiányos (2,3)-sport. Mivel az n elemet tartalmazóhalmaz ( n k) k-elem részhalmazt tartalmaz, egy (a, b, k, n)-verseny ( n k) meccsb l áll. Ha minden meccset lejátszanak, akkor a verseny befejezett, egyébként befejezetlen. Ebben a fejezetben csak befejezett versenyekkel foglalkozunk, és többnyire teljes versenyekkel (kivéve a labdarúgást). A ábra egy teljes sakk-ulti-bridzs szuperverseny eredményeit tartalmazza. Ebben a példában n = 4, a = b = (2, 2, 6), k = (2, 3, 4) és x = ( 4 2) + ( 4 3) + ( 4 4) = 11, a pontvektor (7, 3, 8, 10) és a pontsorozat (3, 7, 8, 10). Ebben a fejezetben az el írt pontsorozatokkal rendelkez szuperversenyek különböz típusai létezésének feltételeit és el állítási módszereit vizsgáljuk. A következ alfejezetben (33.2. alfejezet) bevezetés az (a, b)-versenyekhez, amelyet az (1, 1)-versenyek (33.3. alfejezet), az (a, a)-versenyek (33.5. alfejezet), majd végül az általános (a, b)-versenyek (33.4. alfejezet) létezését elemz részek követnek. A??. alfejezetben különbségsorozatokkal, a??. alfejezetben pedig szuperversenyekkel foglalkozunk. A??. alfejezetben speciális hiányos versenyeket, a labdarúgó versenyeket, végül a??. alfejezetben szuperversenyeket elemzünk. Gyakorlatok Jellemezzük az ismert és lehetséges multiversenyeket Becsüljük meg az adott típusú versenyek számát.

54 Összehasonlítás-alapú rangsorolás meccs/játékos P 1 P 2 P 3 P 4 P 1 -P * * P 1 -P 3 0 * 2 * P 1 -P 4 0 * * 2 P 2 -P 3 * 0 2 * P 2 -P 4 * 0 * 2 P 3 -P 4 * 1 1 P 1 -P 2 -P * P 1 -P 2 -P * 2 P 1 -P 3 -P 4 1 * 1 0 P 2 -P 3 -P 4 * P 1 -P 2 -P 3 -P Összpontszám ábra. Egy sakk-ulti-bridzs verseny pontmátrixa n = 4 játékos esetén Bevezetés az (a, b)-versenyekhez Legyenek a, b (a b) és n (2 n) nemnegatív egészek és legyen T (a, b, n) olyan általánosított versenyek halmaza, amelyekben minden, különböz játékosokból álló pár elemei legalább a és legfeljebb b éllel vannak összekötve. A T (a, b, n) halmaz elemeit (a, b, n)-versenyeknek nevezzük. A T T (a, b, n) verseny (gráf) kifokainak d = (d 1, d 2,..., d n ) sorozatát pontvektornak nevezzük. Ha d elemei nemcsökken sorrendben vannak, akkor a sorozatot T pontsorozatának nevezzük. Nemnegatív egészek tetsz leges q = (q 1,..., q n ) vektorát multigráfos vektornak (vagy pontvektornak) nevezzük, ha létezik olyan hurokmentes multigráf, melynek fokvektora q, d-t pedig digráfos vektornak (vagy pontvektornak) nevezzük, ha létezik olyan hurokmentes multigráf, melynek kifokvektora d. Egy nemcsökken en rendezett multigráfos vektort multigráfos sorozatnak, egy nemcsökken en rendezett dimultigráfos vektort pedig dimultigráfos sorozatnak (vagy pontsorozatnak) nevezzük. Ha van olyan egyszer gráf, illetve egyszer digráf, melynek foksorozata/kifoksorozata d, akkor d gráfos, illetve digráfos. A T versenyben a P i játékostól a P j játékoshoz men élek számát m ij -vel (1 i, j n) jelöljük, az M = [1..n, 1..n] mátrixot pedig a T verseny pontmátrixnak nevezzük. Ebben a fejezetben els sorban irányított gráfokkal foglalkozunk és

55 33.3. El írt pontsorozattal rendelkez (1, 1)-versenyek létezése 1639 követjük Moon könyvének, valamint Reid cikkeinek terminológiáját követjük. Ha adott vonatkozásban a, b és n rögzítve vannak vagy nem lényegesek, akkor egyszer en versenyt mondunk (a, b, n)-versenyek helyett. Az els kérdés: hogyan jellemezhetjük az (a, b)-versenyek pontsorozatait? Vagy, más szavakkal: nemnegatív egészek adott d sorozatához milyen feltételek teljesülése esetén létezik olyan (a, b)-verseny, melynek kifoksorozata q? A választ a alfejezetben adjuk meg. Ha T egy (a, b)-verseny, melynek pontmátrixa M = [1..n, 1..n], akkor legyen E(T ), F (T ) és G(T ) deníciója a következ : E(T ) = max 1 i,j n m ij, F (T ) = max 1 i<j n (m ij + m ji ) és g(t ) = min 1 i<j n (m ij + m ji ). Jelölje (q) az olyan versenyek halmaza, amelyeknek foksorozata d, és legyen e(d), f(d) és g(d) deníciója a következ : e(d) = {min E(T ) T (q)}, f(q) = {min F (T ) T (q)} és g(d) = {max G(T ) T (q)}. A továbbiakban a következ rövid jelöléseket is alkalmazzuk: E, F, G, e, f, g és. Hulett, Will, Woeginger, Kapoor, Polimeni, és Wall, Tripathi et al. vizsgálták az el írt foksorozattal rendelkez, minimális csúcsszámú gráfok konstrukciójának módszereit. Hasonló a mini-max feladat, ahol a következ kérdésekre keressük a választ: ha adott nemnegatív egészek d sorozata, hogyan számítható e és hogyan konstruálható meg egy olyan T verseny, amelyre e jellemz? A alfejezetben képletet adunk e kiszámításához, majd a??. alfejezetben egy algoritmust javaslunk, amely el állít egy megfelel versenyt; Hogyan számítható ki f és g? A??. alfejezetben jellemezzük az f és g értékeket, a??. alfejezetben algoritmust javaslunk f és g gyors kiszámítására, a??. alfejezetben pedig lineáris id alatt számítjuk ki f-et és g-t. Hogyan konstruálhatunk olyan T versenyt, amelyre f és g jellemz? A??. alfejezetben algoritmust javaslunk a megfelel verseny el állítására El írt pontsorozattal rendelkez (1, 1)-versenyek létezése A legegyszer bb szuperverseny a klasszikus verseny (tournament), jelölésünk szerint az (1, 1, n)-verseny. El ször tekintsük Landau klasszikus tételét, amellyel az (1, 1)-versenyek pontsorozatait karakterizálta. Ez a tétel kés bb meglehet sen nagy gyelmet kapott: például közel egy tucat bizonyítása jelent meg. Reid 1966-os cikke ezek többségét ismerteti.

56 Összehasonlítás-alapú rangsorolás tétel. (Landau, 1953) Nemnegatív egészek q = (q 1,..., q n ) sorozata akkor és csak akkor pontsorozata egy (1, 1, n)-versenynek, ha minden I {1,..., n} részhalmazra teljesül ( ) I q i, (33.2) 2 i I továbbá az I = n esetben egyenl ség áll fenn. Bizonyítás. Lásd például Thomassen 1981-es vagy Griggs és Reid 1999-es bizonyítását. Landau ezen tétele szép szükséges és elégséges feltételt tartalmaz, azonban kedvez tlen esetben exponenciális id t igényel az alkalmazása. Ha rendezetlen pontvektor helyett a nemnövekv en rendezett q = (q 1,..., q n ) pontvektort vizsgáljuk, akkor q monotonitásának köszönhet en a (33.2) Landau-egyenl tlenségek segítségével a tétel alábbi következményét írhatjuk fel következmény. (Landau, 1953) Nemnegatív egészek q = (q 1,..., q n ) nemcsökken sorozata akkor és csak akkor pontsorozata egy (1, 1, n)- versenynek, ha k ( ) k q i (33.3) 2 i=1 minden i = 1,..., n indexre, továbbá a k = n esetben egyenl ség is teljesül. Bizonyítás. Szükségesség. Ha nemnegatív egészek q sorozata egy T (1, 1, n)-verseny pontsorozata, akkor a sorozat els k elemének összege egyrészt a {v 1,..., v k } csúcsok által indukált W részverseny minden meccsét, másrészt a W és a T W játékosai közötti meccseket. Ezért az összeg legalább annyi, mint W éleinek száma, azaz k(k 1) 2. Továbbá, mivel az összeg T minden élét pontosan egyszer veszi gyelembe, az n pontszám összege n(n 1) 2. Elégségesség (Thomassen, 1981). Legyen n a legkisebb egész, amelyre van olyan, nemnegatív egészekb l álló, s 1 = [s 1,..., s k ] nemcsökken sorozat, amely kielégíti a Landau-tétel feltételeit, de nincs hozzá (1, 1, n)-verseny, melynek pontsorozata q. Az ilyen sorozatok közül válasszunk ki egy olyat, amely a lexikograkusan legkisebb. El ször azt az esetet tekintsük, amelyben adott k < n egészre k ( ) k s i =. (33.4) 2 i=1 n minimalitása miatt az s 1 = [s 1,..., s k ] sorozat pontsorozata egy T 1 (k)

57 33.3. El írt pontsorozattal rendelkez (1, 1)-versenyek létezése 1641 versenynek. Továbbá m (s k+i k) = i=1 m+k i=1 ( m + k s i mk 2 ) ( ) k mk = 2 ( ) m 2 (33.5) minden 1 m n k indexre, és az m = n k esetben egyenl ség áll fenn. Ezért n minimalitása miatt a s 2 = [s k+1 k, s k+2 k,..., s n k] sorozat pontsorozata egy T 2 versenynek. T 1 és T 2 diszjunkt unióját képezve és hozzáadva a T 2 -b l T 1 -be vezet éleket az s pontsorozatot kapjuk. Most tekintsük azt az esetet, amikor a (33.3) egyenl tlenségek a k < n esetben mindig teljesülnek, különösen q 1 > 0) fennállása esetén. Ekkor az s 3 = [s 1 1,..., s n 1, s n + 1] sorozat kielégíti a (33.3) feltételeket és q 1, s 3 pontsorozata egy T 3 versenynek. Legyenek u és v olyan csúcsok, melyek fokszáma s n + 1, illetve s 1 1. Mivel az u fokszám nagyobb, mint v, a lemma szerint a T 3 versenyben van olyan P út, amely u-ból v-be megy és a hossza 2. Ha P éleit megfordítjuk, akkor olyan versenyt kapunk, amelynek pontsorozata s, ami ellentmondás. A Landau-tétel a gráfos sorozatokra vonatkozó Erd s-gallai tétel versenyekre vonatkozó megfelel je. A Havel-Hakimi tétel versenyekre vonatkozó megfelel je a következ tétel tétel. (Reid, Beineke, 1979). Nemnegatív egészek (q 1,..., q n ) (n 2) nemcsökken sorozata akkor és csak akkor pontsorozata egy (1, 1, n)- versenynek, ha a nemcsökken (q 1,..., q qn, q qn+1 1,..., q n 1 1), (33.6) sorozat pontsorozata valamely (1, 1, n 1)-versenynek. Bizonyítás. Lásd Reid és Beineke 1979-ben megjelent cikkét. Moon 1963-ban a Landau tétel következ, (a, a)-versenyekre vonatkozó általánosítását bizonyította tétel. Moon, 1963 Nemnegatív egészek q = (q 1,..., q n ) nemcsökken sorozata akkor és csak akkor pontsorozata egy (a, a, n)-versenynek, ha k ( ) k q i a, (33.7) 2 i=1 minden i = 1,..., n indexre, és k = n esetén egyenl ség teljesül.

58 Összehasonlítás-alapú rangsorolás Bizonyítás. Lásd Moon 1963-as vagy Kemnitz és Dul 1997-es bizonyítását ben Kemnitz és Dul új bizonyítást adott a tételre. Kemnitz and Dul bizonyítása a következ lemmán alapul, amely Thomassen egy 1981-es eredményének kiterjesztése (Kemnitz és Dul bizonyítását ismertetjük) lemma. (Thomassen,1981) Legyen u egy T (a, a, n)-verseny maximális fokszámú csúcsa. Ha v a T verseny u-tól különböz csúcsa, akkor T tartalmaz egy u-ból b-be vezet, legfeljebb kett hosszúságú irányított utat. P utat. Bizonyítás. Legyenek v 1,..., v l T azon csúcsai, amelyekbe vezet u-ból induló él, azaz amelyekre (u, v i ) E(T ), i = 1,..., l. Ha v {v 1,..., v l }, akkor a P út hossza P = 1. Egyébként ha van olyan v i, 1 i l csúcs, amelyre (v i, v) E(T ), akkor P = 2. Ha minden 1 i l indexre teljesül, hogy (v i, v) / E(T ), akkor van k olyan index, hogy T -ben d + (v) kl + k > kl d + u, ami ellentmond annak, hogy u maximális fokszámú csúcs. A tétel bizonyítása. A (33.7 feltétel szükségessége nyilvánvaló, mert bármely k csúcs között a ( ( k 2) él van, és az n csúcs között összesen a n ) 2 él van. A (33.7 feltétel elégségességének bizonyításához feltesszük, hogy az S n = (s 1,..., s n ) csúcssorozat minimális ellenpélda a tétel állításával szemben, azaz benne n minimális. tegyük fel, hogy van olyan egész m, 1 m < n, amelyre m ( ) k s i = k. (33.8) 2 i=1 n minimalitása miatt (s 1,..., s n ) egy T 1 (1, 1, n)-verseny pontsorozata. Tekintsük az r i = s m+1 km, i = 1,..., n m el írással deniált R n m = (r 1, r 2,..., r n m ) sorozatot. Mivel a lemma feltétele szerint m+1 i=1 s i k ( ) m+1 2, m+1 m ( ( m + 1 m s m+1 = i=1 s i i=1 s i k 2 ) k 2 ) km, ahonnan következik r i 0. Mivel az S n sorozat nemcsökken, az R n m sorozat szintén nemnegatív egészek nemcsökken sorozata. Minden l (1 l n m 1) indexre teljesül, hogy l r i = i=1 l l+m m ( ) l + m (s m+1 km) = s i s i lam k k 2 i=1 i=1 i=1 ( m 2 ) lam = k ( ) l, 2 (33.9)

59 33.4. El írt pontsorozattal rendelkez (a, b)-versenyek l tezése 1643 továbbá az l = n m esetben l+m ( ) l + m s i a, 2 i=1 m ( ) m s i = a. (33.10) 2 i=1 Ezért az R n m sorozat kielégíti a (33.8) feltételt, és n minimalitása miatt R n m egy T 2 (a, a, n m)-verseny pontsorozata. Ekkor T 1 és T 2 diszjunkt uniója egy T (a, a, n)-verseny, melynek pontsorozata S n, ami ellentmond annak, hogy az S n sorozat ellenpélda. Most tekintsük azt az esetet, amikor a (33.8) feltételben szerepl egyenl tlenség minden 1 m < n értékre pontos. Ebb l többek között következik, hogy s 1 > 0. S n = (s 1, s 2, s 3,..., s n 1, s n ) egész számok nemcsökken sorozata, amely kielégíti a (33.8) feltételt. S n minimalitása miatt S n egy T 3 (a, a, n)- verseny pontsorozata. Legyen u a T 3 verseny s n +1 fokszámú, v pedig a verseny egy S 1 1 fokszámú sorozata. Mivel u T 3 maximális fokszámú csúcsa, T 3 a lemma szerint tartalmaz u-ból v-be vezet, legfeljebb 2 hossszúságú irányított utat. A P út éleit megfordítva a T (a, a, n)-versenyt kapjuk, melynek foksorozata S n. Ez az ellentmondás teljessé teszi a bizonyítást El írt pontsorozattal rendelkez (a, b)-versenyek l tezése Ebben az alfejezetben megmutatjuk, hogy tetsz leges, nemnegatív egészek tetsz leges q sorozatához létezik olyan (a, b)-verseny, melynek foksorozata q Tetsz leges pontsorozattal rendelkez verseny létezése Mivel az m ij pontszámok nem korlátosak, nemnegatív egész számok tetsz leges q nemcsökken sorozatához könny olyan (0, q n, n)-versenyt el állítani, amelynek pontsorozata éppen q úgy, hogy G-ben a maximális fokszám legfeljebb q n lemma. Ha n 2, akkor nemnegatív egészek tetsz leges q = (q 1,..., q n ) nemcsökken sorozatához létezik olyan D hurokmentes irányított multigráf, melynek kifokvektora q és legnagyobb kifoka legfeljebb q n. Bizonyítás. Legyen m n1 = d n és m i,i+1 = q i, ha i = 1, 2,..., n 1, a többi m ij érték pedig legyen nulla. Tetsz leges valós súlyokat megenged élsúlyozott gráfokat alkalmazva könny lenne kiterjeszteni az (a, b, n)-versenyek denícióját tetsz leges valós

60 Összehasonlítás-alapú rangsorolás a és b értékekre. A Naiv-konstrukció algoritmus változtatás nélkül alkalmazható valós bemen értékek esetén is. Megjegyezzük, hogy Ore [90, 91] 1956-ban megadta az el írt kifokokkal és befokokkal rendelkez (1, 1)-versenyek létezésének felszükséges és elégséges feltételét. Ford és Fulkerson 1962-ben [43, tétel] a csúcsok fokszámára vonatkozó alsó és fels korlátokat kielégít verseny létezésére adtak szükséges és elégséges feltételt Naiv helyreállító algoritmus D rendezésére nincs szükség. Bemen adatok. n: a játékosok (a gráf csúcsainak) száma (n 2); q = (q 1,..., q n ): nemnegatív egészek tetsz leges nemcsökken sorozata. Kimen adatok. M = [1..n, 1..n]: az el állított verseny pontmátrixa. Munkaváltozók. i, j: ciklusváltozók. Naiv-el állítás(n, q) 01 for i = 1 to n 02 for j = 1 to n 03 m ij = 0 04 m n1 = q n 05 for i = 1 to n 1 06 m i,i+1 = q i 07 return M Az algoritmus futási ideje legjobb és legrosszabb esetben is Θ(n 2 ). Mivel az M pontmátrixnak n 2 eleme van, az algoritmus aszimptotikusan optimális e kiszámítása e kiszámítása nrm nehéz feladat. A továbbiakban feltesszük, hogy q nemnegatív egészek nemcsökken sorozata, azaz 0 q 1 q 2... q n. Legyen h = q n /(n 1). Mivel (q) bármely véges q pontvektorra véges halmaz, ezért e(q) = min{e(t ) T (q)} létezik lemma. (Iványi [59]) Ha n 2, akkor tetsz leges q = (q 1,..., q n ) sorozathoz létezik olyan T (0, b, n)-verseny, amelyre E h and b 2h, (33.11) továbbá e legkisebb fels korlátja h, és b legkisebb fels bb korlátja 2h. Bizonyítás. Ha a játékosok pontszáma a lehet legegyenletesebb, azaz max m ij min m ij 1 for i = 1, 2,..., n, (33.12) 1 j n 1 j n, i j

61 33.5. El írt pontsorozattal rendelkez (a, a)-versenyek létezése 1645 akkor E h, azaz a lemmában szerepl korlát helyes. Mivel a P n játékosnak q n pontot kell gy jtenie, a skatulyaelvb l [12, 13, 31] következik E h, azaz a korlát nem javítható. Az E h egyenl tlenségb l következik max 1 i<j n m ij + m ji 2h. A D = (d 1, d 2,..., d n ) = (2n(n 1), 2n(n 1),..., 2n(n 1)) pontsorozat bizonyítja, hogy a b 2h fels korlát nem javítható következmény. (Iványi [57]) Ha n 2, akkor bármely q = (q 1,..., q n ) sorozatra teljesül e(d) = q n /(n 1). Bizonyítás. A lemma szerint h = q n /(n 1) e legkisebb fels korlátja El írt pontsorozattal rendelkez (a, a)-versenyek létezése

62 34. Ponthalmazok és királyok) Ponthalmaz

63 35. Szavak bonyolultsága Egyszer bonyolultsági mértékek Véges szavak Legyen A egy véges, nem üres halmaz, amelyet ábécének nevezünk. Elemei bet k vagy szimbólumok. Egy, nem feltétlenül különböz bet kb l képzett a 1 a 2... a n füzért nevezzünk szónak. Az u = a 1 a 2... a n szó hossza n, jelölése pedig u. Azt a szót, amely egyetlen bet t sem tartalmaz, üres szónak nevezzük. Ennek szokásos jelölése ε (néha λ). Az A fölötti (azaz az A bet ib l képzett) véges szavak halmazát A jelöli. Gyakran használjuk az alábbi jelöléseket: { A + = A \{ε}, A n = u A } { } u = n = a 1 a 2... a n a i A, i = 1,..., n, azaz A + az A fölötti véges és nem üres szavak halmaza, míg A n az n hosszúságú szavak halmaza. Természetesen A 0 = {ε}. Az A és A + megszámlálhatóan végtelen halmazok. [61] Az u = a 1 a 2... a m és v = b 1 b 2... b n egyenl, ha m = n és a i = b i, ha i = 1, 2,..., n. Értelmezzünk az A halmazon egy összef zés (konkatenáció) nev bináris m veletet. Ha u = a 1 a 2... a n és v = b 1 b 2... b m, akkor w = uv = a 1 a 2... a n b 1 b 2... b m, w = u + v. Ez a bináris m velet asszociatív, de nem kommutatív. Semleges eleme az ε, mivel εu = uε = u. Az ezzel a m velettel ellátott A halmaz monoid. Rekurzívan értelmezzük a szó hatványát: u 0 = ε u n = u n 1 u, ha n 1. Egy szó primitív, ha egyetlen szónak sem hatványa, azaz u primitív, ha u = v n, v ε n = 1. Például u = abcab primitív szó, míg v = abcabc = (abc) 2 nem.

64 Szavak bonyolultsága Az u = a 1 a 2... a n szó periodikus, ha létezik egy p érték 1 p < n úgy, hogy a i = a i+p, minden i = 1, 2,..., n p, és p az u szó egy periódusa. A legkisebb ilyen p érték az u szó legkisebb periódusa. Az u = abcabca szó periodikus, és legkisebb periódusa p = 3. Ha (p, q) a p és q természetes számok legnagyobb közös osztóját jelöli, a következ tétel nyilvánvaló tétel. Ha az u periodikus szónak p és q periódusai, akkor (p, q) szintén periódusa. Az u = a 1 a 2... a n szó tükörképe (vagy fordítottja) u R = a n a n 1... a 1. Nyilvánvalóan ( u R) R = u. Ha u = ur, akkor az u szót palindrom szónak vagy röviden palindromnak hívjuk. indexpalindrom Az u szó részszója v-nek, ha léteznek a p és q szavak úgy, hogy v = puq. Ha pq ε, akkor u valódi részszója v-nek. Ha p = ε, akkor u el szelete (prexuma) v-nek, és ha q = ε, akkor u végszelete (szuxuma) v-nek. Az u szó összes n hosszúságú részszóinak halmazát F n (u)-val jelöljük (a jelölés alapja a részszó angol és francia factor neve). F (u) az u szó összes, nem üres részszójának a halmaza, azaz F (u) = u n=1 F n (u). Például, ha u = abaab, akkor F 1 (u) = {a, b}, F 2 (u) = {ab, ba, aa}, F 3 (u) = {aba, baa, aab}, F 4 (u) = {abaa, baab}, F 5 (u) = {abaab} tétel. (FineWilf). Ha az u és v szavak n, illetve m hosszúságúak, és léteznek a p és q természetes számok úgy, hogy az u p és v q szavaknak van egy közös n + m (n, m) hosszúságú el szelete, akkor u és v ugyanazon szónak a hatványai. Az n + m (n, m) érték éles. Ezt a következ példa illusztrálja, ahol az u és v szavaknak van egy n + m (n, m) 1 hosszúságú közös el szelete, és u és v nem hatványai ugyanannak a szónak. u = abaab, n = u = 5, u 2 = abaababaab, v = aba, m = v = 3, v 3 = abaabaaba. A tétel szerint egy 7 hosszúságú közös el szelet megléte biztosítja, hogy u és v egyazon szó hatványai. Látható, hogy itt u 2 és v 3 szavaknak van egy 6 hosszúságú közös el szelete (abaaba), de u és v nem hatványai egyazon szónak, tehát a tételben foglalt hossza éles.

65 35.1. Egyszer bonyolultsági mértékek Végtelen szavak A véges szavak mellett végtelen (pontosabban egyik irányba végtelen) szavakkal is foglalkozunk: u = u 1 u 2... u n..., ahol u 1, u 2,... A. Az A ábécé fölötti végtelen szavak halmazát A ω jelöli. Amikor együtt vizsgáljuk a véges és végtelen szavakat, hasznos a következ jelölés: A = A A ω. A részszó, el szelet, végszelet fogalmak a végtelen szavak esetében is a véges esethez hasonlóan értelmezhet k. A v A + részszója az u A ω szónak, ha léteznek a p A, q A ω szavak úgy, hogy u = pvq. Ha p ε, akkor p el szelete u-nak, míg q végszelete u-nak. Itt F n (u) szintén az u összes n hosszúságú részszóját jelöli. Példák bináris (két bet b l álló) ábécé fölötti végtelen szavakra: 1) A hatványszó deníciója: p = } 0.{{.. 0} } 1.{{.. 1}... = n 1 n.... n n Könny észrevenni, hogy F 1 (p) = {0, 1}, F 2 (p) = {01, 10, 00, 11}, F 3 (p) = {010, 100, 001, 011, 110, 000, 111},... 2) A Champernowne-szó úgy képezhet, hogy sorba leírjuk a természetes számokat kettes számrendszerben, és összef zzük ket: c= (A szóközöket csak azért írtuk ki, hogy jobban lehessen látni a képzés módját.) Ekkor F 1 (p) = {0, 1}, F 2 (p) = {00, 01, 10, 11}, F 3 (p) = {000, 001, 010, 011, 100, 101, 110, 111},... 3) A véges Fibonacci-szavakat rekurzívan képezhetjük a következ módon: f 0 = 0, f 1 = 01 f n = f n 1 f n 2, ha n 2. Ezekb l következik: f 0 = 0, f 1 = 01,

66 Szavak bonyolultsága f 2 = 010, f 3 = 01001, f 4 = , f 5 = , f 6 = A végtelen Fibonacci-szó a véges Fibonacci-szavak határértéke: f = lim n f n. A végtelen Fibonacci-szó részszói: F 1 (f) = {0, 1}, F 2 (f) = {01, 10, 00}, F 3 (f) = {010, 100, 001, 101}, F 4 (f) = {0100, 1001, 0010, 0101, 1010},.... A Fibonacci név a Fibonacci-sorozatra utal, ugyanis a véges Fibonacciszavak hossza egyenl a Fibonacci-sorozat számaival, azaz f n = F n+2, vagyis az n-edik Fibonacci-szó (f n ) hossza egyenl az (n+2)-dik Fibonacci-számmal. A végtelen Fibonacci-szónak sok érdekes tulajdonsága van. Például a denícióból látható, hogy nem tartalmazhatja részszóként az 11-et. Jelölje h(u) az u szó 1-eseinek számát. A végtelen u szó kiegyensúlyozott, ha tetsz leges, azonos hosszúságú x és y részszóira igaz, hogy h(x) h(y) 1, azaz x, y F n (u) h(x) h(y) tétel. Az f végtelen Fibonacci-szó kiegyensúlyozott tétel. F n (f)-nek n + 1 eleme van. Ha az u szót önmagával végtelenszer összef zzük, az eredmény jelölése u ω. A végtelen u szó periodikus, ha létezik v véges szó úgy, hogy u = v ω. Ez a véges szó periodicitásának általánosítása. A végtelen u szó végperiodikus, ha létezik a v és w szó úgy, hogy u = vw ω. A végtelen Fibonacci-szó morzmusal is el állítható. Legyen a következ morzmus: χ : A A, χ(uv) = χ(u)χ(v), u, v A. Ennek alapján, elegend a χ függvényt csupán bet kre értelmezni. A morzmus végtelen szavakra is kiterjeszthet : χ : A ω A ω, χ(uv) = χ(u)χ(v), u A, v A ω. A véges f n Fibonacci-szó a következ morzmussal állítható el : σ(0) = 01, σ(1) = 0. Ebben az esetben érvényes a következ tétel.

67 35.1. Egyszer bonyolultsági mértékek ábra. A B(2, 3) De Bruijn-gráf tétel. f n+1 = σ(f n ). Bizonyítás. A bizonyítás indukcióval végezhet. Nyilvánvaló, hogy f 1 = σ(f 0 ). Tételezzük fel, hogy f k = σ(f k 1 ), ha k n. Mivel f n+1 = f n f n 1, az indukciós feltétel szerint f n+1 = σ(f n 1 )σ(f n 2 ) = σ(f n 1 f n 2 ) = σ(f n ). Innen kapjuk, hogy: tétel. f n = σ n (0). A végtelen f Fibonacci-szó a σ morzmus xpontja. f = σ(f) Szógráfok Legyen V A m az A ábécé fölötti m hosszúságú szavak egy halmaza, és E AV VA (Itt AV = {av a A, v V }). Értelmezünk egy irányított gráfot, amelynek a csúcsai V -b l vannak, irányított élei pedig E-b l. Mindig létezik irányított él az a 1 a 2... a m csúcsból a b 1 b 2... b m csúcsba, ha a 2 = b 1, a 3 =b 2,..., a m =b m 1 és a 1 a 2... a m b m E, azaz, ha az els szó utolsó m 1 bet je azonos a második szó els m 1 bet jével. Ennek az élnek a címkéje a 1 a 2... a m b m (vagy a 1 b 1... b m ). De Bruijn-gráfok Ha V = A m és E = A m+1, ahol A = {a 1, a 2,... a n }, akkor a gráf neve De Bruijn-gráf, jelölése pedig B(n, m). A és ábrákon a B(2, 3) és B(3, 2) De Bruijn-gráf látható. Ha elhagyjuk az élek irányítását és a hurkokat, sok csúcs esetében érdekes

68 Szavak bonyolultsága ábra. A B(3, 2) De Bruijn-gráf. ábrákat kapunk. A ábrán az els két gráf négybet s ábécét használ és 3, illetve 4 hosszúságú szavakat (a csúcsok száma 64, illetve 256), a harmadik gráf pedig ötbet s ábécét és 3 hosszúságú szavakat (a csúcsok száma 125). Egy gráfban sétának nevezzük szomszédos (irányított gráfban azonos irányítású) élek egy sorozatát. Ha egy séta élei különböz ek, akkor vonalról beszélünk, ha pedig a csúcsok is különböz ek, akkor útról.) A De Bruijn-gráf x 1 x 2... x m, x 2 x 3... x m x m+1,..., z 1 z 2... z m sétájához hozzárendeljük az x 1 x 2... z m 1 z m címkét, amely a séta szomszédos éleinek maximális átfedése. A ábra B(2, 3) gráfjában a 001, 011, 111, 110 séta (amely egyben út is) címkéje A B(n, m) gráf egy Hamiltonútjához (amely a gráf minden csúcsát egyszer tartalmazza) rendelt címke egy (n, m) típusú De Bruijn-szó. Például, a és szavak (2, 3) típusú De Bruijn-szavak. Egy (n, m) típusú De Bruijn-szó az összes n- bet s m hosszúságú szót tartalmazza. Egy irányított gráf összefügg (jelen értelmezés szerint), ha bármelyik két csúcsa között van legalább egy irányított út. Egy irányított gráf Euler-gráf, ha van benne olyan zárt vonal, amely a gráf minden élét tartalmazza. Egy csúcs befoka (kifoka) a hozzá illeszked befutó ( t elhagyó) élek száma. Egy összefügg irányított gráf Euler-gráf, ha minden csúcsának befoka egyenl a kifokával tétel. A B(n, m) De Bruijn-gráf Euler-gráf. Bizonyítás. a) A gráf összefügg, mivel bármely x 1 x 2... x m és z 1 z 2... z m

69 35.1. Egyszer bonyolultsági mértékek ábra. Nem irányított, hurokmentes De Bruijn-gráfok. csúcspár között van irányított út. Az x 1 x 2... x m csúcsot n él hagyja el, és ezek azokba a csúcsokba futnak be, amelyeknek els m 1 bet je x 2 x 3... x m, és amelyeknek utolsó bet i mind különböznek. Tehát létezik az x 1 x 2... x m, x 2 x 3... x m z 1,..., x m z 1... z m 1, z 1 z 2... z m út. b) Az x 1 x 2... x m csúcsba az yx 1... x m 1 csúcsokból futnak élek, ahol y A (A a gráf ábécéje, azaz V = A m ). Az x 1 x 2... x m csúcsból az x 2 x 3... x m y csúcsokba futnak élek, Ahol y A. Így a gráf Euler-gráf, mivel minden csúcs befoka egyenl a kifokával. Ebb l a következ tétel könnyen bizonyítható tétel. A B(n, m) gráf egy Euler-vonala (amely tehát tartalmazza a gráf összes élét) a B(n, m + 1) gráf egy Hamilton-útjának felel meg. Például, a B(2, 2) gráfban a 000, 001, 010, 101, 011, 111, 110, 100 élsorozat

70 Szavak bonyolultsága Euler-vonal. Ezek ugyanakkor a B(2, 3) gráfban csúcsok, és egy Hamilton-út csúcsai ebben a sorrendben. De Bruijn-szavakat el állító algoritmus Sok algoritmus létezik De Bruijn-szavak el állítására. Ezek közül a Martinalgoritmust mutatjuk be, amely az els k közül való. Legyen adva az A = {a 1, a 2,..., a n } ábécé. Célunk (n, m) típusú, A ábécé fölötti De Bruijn-szavak el állítása. Az algoritmust az a 1 a 1... a } {{ } 1 szóval kezdjük, majd hozzátesszük a végére m-szer azt a legnagyobb index a k bet t, amelyre az így kapott szó m hosszúságú végszelete el ször jelenik meg a szóban. Folytassuk ezt a m veletet mindaddig, amíg lehetséges. M. H. Martin bebizonyította, hogy amikor a m velet már nem folytatható, akkor a kapott szó n m + m 1 hosszúságú, és éppen egy De Bruijn-szó. Az alábbi leírásban A az n-bet s ábécé, míg B = (b 1, b 2,...) az eredmény, azaz egy (n, m) típusú De Bruijn-szó. Martin(A, n, m) 1 for i 1 to m 2 do b i a 1 3 i m 4 repeat 5 kész true 6 k n 7 while k > 1 8 do if b i m+2 b i m+3... b i a k b 1 b 2... b i nem részszó 9 then i i b i a k 11 kész false 12 exit while 13 else k k 1 14 until kész 15 return B B = (b 1, b 2,..., b i ), ahol i = n m + m 1 Mivel a fenti algoritmus az n m + m 1 hosszúságú De Bruijn-szó minden bet jét el állítja, ahol n és m egymástól független és változó, bonyolultsága nyilván exponenciális. (Ha az m-et állandónak vesszük, akkor poliunomiális.) A repeat utasítást (n m 1)-szer végezzük el, az while utasítást legfeljebb n-szer a repeat minden lépésére. A b i m+2 b i m+3... b i a k b 1 b 2... b i tesztelés legrosszabb esetben mn m lépést igényel. Így a lépések maximális

71 35.1. Egyszer bonyolultsági mértékek 1655 száma mn 2m+1. A fenti algoritmus alapján kijelenthetjük a következ tételt tétel. Az (n, m) típusú De Bruijn-szó a legrövidebb olyan szó, amely részszóként tartalmazza az összes n-bet s ábécé fölötti m hosszúságú szót. Az összes (n, m) típusú De Bruijn-szó el állítására szolgál a következ rekurzív algoritmus. Itt A szintén egy n-bet s ábécé, B pedig egy (n, m) típusú De Bruijn-szó. Az algoritmus minden i pozícióra (m + 1 i n m + m 1) meghívjuk. Minden-De-Bruijn(B, i, m) 1 for j 1 to n 2 do b i a j 3 if b i m+1 b i m+2... b i b 1 b 2... b i 1 nem részszó 4 then Minden-De-Bruijn(b, i + 1, m) 5 else if hossz(b) = n m + m 1 6 then print B az eredmény De Bruijn-szó 7 exit for Az eljárás hívása: for i = 1 to m do b i a 1 Minden-De-Bruijn (B, m + 1, m). Az algoritmus, természetesen, exponenciális. A következ kben értelmezzük az ún. De Bruijn-fát. A w A m gyöker T (n, w) De Bruijn-fa a következ rekurzív módon értelmezett n-áris fa: i. Az m hosszúságú, A = {a 1, a 2,....a n } ábécé fölötti w szó a T (n, w) fa gyökere (és egyben levele is). ii. Ha x 1 x 2... x m a T (n, w) fa egy levele, akkor bármely x 2 x 3... x m a 1, x 2 x 3... x m a 2,..., x 2 x 3... x m a n alakú v szavak az x 1 x 2... x m szó leszármazottjai, ha a gyökért l az x 1 x 2... x m csúcsig lev úton v nem szerepel csúcsként. iii. A ii szabályt addig alkalmazzuk, ameddig lehetséges. A ábrán a T (2, 010) De Bruijn-fa látható. Rauzy-gráfok Ha az u szó végtelen, és V = F n (u), E = F n+1 (u), akkor a megfelel szógráf

72 Szavak bonyolultsága ábra. T (2, 010) De Bruijn-fa ábra. A végtelen Fibonacci-szó Rauzy-gráfjai. neve Rauzy-gráf (vagy részszógráf ). A ábrán a végtelen Fibonacci-szó Rauzy-gráfját láthatjuk n = 3 és n = 4 esetében. Amint láttuk, a végtelen Fibonacci-szó f = , és F 1 (f) = {0, 1}, F 2 (f) = {01, 10, 00}, F 3 (f) = {010, 100, 001, 101}, F 4 (f) = {0100, 1001, 0010, 0101, 1010}, F 5 (f) = {01001, 10010, 00101, 01010, 10100, 00100}. A p = } 0.{{.. 0} } 1.{{.. 1}..., hatványszó esetében n F 1 (p) = {0, 1}, F 2 (p) = {01, 10, 00, 11}, F 3 (p) = {010, 100, 000, 001, 011, 111, 110}, F 4 (p) = {0100, 1001, 0011, 0110, 1100, 1000, 0000, 0001, 0111, 1110, 1111}. A megfelel Rauzy-gráf a ábrán látható. Ahogy a és ábrákon láthatjuk, vannak olyan n hosszúságú n

73 35.1. Egyszer bonyolultsági mértékek ábra. A hatványszó Rauzy-gráfjai részszók, amelyek csak egyféleképpen folytathatók, hogy n + 1 hosszúságú részszókat kapjunk (egy bet hozzáadásával), míg mások kétféleképpen is folytathatók (kétféle bet hozzáadásával). Ez utóbbiak a speciális részszók. A v F n (u) részszó jobb oldali speciális részszó (röviden jobb speciális részszó), ha létezik legalább két olyan a A bet, hogy va F n+1 (u). Hasonlóképpen v F n (u) bal oldali speciális részszó (röviden bal speciális részszó), ha létezik legalább két olyan a A bet, hogy av F n+1 (u). Egy részszó bispeciális, ha egyben bal és jobb oldali speciális részszó is. Például, a és ábrák speciális részszói a következ k: bal speciális részszók: jobb speciális részszók: bispeciális részszók: 010, 0100 (35.5. ábra), 110, 000, 111, 1110, 0001, 1111, 0011 (35.6. ábra), 010, 0010 ( ábra), 011, 000, 111, 0111, 1111, 0011 (35.6. ábra) 010 (35.5. ábra), 000, 111, 1111, 0011 (35.6. ábra) Szavak bonyolultsága A szavak bonyolultsága a részszók bet inek változatosságát méri. Ilyen értelemben az aaaaa szó kisebb bonyolultságú, mint az abcab szó.

74 Szavak bonyolultsága A következ szóbonyolultságokat értelmezzük. 1) Egy szó részszóbonyolultsága vagy egyszer en csak bonyolultsága minden n N értékhez hozzárendeli az illet szó n hosszúságú különböz részszóinak a számát. Egy adott u szó n hosszúságú különböz részszóinak a számát f u (n)-nel jelöljük. f u (n) = #F n (u), u A. Ha a szó véges, akkor f u (n) = 0 minden n > u értékre. 2) A maximális bonyolultságot csak véges szavakra értelmezzük. Ha u végtelen szó, akkor C(u) = max{f u (n) n 1, u A }. C u (n) = min i C(u i u i+1... u i+n 1 ) az alsó maximális bonyolultság, illetve C u + (n) = max C(u i u i+1... u i+n 1 ) i a fels maximális bonyolultság. 3) A globális maximális bonyolultságot az összes n hosszúságú szavak A n halmazán értelmezzük: G(n) = max{c(u) u A n }. 4) Egy véges szó teljes bonyolultsága a szó összes nemüres részszóinak a száma (gyakran az üres szót is beszámítják, ekkor a bonyolultság értéke 1-gyel nagyobb). u K(u) = f u (i), u A. Végtelen szavak esetében az alsó teljes bonyolultság,, és fels teljes bonyolultság. i=1 K u (n) = min i K(u i u i+1... u i+n 1 ) K u + (n) = max K(u i u i+1... u i+n 1 ) i

75 35.1. Egyszer bonyolultsági mértékek ) Az u = u 1 u 2... u k felbontást faktorizálásnak nevezzük. Ha minden u i (esetleg az u k -t kivéve) az u i u i+1... u k szó olyan legrövidebb el szelete, amelyik el ször jelenik meg az u szóban, akkor ezt a faktorizálást Lempel-Ziv faktorizálásnak nevezzük. Egy ilyen faktorizálás u i részszóinak a számát az u szó Lempel-Ziv faktorizálási bonyolultságának nevezzük Például, ha u = ababaaabb, akkor a Lempel-Ziv faktorizálása: u = a.b.abaa.abb, tehát az u Lempel-Ziv faktorizálási bonyolultsága lz(u) = 4. 6) Ha az u = u 1 u 2... u k felbontásban minden u i lehet leghosszabb palindrom, akkor palindrom faktorizálásról beszélünk, és az u i részszók száma a szó palindrom faktorizálási bonyolultsága. Ha u = aababbabbabb = aa.babbabbab.b, akkor az u palindrom faktorizálási bonyolultsága pal(u) = 3. 7) A P w ablakbonyolultságot csak végtelen szavakra értelmezzük. Az adott u = u 0 u 1 u 2... u n... szó ablakbonyolultsága P w (u, n) = # { u kn u kn+1... u (k+1)n 1 k 0 }. A jelölésben a w az ablak angol nevére (window) utal. Ez a bonyolultság az egymás utáni n hosszúságú különböz részszók száma. Részszóbonyolultság Ahogy már láttuk, a részszóbonyolultság f u (n) = #F n (u), u A, n N. f u (n) = 0, if n > u. Például, az u = abacab szó esetében: f u (1) = 3, f u (2) = 4, f u (3) = 4, f u (4) = 3, f u (5) = 2, f u (6) = 1. A tétel szerint a végtelen Fibonacci-szó esetében: f f (n) = n + 1. A p = k 1 k... hatványszó bonyolultsága: f p (n) = n(n + 1) Ez könnyen bizonyítható, ha kiszámoljuk a f p (n + 1) f p (n) különbséget, amely egyenl az összes olyan n hosszúságú részszóval, amelyik kétféleképpen folytatható, hogy n+1 hosszúságú részszó legyen. Csak a 0 k 1 n k és az 1 k 0 n k alakú részszók folytathatók kétféleképpen. Az els mindig folytatható 1-gyel, de 0-val csak ha k n k. A második mindig folytatható 0-val, és 1-gyel

76 Szavak bonyolultsága ha k < n k. Külön választva azokat az eseteket, amikor n páros, illetve páratlan, a következ t kapjuk: és innen f p (n + 1) f p (n) = n + 1, A f p (n) = n + f p (n 1) = n + (n 1) + f p (n 2) =... = n(n + 1) n + (n 1) f p (1) = c = u 0 u 1... u n... = = , Champernowne-szó részszóbonyolultsága f c (n) = 2 n tétel. Ha az u A ω végtelen szó esetében létezik olyan n N, amelyre f u (n) n, akkor az u szó végperiodikus. Bizonyítás. f u (1) 2, különben a szó csak egyféle bet t tartalmazhatna. Tehát, létezik olyan k n, amelyre f u (k) = f u (k + 1). De f u (k + 1) f u (k) = ( # { a A va F k+1 (u) } ) 1. v F k (u) Ebb l következik, hogy minden v F k (u) részszónak csak egy folytatása lehet, hogy va F k+1 (u). Tehát, ha v = u i u i+1... u i+k 1 = u j u j+1... u j+k 1, akkor u i+k = u j+k. Mivel F k (u) véges halmaz, és u végtelen, következik, hogy létezik i és j (i < j), amelyekre u i u i+1... u i+k 1 = u j u j+1... u j+k 1, de ebben az esetben u i+k = u j+k. Ekkor az u i+1 u i+2... u i+k = u j+1 u j+2... u j+k egyenl ségb l következik, hogy: u i+k+1 = u j+k+1, és ezért u i+l = u j+l igaz minden l 0 értékre. Tehát u végperiodikus deníció. Az u A ω szó Sturm-típusú, ha f u (n) = n + 1, minden n 1 értékre. A Sturm-típusú szavak a legkisebb bonyolultságú végtelen és nem periodikus szavak. A végtelen Fibonacci-szó Sturm-típusú. Mivel f u (1) = 2, a Sturmtípusú szavak kétbet sek. A tételb l következik, hogy minden végtelen és nem végperiodikus

77 35.1. Egyszer bonyolultsági mértékek 1661 szónak a bonyolultsága legalább n + 1, azaz u A ω, u nem végperiodikus f u (n) n + 1. Az egyenl ség Sturm-típusú szavakra áll fenn. A végtelen szavak hasonló módon jellemezhet k az alsó és fels teljes bonyolultság segítségével is tétel. Ha a végtelen u szó nem végperiodikus és n 1, akkor n n C u + (n) + 1, K u + 2 (n) n. Az egyenl ség Sturm-típusú szavakra áll fenn. Jelölje {x} az x törtrészét, míg x az egészrészét. Nyilvánvaló, hogy x = x + {x}. Az R függvény önmagával való n-szeri összetételét jelöljük R n -nel. Azaz R n = R R... R (n-szer). A Sturm-típusú szavakat jellemezhetjük a következ képpen is tétel. Az u = u 1 u 2... szó akkor és csakis akkor Sturm-típusú, ha létezik egy α irracionális szám és egy z valós szám úgy, hogy az R(x) = {x+α} függvényre fennálljon, hogy { 0, ha R u n = n (z) (0, 1 α), 1, ha R n (z) [1 α, 1), vagy u n = { 1, ha R n (z) (0, 1 α), 0, ha R n (z) [1 α, 1). A végtelen Fibonacci-szó esetében α = z = 1 2 ( 5 + 1). Sturm-típusú szavakat el állíthatunk billiárd golyó pályája segítségével is. Egy négyzet alakú billiárd asztal szélét l elindítunk irracionális szög alatt egy billiárd golyót, amelyr l feltételezzük, hogy súrlódás nélkül mozog, visszaver dik a széleken és végtelen pályát jár be. Amikor a golyó érinti valamelyik vízszintes szélt, akkor 0-t, amikor pedig valamelyik függ leges szélt, akkor 1-et írunk kimenetként a szóba. Ez a módszer általánosítható (s+1)-bet s ábécére, amikor a billiárd golyó (s + 1)-dimenziós hiperkockában mozog. Ekkor a bonyolultság f u (n, s + 1) = min(n,s) i=0 n!s! (n i)!i!(s i)!. Ha s = 1, akkor f u (n, 2) = f u (n) = n + 1, ha pedig s = 2, akkor f u (n, 3) = n 2 + n + 1.

78 Szavak bonyolultsága u f u (1) f u (2) f u (3) f u (4) f u (5) f u (6) f u (7) f u (8) ábra. Bináris szavak bonyolultsága. Maximális bonyolultság Az u szó maximális bonyolultsága, amint azt már láttuk, C(u) = max{f u (n) n 1, u A }. A ábrán néhány bináris szó bonyolultságát adjuk meg a lehetséges hosszúságokra. Innen látható, például, hogy C( ) = 5, C( ) = 3 stb. Véges szavakra érvényes a következ érdekes tétel tétel. Ha w véges szó és f w (n) a bonyolultsága, akkor létezik az m 1 és m 2 egész szám úgy, hogy 1 m 1 m 2 w és f w (n + 1) > f w (n), ha 1 n < m 1, f w (n + 1) = f w (n), ha m 1 n < m 2, f w (n + 1) = f w (n) 1, ha m 2 n w. A ábra szerint, például, ha w = , akkor m 1 = 3, m 2 = 4, w = , akkor m 1 = 4, m 2 = 4, w = , akkor m 1 = 2, m 2 = 5. Globális maximális bonyolultság A globális maximális bonyolultság G(n) = max{c(u) u A n },

79 35.1. Egyszer bonyolultsági mértékek 1663 f u (i) u i = 1 i = 2 i = ábra. Az összes 3 hosszúságú bináris szó bonyolultsága. azaz a legnagyobb (maximális) bonyolultság egy adott ábécé fölötti összes n hosszúságú szó halmazán. A következ problémák merülnek fel. Mennyi azon szavak hossza, amelyekre a maximális bonyolultság egyenl a globális maximális bonyolultsággal. Hány ilyen szó létezik? Példák. Ha A = {0, 1} az ábécé, a és a ábra tartalmazza az összes 3 és 4 hosszúságú szó bonyolultságát. A 3 hosszúságú szavak esetében (35.8. ábra) a globális maximális bonyolultság 2, és ezt az értéket az 1 és 2 hosszúságú szavak adják. Összesen 6 ilyen szó van. A 4 hosszúságú szavak esetében (35.9. ábra) a globális maximális bonyolultság 3, és ezt az értéket a 3 hosszúságú szavak adják. Összesen 8 ilyen szó van. A fenti problémák megoldására vezessük be a következ jelöléseket: R(n) = {i {1, 2,..., n} u A n : f u (i) = G(n)}, M(n) = #{u A n : C(u) = G(n)}. A ábrán a G(n), R(n) és M(n) értékei láthatók (1 n 20) bináris szavakra. A következ lemma segítségével bebizonyítunk néhány, maximális bonyolultságra vonatkozó eredményt lemma. [78] Minden k N értékre, a legrövidebb szó, amely részszóként tartalmazza az összes (q k darab) k hosszúságú q-bet s ábécé fölötti szót, q k + k 1 hosszúságú (ebben a szóban minden k hosszúságú szó egyetlen egyszer szerepel).

80 Szavak bonyolultsága f u (i) u i = 1 i = 2 i = 3 i = ábra. Az összes 4 hosszúságú bináris szó bonyolultsága tétel. Ha #A = q és q k + k n q k+1 + k, akkor G(n) = n k. Bizonyítás. El ször vizsgáljuk meg az n = q k+1 + k, k 1 esetet. A lemmából következik, hogy létezik olyan q k+1 + k hosszúságú w szó, amelyik tartalmazza az összes (k +1) hosszúságú szót (ezek száma q k+1 ), tehát f w (k + 1) = q k+1. Nyilvánvaló, hogy f w (l) = q l < f w (k + 1), ha l {1, 2,..., k} és f w (k j) = q k+1 j < f w (k + 1), ha j {1, 2,... q k+1 1}. Minden más q k+1 + k hosszúságú szó bonyolultsága kisebb vagy egyenl C(w) = f w (k+1)-nél, tehát G(n) = q k+1 = n k. Ha k 1, tekintsük az n = q k+1 + k r esetet, ahol r {1, 2,..., q k+1 q k }, ekkor tehát q k + k n < q k+1 + k. Ha a fenti q k+1 + k hosszúságú w szónak levágjuk az utolsó r bet jét, akkor az így kapott w n szó n = q k+1 +k r hosszúságú, ahol r {1, 2,..., q k+1 q k }. Erre a szóra f wn (k + 1) = q k+1 r, és ez a maximális bonyolultsága. Valójában, nyilvánvaló, hogy f wn (k+1+j) = f wn (k + 1) j < f wn (k + 1), ha j {1, 2,..., n k 1}. Ha l {1, 2,..., k}, akkor f wn (l) q l q k q k+1 r = f wn (k + 1), tehát C(w n ) = f wn (k + 1) = q k+1 r. Mivel lehetetlen, hogy egy n = q k+1 + k r hosszúságú szónak, ahol r {1, 2,..., q k+1 q k } a maximális bonyolultsága nagyobb legyen, mint

81 35.1. Egyszer bonyolultsági mértékek 1665 n G(n) R(n) M(n) , , , , ábra. G(n), R(n) és M(n) értékei. q k+1 r, következik, hogy G(n) = q k+1 r = n k tétel. Ha #A = q és q k +k < n < q k+1 +k+1, akkor R(n) = {k+1}; ha n = q k + k, akkor R(n) = {k, k + 1}. Bizonyítás. A tétel bizonyításának els felében megmutattuk, hogy az n = q k+1 + k (k 1) esetben létezik olyan n hosszúságú w szó, amelyre G(n) = f w (k + 1) = n k. Ez azt jelenti, hogy k + 1 R(n). A w szóra, akárcsak minden más n hosszúságú w szóra f w (l) < f w (k+1), l k + 1, a w speciális felépítése miatt, amely szó tartalmazza az összes k + 1 hosszúságú részszót a lehet legkompaktabb módon. Ezért R(n) = {k + 1}. Akárcsak a tétel bizonyításának második részében, legyen n = q k+1 + k r, ahol r {1, 2,... q k+1 q k }, és legyen a w n szó, amelyre G(n) = f wn (k + 1) = q k+1 r. Ismét azt kapjuk, hogy k + 1 R(n). Ha l > k + 1, akkor nyilvánvaló, hogy w n bonyolultsága (akárcsak minden más

82 Szavak bonyolultsága n hosszúságú szóé) szigorún kisebb, mint f wn (k + 1). Vizsgáljuk meg, hogy létezik-e olyan w szó, amelyre f w (k + 1) = n k és f w (l) = n k, ha l k. Tudjuk, hogy f w (l) q l q k q k+1 r, tehát az f w (l) = n k = q k+1 r egyenl ség csak akkor áll fenn, ha l = k és r = q k+1 q k, azaz ha w = q k + k. Bebizonyítjuk, hogy ha n = q k + k, akkor R(n) = {k, k + 1}. Ha például a Martin-algoritmussal el állított q k + k 1 hosszúságú szóból indulunk ki, és ehhez hozzáadunk az A ábécéb l egy tetsz leges bet t, akkor olyan n = q k + k hosszúságú v szót kapunk, amely tartalmazza az összes q k darab k hosszúságú szót és az összes q k = n k darab (k + 1) hosszúságú szót, tehát f v (k) = f v (k + 1) = G(n). A Martin (vagy más, hatékonyabb) algoritmus alapján könnyen el állíthatunk olyan w szavakat, amelyekre C(w) = G(n) tétel. Ha #A = q és q k + k n q k+1 + k, akkor M(n) egyenl a B(q, k + 1) De Bruijn-gráf összes különböz n k 1 hosszúságú irányított útjainak számával. Bizonyítás. A és tételekb l következik, hogy M(n), az olyan n hosszúságú szavak száma, amelyek bonyolultsága egyenl a globális maximális bonyolultsággal, egyenl azon w A n szavak számával, amelyekre f w (k + 1) = n k. Ez azt jelenti, hogy ezek a szavak (n k) darab (k + 1) hosszúságú részszót tartalmaznak, amelyek mind különböz ek. Ezek felsorolásában induljunk ki egy tetsz leges (k + 1) hosszúságú szóból (amely a B(q, k + 1) De Bruijn-gráf egy csúcsa), adjunk hozzá bet ket A-ból úgy, hogy ne ismétl djenek a már létez (k + 1) hosszúságú részszók. Természetesen nem minden próbálkozás jár sikerrel, azaz nem mindig jutunk el egy n hosszúságú szóhoz, de amikor igen, akkor azok bizonyosan a B(q, k + 1) gráf egy, az adott csúccsal kezd d és (n k 1) hosszúságú útjának felelnek meg. Tehát minden olyan n hosszúságú szóhoz, amelyre f w (k + 1) = n k, hozzárendelhet egy és csakis egy olyan (n k 1) hosszúságú út, amely az els (k + 1) bet nek megfelel szóból indul ki, és fordítva, minden (n k 1) hosszúságú út egy n hosszúságú w szónak felel meg, amely n k különböz (k + 1) hosszúságú részszót tartalmaz. M(n) kifejezhet úgy is, mint a { T (q, w) w A k+1 } halmazban lév De Bruijn-fák összes (n k 1)-edik szintjén lév csúcsok száma tétel. Ha n = 2 k + k 1, akkor M(n) = 2 2k 1. Bizonyítás. A B(2, k) De Bruijn-gráfban 2 2k 1 k különböz irányított Hamilton-kör van. Egy Hamilton-kör minden csúcsával kezdhet egy De Bruijn-szó, amely maximális bonyolultságú. Tehát M(n) = 2 k 2 2k 1 k =

83 35.1. Egyszer bonyolultsági mértékek k 1, és ez bizonyítja a tételt. A tétel általánosítása q 2 bet j ábécére: tétel. Ha n = q k + k 1, akkor M(n) = (q!) qk 1. Teljes bonyolultság Egy szó teljes bonyolultsága az összes nemüres részszóinak a száma, azaz u K(u) = f u (i). i=1 Az a n (n 1) triviális szó teljes bonyolultsága n. A szivárvány szó (minden bet je különböz ) teljes bonyolultsága. n(n + 1) 2 A következ tétel egy adott teljes bonyolultságú szó létezését vizsgálja tétel. Ha a C természetes szám különbözik 1, 2 és 4-t l, akkor létezik olyan nemtriviális szó, amelynek a teljes bonyolultsága C. Bizonyítás. A bizonyításhoz megadjuk a következ k hosszúságú szavak teljes bonyolultságát. K(a k 1 b) = 2k 1 ha k 1, K(ab k 3 aa) = 4k 8 ha k 4, K(abcd k 3 ) = 4k 6 ha k 3. Ezek könnyen kiszámíthatók a teljes bonyolultság deníciója alapján. 1. Ha C páratlan, akkor felírható C = 2k 1 alakban, egy adott k-ra. Ekkor k = (C + 1)/2, és az a k 1 b szó teljes bonyolultsága éppen C. 2. Ha C páros, akkor C = 2l alakú Ha l = 2h, akkor 4k 8 = C értékre 4k 8 = 4h, és innen k = h + 2 adódik. Az ab k 3 aa szó teljes bonyolultsága pedig C Ha l = 2h + 1, akkor 4k 6 = C értékre 4k 6 = 4h + 2, innen pedig következik, hogy k = h+2. De ekkor az abcd k 3 szó teljes bonyolultsága C. A bizonyításban két bet nél többet csak a 2.2. eset vizsgálatánál használtunk. Felvet dik a kérdés, hogy ebben az esetben is lehetséges lenne kétbet s szavakat találni az adott teljes bonyolultságra? A válasz erre is igen. Elegend ezt csak 4h + 2 alakú számokra bizonyítani. Ha C = 4h + 2 és C 34, akkor igazak a következ k: K(ab k 7 abbabb) = 8k 46, ha k 10, K(ab k 7 ababba) = 8k 42, ha k 10.

84 Szavak bonyolultsága Ha h = 2s, akkor 8k 46 = 4h + 2 egyenl ségb l következik k = s + 6, és az ab k 7 abbabb szó teljes bonyolultsága 4h + 2. Ha h = 2s + 1, akkor 8k 42 = 4h + 2 egyenl ségb l következik k = s + 6, és az ab k 7 ababba szó teljes bonyolultsága 4h + 2. Ha C < 34 akkor csak a 14, 26 és 30 számokra van kétbet s megoldás. Az ab 4 a teljes bonyolultsága 14, az ab 6 a szóé 26 és az ab 5 aba szóé pedig 30. Egy fa felépítésével könnyen belátható, hogy 6, 10, 18 és 22 értékekre nincs olyan kétbet s szó, amelyre a teljes bonyolultság éppen ennyi lenne. Ennek alapján kijelenthetjük a következ tételt tétel. Ha a C természetes szám különbözik az 1, 2, 4, 6, 10, 18 és 22 számoktól, akkor létezik olyan kétbet s, nemtriviális szó, amelynek teljes bonyolultsága C. Adott hosszúságú és adott teljes bonyolultságú szó nem mindig létezik, ezt kés bb bizonyítjuk. Ezek után felmerül az a kérdés, hogy hány olyan adott n hosszúságú szó van, amelynek teljes bonyolultsága egy adott C érték. Kicsi n-re a feladat könnyen megoldható teljesen. Vizsgáljuk meg általános esetben. Legyen A egy n bet s ábécé, és tekintsük az összes A fölötti n bet s szót. A ábrán adott hosszúságú és teljes bonyolultságú szavak el fordulási száma látható. Ha #A = n, jelöljük φ n (C)-vel az olyan n hosszúságú A fölötti szavak számát, amelyeknek teljes bonyolultsága C. Ekkor fennállnak a következ k. φ n (C) = 0 ha C < n vagy C > φ n (n) = n, φ n (2n ( 1) = 3n(n) 1), n(n + 1) n(n 1)n! φ n 1 =, 2 2 ( ) n(n + 1) φ n = n! 2 n(n + 1), 2 A 0 el fordulású szavakra érvényesek a következ k: Ha C = n + 1, n + 2,..., 2n 2, akkor φ n (C) = 0. Ha C = 2n, 2n + 1,..., 3n 5, akkor φ n (C) = 0. Ezek után a kérdés az, hogy létezik-e olyan érték, hogy attól kezdve n(n+1) 2 - ig már minden értékre létezik legalább egy szó, amelynek a teljes bonyolultsága az adott szám. A válasz pozitív. Legyen b n ez a legkisebb ilyen szám, azaz amelyre

85 35.2. Általános bonyolultsági mértékek 1669 n = 2 C 2 3 φ n (C) 2 2 n = 3 C φ n (C) n = 4 C φ n (C) n = 5 C φ n (C) n = 6 C φ n (C) C φ n (C) ábra. Adott bonyolultságú szavak el fordulási száma. n(n + 1) φ n (C) 0 minden C-re, ha b n C. 2 A b n szám létezik minden n-re (ez legrosszabb esetben n(n + 1)/2): tétel. Ha l 2, 0 i l, n = b n = l(l2 1) 2 l(l + 1) 2 + 3l i(l + 1) i, akkor Általános bonyolultsági mértékek Láttuk az el z szakaszban, hogy ha egy szó egy kezd - és/vagy végszeletét elhagyjuk, részszót kapunk. Ha egy szó tetsz leges bet it hagyjuk el, akkor egy ún. gyér részszót (az angol szakkifejezés: scattered subword) kapunk. Néha nevezik részsorozatnak is. Az olyan speciális gyér részszót, amelyben a szomszédos bet k az eredeti szóban legalább d 1 és legfeljebb d 2 távolságra vannak, (d 1, d 2 )-részszónak hívjuk. Megadjuk a pontos értelmezését is deníció. Legyenek n, d 1 d 2, s pozitív egészek, és legyen u =

86 Szavak bonyolultsága ábra. A (2, 4)-részszóknak megfelel gráf, ha n = 6. x 1 x 2... x n A n egy A fölötti szó. A v = x i1 x i2... x is i 1 1, d 1 i j+1 i j d 2, ha j = 1, 2,..., s 1, i s n, az u szó s hosszúságú (d 1, d 2 )-részszója. szó, ahol Például az aabcade szó (2, 4)-részszói: a, ab, ac, aba, aa, acd, abd, aae, abae, ace, abe, ad, b, ba, bd, bae, be, c, cd, ce, ae, d, e deníció. Az u szó különböz (d 1, d 2 )-részszóinak a száma az u szó (d 1, d 2 )-bonyolultsága, amelyet C u (d 1, d 2 )-vel jelölünk. Például, ha u = aabcade, akkor C u (2, 4) = Szivárvány szavak A páronként különböz bet kb l álló szavakat szivárvány szavaknak hívjuk. A szivárvány szó (d 1, d 2 )-bonyolultsága nem függ a szó bet it l, csak annak hosszától, ezért jelölése C(n; d 1, d 2 ). Az n hosszúságú szivárvány szó (d 1, d 2 )-bonyolultságának kiszámítására tekintsük az a 1 a 2... a n szót, és rendeljük hozzá a G = (V, E) irányított gráfot, ahol V = { } a 1, a 2,..., a n, E = { (a i, a j ) d 1 j i d 2, i = 1, 2,..., n, j = 1, 2,..., n }. Az n = 6, d 1 = 2 és d 2 = 4 paramétereknek megfelel gráf a ábrán látható. A gráf A = ( ) a ij i=1,n szomszédsági mátrixa a következ : j=1,n { 1, ha d1 j i d a ij = 2, 0, különben, ha i = 1, 2,..., n, j = 1, 2,..., n. Mivel a gráfban nincs irányított kör, az A k mátrix (ahol A k = A k 1 A, és

87 35.2. Általános bonyolultsági mértékek 1671 A 1 = A) i-edik sorában és j-edik oszlopában lév elem a gráf k hosszúságú azon irányított útjainak a számát jelenti, amelyek a i -vel kezd dnek és a j - vel végz dnek. Ha A 0 mátrix az identikus mátrix, azaz a f átlón lév elemei 1-esek, míg a többi elem 0, legyen az R = (r ij ) mátrix a következ : R = A 0 + A + A A k, ahol A k+1 = O ( a nullmátrix). A szivárvány szó (d 1, d 2 )-bonyolultsága C(n; d 1, d 2 ) = n i=1 j=1 n r ij. Az R mátrixot könnyebben kiszámíthatjuk a jól ismert Warshall-algoritmus következ változatával: Warshall'(A, n) 1 W A 2 for k 1 to n 3 do for i 1 to n 4 do for j 1 to n 5 do w ij w ij + w ik w kj 6 return W A W mátrixból következik R = A 0 +W. Az algoritmus id bonyolultsága Θ(n 3 ). Példaként tekintsük a ábrán látható gráfot. Ennek szomszédsági mátrixa: A = A Warshall-típusú algoritmus alkalmazása után: W = , R = ,

88 Szavak bonyolultsága n = 6 n = 7 d 1 d d 1 d ábra. 6 és 7 hosszúságú szivárvány szavak (d 1, d 2 )-bonyolultsága. és ezért C(6; 2, 4) = 19, az R elemeinek összege. Ez a Warshall-típusú algoritmus a latin négyzet módszerével kombinálva jól használható az n (n 2) hosszúságú a 1 a 2... a n szivárvány szó (d 1, d 2 )- részszóinak a meghatározására. Jelöljük az A mátrix elemeit az A ij -vel, amelyek szóhalmazok. Kezdetben ez a mátrix a következ : { {ai a A ij = j }, ha d 1 j i d 2,, különben, ha i = 1, 2,..., n, j = 1, 2,..., n. Ha X és Y szóhalmazok, akkor XY halmaz elemeit úgy kapjuk meg, hogy az X halmaz minden elemét összeillesztjük (konkatenáljuk) a Y halmaz minden elemével: X Y = { xy x X, y Y }. Ha az s = s 1 s 2... s p els bet jét elhagyjuk, jelöljük a kapott szót s-sel, azaz s = s 2 s 3... s p. Így A ij jelölje azt a szóhalmazt, amelyet úgy kapunk A ij -ból, hogy minden elemének elhagyjuk az els bet jét. Ebben az esetben A az a mátrix, amelynek elemei A ij. A fentebb értelmezett A mátrixszal kezdve, a következ algoritmusunk kiszámítja az összes nemtriviális (legalább két bet b l álló) (d 1, d 2 )-részszókat

89 35.2. Általános bonyolultsági mértékek 1673 Warshall-Latin(A, n) 1 W A 2 for k 1 to n 3 do for i 1 to n 4 do for j 1 to n 5 do if W ik és W kj 6 then W ij W ij W ik W kj 7 return W A nemtriviális (d 1, d 2 )-részszók halmaza i,j {1,2,...,n} id bonyolultsága szintén Θ(n 3 ). Ha n = 7, d 1 = 2, d 2 = 4, akkor az eredeti mátrix: A = {ac} {ad} {ae} {bd} {be} {bf} {ce} {cf} {cg} {df} {dg} {eg} W ij. Az algoritmus, és W = {ac} {ad} {ace, ae} {adf, acf} {aeg, aceg, adg, acg} {bd} {be} {bdf, bf} {beg, bdg} {ce} {cf} {ceg, cg} {df} {dg} {eg}. Beleszámítva az egybet s (triviális) szavakat is, C(7; 2, 4) = 30. A d 1 = 1 eset Ebben az esetben d 2 helyett egyszer en csak d-t írunk. A szivárvány szó esetében a i,d -vel jelöljük az i pozícióban végz d (1, d)-részszók számát. Ha i = 1, 2,..., n, akkor a i,d = 1 + a i 1,d + a i 2,d a i d,d. (35.1)

90 Szavak bonyolultsága Az egyszer ség kedvéért, C(n; 1, d) helyett használjuk az N(n, d) jelölést. Ekkor a szivárvány szó (1, d)-bonyolultságát a következ képlettel kaphatjuk meg: n N(n, d) = a i,d. A (35.1) képlet miatt, d 2 esetében a i,d + 1 ( d 1 = a i 1,d + 1 ) ( + + a i d,d + 1 ) d 1 d 1 Ha most a következ jelölést használjuk: akkor i=1 b i,d = a i,d + 1 d 1, and c i,d = (d 1)b i,d, c i,d = c i 1,d + c i 2,d c i d,d, és a c i,d számok Fibonacci-típusúak. Tetsz leges d-re a 1,d = 1 és ebb l c 1,d = d következik. A c i,d számokat a következ rekurzív összefüggés adja: és vagy c n,d = c n 1,d + c n 2,d c n d,d, ha n > 0, c n,d = 1, for n 0. Ezeket a számokat el állíthatjuk a következ generátorfüggvénnyel: F d (z) = n 0 c n,d z n = 1 + (d 2)z z2 z d 1 2z + z d+1 = 1 + (d 3)z (d 1)z2 + z d+1 (1 z)(1 2z + z d+1 ) Az N(n, d) (1, d)-bonyolultság kifejezhet a következ képpen: ( n ) N(n, d) = 1 c i,d n, ha d > 1, d 1 i=1 N(n, 1) = n(n + 1) 2 N(n, d) = N(n 1, d) + 1 d 1 (c n,d 1), ha d > 1, n > 1. Ha d = 2, akkor F 2 (z) = 1 z2 1 2z + z 3 = 1 + z 1 z z 2 = F (z) + F (z), z,..

91 35.2. Általános bonyolultsági mértékek 1675 n d ábra. Az n hosszúságú szivárvány szavak (1, d)-bonyolultsága. ahol F (z) az F n Fibonacci-számok generátorfüggvénye (ahol F 0 = 0, F 1 = 1). Ekkor ebb l következik, hogy c n,2 = F n+1 + F n = F n+2, és N(n, 2) = n F i+2 n = F n+4 n 3. i=1 A ábra az N(n, d) értékeit tartalmazza, ha k 10 és d 10. N(n, d) = 2 n 1, ha d n 1. Az alábbi tétel megadja N(n, d) értékét az n 2d 2 esetben tétel. Ha n 2d 2, akkor N(n, n d) = 2 n (d 2) 2 d 1 2. A bizonyítás a következ képleten alapszik: N(n, n d 1) = N(n, n d) d 2 d 1 Az N(n, d) értéke úgy is megkapható, ha kiszámítjuk azon k hosszúságú, csak 0 és 1 bet kb l álló olyan szavak számát, amelyekben nincs (d 1)-nél több egymás melletti 0. Ezekben a szavakban az 1 jelenti egy bet meglétét az eredeti szóból, míg 0 annak hiányát egy (1, d)-részszóban. Legyen b n,d azon n hosszúságú bináris szavak száma, amelyekben az els és az utolsó bet 1,

92 Szavak bonyolultsága és amelyben legfeljebb d 1 szomszédos 0 van. Ekkor b n,d = b n 1,d + b n 2,d b n d,d, ha k > 1, b 1,d = 1, b n,d = 0, ha n 0, mivel minden ilyen n i (i = 1, 2,..., d) hosszúságú szó csak egyféleképpen folytatható, hogy n hosszúságú szót kapjunk (0 i 1 1-et hozzáadva jobbról). A b n,d -re a következ képlet is megadható: b n,d = 2b n 1,d b n 1 d,d, mivel ha 1 vagy 0 bet t illesztünk az n 1 hosszúságú szó egy bels pozíciójába (pl. (n 2)-be), akkor 2b n 1,d darab n hosszúságú szót kapunk, de ezek közül b n 1 d,d szó d szomszédos 0-t tartalmaz. A b n,d számok generátorfüggvénye B d (z) = n 0 b n,d z n = z 1 z z d = z(1 z) 1 2z + z d+1. Balról és jobbról nullákkal b vítve a szót, kiszámíthatjuk N(k, d)-t mint ezen szavak számát.) Tehát N(k, d) = b k,d + 2b k 1,d + 3b k 2,d + + kb 1,d. (i nulla (i+1)-szer illeszthet be: egy sem balról, i pedig jobbról, egy 1 balról, i 1 jobbról és így tovább). Innen az N(k, d) bonyolultság generátorfüggvénye megkapható mint a következ két generátorfüggvény szorzata: B d (z) és A(z) = n 0 nzn = 1/(1 z) 2, tehát: N d (z) = n 0 N(n, d)z n = z (1 z)(1 2z + z d+1 ). A d 2 = n 1 eset A következ kben d 1 helyett d-t írunk. Ebben az esetben a részszó szomszédos bet i az eredeti szóban legalább d távolságra vannak. Jelölje b n,d (i) azon (d, n 1)-részszókat, amelyek az eredeti n hosszúságú szivárvány szó i-edik pozíciójában kezd dnek. Az abcdef szó esetében látható, hogy b 6,2 (1) = 8, b 6,2 (2) = 5, b 6,2 (3) = 3, b 6,2 (4) = 2, b 6,2 (5) = 1 és b 6,2 (6) = 1. Azonnal következik a b n,d (i) = 1 + b n,d (i+d) + b n,d (i+d+1) + + b n,d (n), (35.2)

93 35.2. Általános bonyolultsági mértékek 1677 n ábra. K(n, d) értéke. képlet, ha n > d és 1 i n d, és b n,d (1) = 1 ha n d. Az egyszer ség kedvéért jelöljük C(n; d, n)-t K(n, d)-vel. Az n hosszúságú szivárvány szó (d, n 1)-bonyolultsága a következ képlettel számítható ki: n K(n, d) = b n,d (i). (35.3) Ez a következ képen is írható: i=1 a alapján. n K(n, d) = b k,d (1), (35.4) k=1 K(n + 1, d) = K(n, d) + b n+1,d (1) Ha d = 1 akkor a K(n, 1) bonyolultság könnyen kiszámítható: K(n, 1) = 2 n 1. A (35.2) képlet alapján a b n,d (i) kiszámítható a következ algoritmussal. A b n,d (k) (k = 1, 2,...) értékeket az algoritmus adott n-re és d-re a b = (b 1, b 2,...) tömbben rzi meg. Kezdetben ennek a tömbnek minden eleme 1. Az algoritmust adott n, d és i értékekre a következ képpen hívjuk meg:

94 Szavak bonyolultsága for k 1 to n do b k 1 B(n, d, i) A rekurzív algoritmus a következ : B(n, d, i) 1 p 1 2 for k i + d to n 3 do if b k = 1 4 then B(n, d, k) 5 p p + b k 6 b i p 7 return Ez az algoritmus lineáris. A B(8, 2, 1) meghívásra a következ sorrendben kapjuk meg az elemeket: b 7 = 1, b 8 = 1, b 5 = 3, b 6 = 2, b 3 = 8, b 4 = 5 és b 1 = lemma. b n,2 (1) = F n, ahol F n az n-edik Fibonacci-szám. Bizonyítás. Tekintsük az a 1 a 2... a n szivárvány szót, és számítsuk ki az összes (2, n 1)-részszót, amely a 2 -vel kezd dik. Ha a 2 -t a 1 -re cseréljük mindegyik olyan (2, n 1)-részszóban, amelyik a 2 -vel kezd dik, szintén (2, n 1)- részszót kapunk. Ha hozzáadjuk a 1 -et mindegyik olyan (2, n 1)-részszó elejéhez, amelyik a 3 -mal kezd dik, szintén (2, n 1)-részszót kapunk. Tehát b n,2 (1) = b n 1,2 (1) + b n 2,2 (1). Így b n,2 (1) Fibonacci-szám, és mivel b 1,2 (1) = 1, azt kapjuk, hogy b n,2 (1) = F n tétel. K(n, 2) = F n+2 1, ahol F n az n-edik Fibonacci-szám. Bizonyítás. A (35.4) képlet és a lemma alapján: K(n, 2) = b 1,2 (1) + b 2,2 (1) + b 3,2 (1) + b 4,2 (1) + + b n,2 (1) = F 1 + F F n = F n+2 1.

95 35.2. Általános bonyolultsági mértékek 1679 Ha az M n,d = b n,d (1) jelölést használjuk, akkor a b n,d (1) = b n 1,d (1) + b n d,d (1) képlet alapján egy általánosított sorozatot kapunk: M n,d = M n 1,d + M n d,d, for n d 2, (35.5) M 0,d = 0, M 1,n = 1,..., M d 1,d = 1. Legyen ez a sorozat d-közép sorozat. Mivel M n,2 = F n, a d-közép sorozat a Fibonacci-sorozat általánosításaként foghatjuk fel. A következ lineáris algoritmus kiszámítja az M n,d számot, használva az M 0, M 1,..., M d 1 tömböt a szükséges elemek meg rzésére: Közép(n, d) 1 M for i 1 to d 1 3 do M i 1 4 for i d to n 5 do M i mod d M (i 1) mod d + M (i d) mod d 6 print M i mod d 7 return Az M d (z) = n 0 M n,d z n generátorfüggvényt használva, a következ képletet kapjuk: z M d (z) = 1 z z d. (35.6) n Ezzel kiszámítható az s n,d = M i,d összeg, amely a z n+d együtthatója a i=1 következ függvény kifejtésében: z d 1 z z d 1 1 z = z d 1 z z d + z 1 z z d z 1 z. Így s n.d = M n+(d 1),d + M n,d 1 = M n+d,d 1. Tehát n M i,d = M n+d,d 1. (35.7) i= tétel. K(n, d) = M n+d,d 1, ahol n > d és M n,d a d-közép sorozat n-edik eleme.

96 Szavak bonyolultsága Bizonyítás. A bizonyítás hasonló a tétel bizonyításához, gyelembe véve a (35.7) képletet tétel. K(n, d) = ( ) n (d 1)k, ha n 2, d 1. k + 1 k 0 Bizonyítás. Induljunk ki a G(z) = 1 1 z = 1 + z + z2 + generátorfüggvényb l. A (35.6) képletet gyelembe véve kapjuk: M d (z) = zg(z + z d ) = z + z(z + z d ) + z(z + z d ) z(z + z d ) i +. Ennek kifejtésében az általános tag i ( ) i z i+1 z (d 1)k, k és z n+1 együtthatója k=1 ( ) n (d 1)k. k k 0 A z n+d együtthatója M n+d,d = ( ) n + d 1 (d 1)k. (35.8) k k 0 A tételb l K(n, d) = M n+d,d 1, és innen egyszer számítással kapjuk, hogy K(n, d) = ( ) n (d 1)k. k + 1 k Tetsz leges szavak A Warshall-Latin algoritmust használva a nem szivárvány szavak bonyolultsága is kiszámítható, ügyelve arra, hogy az ismétl d részszókat ki kell hagyni. Az aabbbaaa szó esetében, ha d 1 = 2 és d 2 = 4, az eredmény: ab, abb, aba, abba, abaa, aa, aaa, bb, ba, bba, baa. Ezekhez hozzávéve az a és b résszókat, az eredmény C aabbbaaa (2, 4) = Palindrombonyolultság A véges vagy végtelen w szóhoz rendelt pal w palindrombonyolultság függvény minden n N értékhez hozzárendeli a w szó n hosszúságú palindrom részszóinak pal w (n) számát. A véges w A szó teljes palindrombonyolultsága egyenl a w szó

97 35.3. Palindrombonyolultság 1681 összes nemüres palindrom részszóinak számával, azaz w P (w) = pal w (n). n= Véges szavak palindromjai tétel. A w szó P (w) teljes palindrombonyolultságára fennáll, hogy P (w) w. Bizonyítás. A bizonyítást a w szó n hosszúságára vonatkozó indukcióval végezzük. Ha n = 1, akkor nyilvánvalóan P (w) = 1. Legyen n 2, és feltételezzük, hogy az állítás igaz minden (n 1) hosszúságú szóra. Legyen w = a 1 a 2... a n egy n hosszúságú szó, és u = a 1 a 2... a n 1 az (n 1) hosszúságú el szelete. Az indukciós feltétel alapján P (u) n 1. Ha a n a j, minden j {1, 2,... n 1} értékre, akkor a n a w egyetlen palindrom részszója, amelyik nem részszója u-nak is, tehát P (w) = P (u)+1 n. Ha létezik olyan j (1 j n 1) index úgy, hogy a n = a j, akkor P (w) > P (u) akkor és csakis akkor, ha w-nek vannak palindrom végszeletei. Feltételezzük, hogy létezik legalább két ilyen palindrom végszelet, a i a i+1... a n és a i+k a i+k+1... a n, 1 k n i. Ebb l következik, hogy a i = a n = a i+k a i+1 = a n 1 = a i+k+1 a n k = a i+k = a n, tehát a i+k... a n = a i... a n k. Ez utóbbi palindrom már u-ban is el fordul, mivel k 1, tehát már beszámoltuk P (u)-ba. Így P (w) P (u) + 1 n. Ez az eredmény azt mutatja, hogy a nemüres palindromok száma nem lehet több, mint a szó hossza. A következ kben megvizsgáljuk, hogy léteznek-e olyan szavak, amelyek szegények palindromokban. A következ lemma olyan n 9 hosszúságú szavakat állít el, amelyek pontosan 8 palindromot tartalmaznak. Jelölje w p q a q hosszúságú w szó törthatványát, amely a w p szó p hosszúságú el szelete lemma. Ha w n = (001011) n 6, n 9, akkor P (w n ) = 8. Bizonyítás. A w n szóban a következ részszók palindromok: 0, 1, 00, 11,

98 Szavak bonyolultsága 010, 101, 0110, Mivel 010 és 101 a w n -ben balról egy 0, jobbról egy 1 között van, nem lehet úgy folytatni, hogy egy palindromot kapjunk. Hasonló a helyzet az 1001 és a 0110 szavakkal is, amelyek 1 és 0 között vannak, kivéve, amikor 1001 végszelet. Tehát w n -ben nincsenek más palindromok. Megjegyzés. Ha u a egy cirkuláris permutációja és n 9, akkor P (u n 6 ) szintén 8. Mivel 0 és 1 felcserélhet k, minden n-re legalább 12 n hosszúságú szó van, amelynek a teljes palindrombonyolultsága 8. A következ kben, a tétel fels korlátja mellett, a palindromok számára alsó korlátokat is adunk bináris szavak esetében. (Triviális esetben, amikor csupán egy bet t használunk, tetsz leges w szóra P (w) = w.) tétel. Az n hosszúságú bináris w szóra P (w) = n, ha 1 n 7, 7 P (w) 8, ha n = 8, 8 P (w) n, ha n 9. Bizonyítás. Ha n 8, a bizonyítást egy program segítségével könnyen elvégezhetjük. Innen kiderül, hogy ha n 7, minden szónak pontosan n a palindrombonyolultsága. Ha n = 8, akkor az összes 2 8 = 256 szóból csupán négynek 7 a bonyolultsága ( , , , ), a többié 8. Ha n 9, akkor a lemma szerint léteznek olyan v n szavak, amelyekre P (v n ) = 8. Csak azt kell még bizonyítani, hogy n 9 esetben legalább 8 palindrom van minden szóban. Ha megvizsgáljuk a 7 bonyolultságú 8 hosszúságú szavakat, megállapíthatjuk, hogy bárhova beszúrva egy újabb bet t, újabb palindrom fog megjelenni, tehát 9 hosszúságon mindig legalább 8 palindrom lesz. A maximális értéket az a n, a A, n N. alakú szavakra kapjuk. A következ kben arra szeretnénk választ kapni, hogy 8 és n között minden számhoz tudunk-e olyan, legalább 9 hosszúságú szót rendelni, amelynek palindrombonyolultsága éppen az a szám lemma. Ha u k,l = 0 k l 1, ahol k 2 és 1 l k 1, akkor P (u k,l ) = k + 6. Bizonyítás. Az u k,l szó k hosszúságú el szeletében mindig k palindrom van (0,..., 0 k ). Az ezekt l különböz palidromok a következ k: 1, 11, 010, 101, 0110 és 10 l 1 (ha l 2), valamint (ha l = 1). Ebb l következik, hogy P (u k,l ) = k lemma. Ha v k,l = (0 k 1011) k+l+5 k+4,ahol k 2 és k l n k 5, akkor P (v k,l ) = k + 6.

99 35.3. Palindrombonyolultság 1683 Bizonyítás. Mivel l k, az u k,j szónak van egy 0 k k 1 alakú el szelete, amelynek 0,..., 0 k, 1, 11, 010, 101, 0110 és 10 k 1 mind palindromjai, tehát P (v k,l ) k + 6. A 010 és 101 palindromok 0 és 1 között vannak, míg a 0110 és 10 k 1 az 1 és 0 között (kivéve, amikor végszeletek) l értékét l függetlenül. Tehát v k,l nem tartalmaz más palindromokat, ezért P (v k,l ) = k + 6. Megjegyzés. Ha k = 2, akkor a v 2,l szó azonos a lemmabeli w l+7 szóval. Használjuk a következ jelölést: P (A n ) = { P (w) w A n} tétel. Legyen A bináris ábécé. Ekkor { } P (A n { n, } ha 1 n 7, ) = 7, 8, ha n = 8, { } 8,..., n, ha n 9. Bizonyítás. Figyelembe véve a tételt, be kell bizonyítanunk, hogy minden adott n és i értékre, ahol 8 i n, létezik olyan n hosszúságú w n,i bináris szó, amelyre P (w n,i ) = i. Ha n és i adottak úgy, hogy 8 i n, akkor legyen k = i 6 2 és l = n k 5. Ha l k 1, legyen w n,i = u k,l a ( lemma alapján) vagy ha l k, akkor w n,i = v k,l a ( lemma alapján). Ekkor w n,i = n és P (w n,i ) = k + 6 = i. Példa. Legyen n = 25 és i = 15. Ekkor k = 15 6 = 9, l = = 11. Mivel l > k 1, használjuk a következ szót: v 9,11 = ( ) = , amelynek bonyolultsága 15. Hasonló eredményt kapunk, ha q 3 bet s ábécével dolgozunk tétel. Ha a w szó n hosszúságú egy adott q-bet s (q 3) ábécé felett, akkor P (w) = n, ha n {1, 2}, 3 P (w) n, ha n 3. Bizonyítás. Ha n {1, 2}, a tétel könnyen belátható. Legyen adott n 3 és egy legalább 3 hosszúságú szó. Ha ez a szó triviális (ugyanazt a bet t tartalmazza n-szer), akkor a teljes palindrombonyolultsága n 3. Ha a szóban pontosan két bet van, például a és b, akkor ezek palindromok, és legalább az egyik a következ palindromok közül biztosan szerepel a szóban: aa, bb, aba vagy bab, tehát ismét P (w) 3. Ha szó tartalmaz egy harmadik bet t is, akkor nyilvánvalóan P (w) 3, hisz ez a harmadik bet magában egy palindrom. Tehát a teljes palindrombonyolultság nem lehet kisebb 3-nál.

100 Szavak bonyolultsága tétel. Legyen A egy q-bet s (q 3) ábécé. Ekkor { { } P (A n n, ha 1 n 2, ) = { } 3,..., n, ha n 3. Bizonyítás. A tétel alapján elég bebizonyítani a tételt minden n és i értékre, ha 3 i n, vagyis hogy mindig létezik egy n hosszúságú w n,i szó, amelyre P (w n,i ) = i. Legyen ez a szó w n,i = a1 i 3 (a 1 a 2 a 3 ) n i+3 3, amelynek (i 2) palindromja van az (i 2) hosszúságú el szeletében, és a 2 és a 3 szintén palindromok. Teljes bonyolultság Végtelen szavak palindromjai Sturm-típusú szavak A végtelen Sturm-típusú szó palindrom részszóinak a számát a következ tétel adja meg tétel. Ha u végtelen Sturm-típusú szó, akkor { 1 ha n páros, pal u (n) = 2 ha n páratlan. Hatványszó A hatványszó amint már láttuk p = } 0.{{.. 0} 1 }.{{.. 1}.... n n tétel. A p hatványszó palindrombonyolultsága n pal p (n) = ε, 3 ahol { 0, ha n osztható 3-mal, ε = 1, különben. Bizonyítás. Az alábbi eseteket vizsgáljuk: n = 3k alakú. Palindrom részszók a következ k: 0 i 1 3k 2i 0 i ha i = 0, 1,... k, 1 i 0 3k 2i 1 i ha i = 0, 1,... k 1, így pal p (3k) = 2k + 1. n = 3k + 1 alakú. Palindrom részszók a következ k: 0 i 1 3k+1 2i 0 i ha i = 0, 1,... k, 1 i 0 3k+1 2i 1 i ha i = 0, 1,... k, így pal p (3k + 1) = 2k + 2.

101 35.3. Palindrombonyolultság 1685 n = 3k + 2 alakú. Palindrom részszók a következ k: 0 i 1 3k+2 2i 0 i ha i = 0, 1,... k, 1 i 0 3k+2 2i 1 i ha i = 0, 1,... k, így pal p (3k + 2) = 2k + 2. A hatványszó palindrom részszói a következ tulajdonsággal rendelkeznek: Azok a palindrom részszók, amelyek 0-t és 1-et is tartalmaznak, csak egyszer jelennek meg a hatványszóban. Ha a következ jelöléseket használjuk: U iji = 0 i 1 j 0 i és V iji = 1 i 0 j 1 i, akkor a következ felbontások egyértelm ek: p = U 111 U 121 U 232 U 242 U 353 U U k,2k 1,k U k,2k,k..., p = 0V 121 V 232 V 141 V 353 V 262 V 474 V V k+1,2k+1,k+1 V k,2k+2,k.... Champernowne-szó A Champernowne-szó a természetes számok bináris változatának egymás mellé illesztése. c = tétel. A Champernowne-szó palindrombonyolultsága pal c (n) = 2 n 2 +ε, ahol ε = { 0, ha n páros, 1, ha n páratlan. Bizonyítás. Egy n hosszúságú w palindromszó 0w0 és 1w1 formában folytatható, hogy (n + 2) hosszúságú palindromot kapjunk. A tétel a következ kb l bizonyítható: pal c (1) = 2, pal c (2) = 2, és ha n 1, akkor pal c (2n + 1) = 2pal c (2n 1), pal c (2n + 2) = 2pal c (2n). A következ algoritmus, amely használja a σ morzmust, el állítja a Sturm-típusú szó összes palindromjait egy adott hosszúságig, amelyek az a bet vel kezd dnek. Az algoritmus ötlete a következ. Ha p a legkisebb szám, amelyre σ p (a) és σ p (b) is páratlan hosszúságú (ilyen p mindig létezik), ezen szavak azon konjugáltjait tekintjük, amelyek palindromok (ilyenek mindig léteznek), és deniáljuk a következ morzmust: π(a) = konj ( σ p (a) ),

102 Szavak bonyolultsága π(b) = konj ( σ p (b) ), ahol konj(u) az u palindrom konjugáltját adja. A ( π n (a) ) és ( π n (b) ) sorozatok el állítják az összes páratlan n 0 n 0 hosszúságú palindromot, és ( π n (aa) ) sorozat az összes páros hosszúságú n 0 palindromot. Ha α egy szó, akkor α az a szó, amelyiket úgy kapjuk, hogy töröljük α els és utolsó bet jét. Általánosabban legyen m α m az a szó, amelyiket α-ból úgy kapjuk, hogy elhagyjuk annak els m és utolsó m bet jét. Sturm-palindromok(n) 1 if n páros 2 then n n 1 3 Legyen p a legkisebb érték, amelyre σ p (a) és σ p (b) is páratlan hosszúságú. 4 Legyen π(a) = konj ( σ p (a) ) és π(b) = konj ( σ p (b) ) 5 α a 6 while α < n 7 do α π(α) 8 m ( α n)/2 9 α m α m 10 β b 11 while β < n 12 do β π(β) 13 m ( β n)/2 14 β m β m

103 35.3. Palindrombonyolultság repeat print α, β kiírja a páratlan hosszúságú palindromokat 16 α α 17 β β 18 until α = ε és β = ε 19 γ aa 20 while γ < n do γ π(γ) 22 m ( γ n 1)/2 23 γ m γ m 24 repeat print γ kiírja a páros hosszúságú palindromokat 25 γ γ 26 until γ = ε Mivel mindegyik behelyettesítés cn lépést igényel (ahol c konstans), az algoritmus lineáris. A Fibonacci-szó esetében a σ morzmus: σ(a) = ab, σ(b) = a, és, mivel σ(a) = ab, σ 2 (a) = aba, σ 3 (a) = abaab, σ 3 (a) = abaab = 5, σ(b) = a, σ ( b) = ab, σ 3 (b) = aba, σ 3 (b) = aba = 3, mindegyike páratlan szám, p egyenl lesz 3-mal. Az abaab szó nem palindrom, és a π morzmus az ababa konjugáltat használja (az eredeti szó két bet vel való cirkuláris eltolása), amelyik palindrom. Ebben az esetben a π morzmus értelmezése: π(a) = ababa, π(b) = aba. Például, ha n = 14, a következ ket kapjuk: π 2 (a) = ababa aba ababa aba ababa, és akkor α = aabaababaabaa, π 2 (b) = ababa aba ababa, és β = ababaabaababa, π 3 (aa) = ababaabaababaabaababaababaabaababaabaababa, és γ = baababaababaab.

104 Szavak bonyolultsága A páratlan hosszúságú palindromok: aabaababaabaa, ababaabaababa, abaababaaba, babaabaabab, baababaab, abaabaaba, aababaa, baabaab, ababa, aabaa, bab, aba, a, b, A páros hosszúságú palindromok: baababaababaab, aababaababaa, ababaababa, babaabab, abaaba, baab, aa. Feladatok 35-1 Generátorfüggvény 1 Jelölje b n,d az olyan n hosszúságú 0-ból és 1-b l álló szavak számát, amelyeknek els és utolsó pozíciója 1, és egymás mellett legfeljebb (d 1) 0 van. Bizonyítsuk be, hogy a b n,d számok generátorfüggvénye B d (z) = n 0 b n,d z n = z(1 z) 1 2z + z d+1. (Útmutatás: lásd a oldalt.) 35-2 Generátorfüggvény 2 Bizonyítsuk be, hogy az N(n, d) számok (a n hosszúságú szivárvány szó összes (1, d)-részszóinak a száma) generátorfüggvénye N d (z) = n 0 N(n, d)z n = (Útmutatás: lásd a oldalt) 35-3 Ablakbonyolultság Számítsuk ki a Fibonacci-szó ablakbonyolultságát. z (1 z)(1 2z + z d+1 ) Megjegyzések a fejezethez Jegyzetek a fejezethez A szókombinatorika alapfogalmai és legfontosabb eredményei megtalálhatók a Lothaire-könyvekben [71, 72, 73] és a Foggkönyvben [42]. Lothaire és Fogg is egy-egy szerz csoport gy jt neve. Choffrut és Karhumäki [23] szerepel egy formális nyelvekr l szóló könyvben egy szókombinatorika fejezettel. A különböz bonyolultságok megtalálhatók a következ dolgozatokban:

105 35. fejezet megjegyzései 1689 teljes bonyolultság: Iványi [56]; maximális és globális teljes bonyolultság: Anisiu, Blázsik, Kása [4]; (1, d)-bonyolultság: Iványi [56] (d-bonyolultság néven) és Kása [61]); (d, n 1)-bonyolultság (szuper-d-bonyolultság néven) Kása [63]; gyérbonyolultság Kása [62, 64]; faktorizálási bonyolultság Ilie [55]; ablakbonyolultság Cassaigne, Kaboré, Tapsoba [5, 22] és hasábbonyolultság [58]. A hatványszóval, az alsó/fels maximális/teljes bonyolultsággal Ferenczi és Kása [40] foglalkozik. Ugyanebben a dolgozatban a szerz k megadják a Sturm-típusú szavak egy jellemzését a fels maximális és a fels teljes bonyolultság segítségével ( tétel). A véges szavak maximális bonyolultságával Anisiu, Blázsik és Kása [7] foglalkozott. Kása [61] sejtésként megfogalmazta a tételt, amelyet aztán Levé és Séébold [68] bizonyítottak. A bonyolultság különböz általánosításának vizsgálatával Iványi [56], Iványi és Kása [58], valamint Kása [61, 62, 63] foglalkoztak. A palindrombonyolultság eredményei véges szavakra M-C. Anisiu, V. Anisiu, Kása [6], végtelen szavakra pedig Droubay, Pirillo [32] cikkeib l valók. A Sturm-típusú szavak palindromjai el állítására szolgáló algoritmus szintén ebb l a cikkb l van. A szóbonyolultság különféle alkalmazási megtalálhatók Elzinga [34, 35] és Troyanskaya et al. [117] cikkeiben. Az érdekl d olvasó haszonnal forgathatja az egyéb, szóbonyolultsággal [8, 21, 39, 27, 104] és a palindromokkal [1, 9, 17, 19, 20, 26] foglalkozó dolgozatokat is.

106 Tökéletes 36. Tökéletes tömbök

107

108 VIII. PÁRHUZAMOS MÓDSZEREK Ebben a részben Szirmay-Kalos László és Szécsi László Általános párhuzamos algoritmusok a grakus hardverhez, valamint Imre Sándor, Galambos Máté és Bacsárdi László Quantumalapú algoritmusok cím fejezete van.

109 37. GPGPU: Számítások grakus processzorokon A GPGPU angol bet szó a General-Purpose computing on Graphics Processing Units kifejezést takarja, vagyis általános célú számítások grakus feldolgozóegységeken történ elvégzését jelenti. A grakus processzorok (GPUk) er sen párhuzamos, többszálú, sokmagos feldolgozóegységek, amelyek számítási teljesítménye sokkal nagyobb mint a hagyományos CPU-ké. Valaha ezeket az egységeket kizárólag a megjelenítés és a graka céljaira tervezték, és csak a grakus API-k segítségével voltak programozhatók. Mára azonban a GPU-k általános célú párhuzamos processzorokká váltak, amelyeket bármely programozó számára elérhet felületeken keresztül és ismert nyelveken például C-ben lehet programozni. Gyakran egy alkalmazás GPU-ra történ átültetésével nagyságrendi gyorsulást lehet elérni még az optimalizált CPU implementációhoz képest is. Ez a különbség a GPU-k hatalmas lebeg pontos m veletvégz teljesítményének, illetve az elérhet nagy memória-sávszélességnek köszönhet. Ezek a kedvez tulajdonságok abból erednek, hogy a GPU-t m veletintenzív, er sen párhuzamos számításokra tervezték, hiszen a grakus megjelenítéshez pontosan erre van szükség. Így több tranzisztort szenteltek az adatfeldolgozásnak a gyorsítótárak (cache) és a programvezérlés (ow control) rovására. Fejleszt i szempontból ez azt jelenti, hogy a hardver késleltetéseket nincs ami elrejtse, így ezekkel közvetlenül kell számolni. Így hatékony GPU program írása nem képzelhet el az architektúra ismerete nélkül. Azért is van értelme a GPGPU-ról, mint az informatika önálló területér l beszélni, mert bár a GPU tekinthet párhuzamos rendszernek, architektúrája mégsem tiszta megvalósítása a párhuzamos számítási modelleknek (A könyv külön fejezete foglalkozik a párhuzamos számításokkal). Ehelyett számos modell tulajdonságait ötvözi: cs vezetéknek (pipeline), vektor-, illetve tömbprocesszornak (kisingle-instruction Multiple-Data, azaz SIMD gépnek) adatfolyamfeldolgozó processzornak, osztott memórián keresztül kommunikáló többprocesszoros rendszernek egyaránt használható, amelyben speciális rögzített funkciójú hardverelemek is jelen vannak. Így, ha erre a különleges architektúrára tervezünk algoritmust, azt számos különböz modellhez köt d fogalom és módszer felhasználásával alkothatjuk meg. A grakus kártya a programozható feldolgozóegységek mellett többféle memóriát és gyorsítótárat tartalmaz, valamint bizonyos grakai feladatok vég-

110 GPGPU: Számítások grakus processzorokon rehajtására képes rögzített funkciójú egységeket is. A grakus kártyát befogadó (host) számítógép központi processzorán (CPU) futó program a harver m ködését annak alkalmazásprogramozói felületén (API) keresztül vezérli. A központi processzor programokat tölt fel a GPU egységekre illetve adatokkal látja el ket. Ezeket a programokat számos nyelven meg lehet írni és a forrásnyelvr l gépi kódra fordítani. A Cg [88] és a HLSL [81] nyelveket kifejezetten grakára tervezték, de általános programozási nyelvekhez is léteznek a GPU programozáshoz kiterjesztések (például a CUDA C). A programozói környezet egyúttal meghatározza a programozási modellt, vagy másképpen a virtuális párhuzamos architektúrát, ami a programozható és a rögzített funkciójú elemeket, valamint azok kapcsolatait képezi le. Érdekes módon a különböz programozási modellek jelent sen eltér virtuális párhuzamos architektúrákat láttatnak (37.1. ábra). A grakus API-k a GPU-t mint egy cs vezetéket jelenítik meg, amelynek az elemei folyamprocesszorként dolgozzák fel az adatokat, mivel ez illeszkedik legtermészetesebben a legtöbb grakai feladathoz. A CUDA [89] és az OpenCL [65] viszont azon az értelmezésen alapul, hogy a GPU multiprocesszorok halmaza, ahol minden multiprocesszor egy skaláregységekb l álló, széles SIMD feldolgozóegység, ami ugyanazt a m veletet egyszerre több adaton hajtja végre. Ma a multiprocesszorok száma egy rendszerben akár néhány száz is lehet, míg egyetlen multiprocesszor általában 8 vagy 16, az utasításdekóderen osztozó skaláregységet tartalmaz. A skalárprocesszorok teljes száma a multiprocesszorok számának és a SIMD skalárprocesszorok multiprocesszoronkénti számának szorzata, így könnyedén lehet ezernél is több. Ez a sok processzor mind ugyanazt a programot hajtja végre, de különböz adatokon. A program egy végrehajtását szálnak (thread) nevezzük. Egy multiprocesszor egy szálblokkot (thread block) futtat, vagyis az azonos multiprocesszoron futó szálak halmaza a blokk. Minden processzor rendelkezik valamennyi gyors, lokális memóriával, amely csupán a multiprocesszoron futó, tehát azonos blokkban lév szálak számára elérhet. A globális memória sebessége a lokális memóriáénál sokkal alacsonyabb. A CPU vezérl program a globális memóriába töltheti fel és innen töltheti le a bemen és kimen adatokat. Ezt a memóriát a multiprocesszorok többféle gyorsítótárazási és szinkronizációs stratégia igénybevételével is elérhetik. A CPU-val összevetve jóval kevesebb a gyorsítótárakra szánt tranzisztormennyiség, ezért összességében a gyorsítótár teljesítménye a CPU-étól elmarad. A programozó kreativitásán múlik, hogy a memóriaarchitektúrát milyen hatékonyan használja. A fenti architektúra kompakt adatokat feldolgozó, rövid, koherens számítások párhuzamos végrehajtását szolgálja legjobban. Így algoritmu-

111 37. GPGPU: Számítások grakus processzorokon 1695 Grakus API programozási modell CUDA programozási modell ábra. GPU programozási modellek: grakus árnyalók és az általános célú CUDA. A grakus árnyalókat a Shader Model 4 szabványnak megfelel en ábrázoltuk, amelyben a programozható egységek piros színnel, a rögzített funkciójúak pedig zölddel jelennek meg. saink GPU-ra adaptálásának f kihívása az, hogy ezeket sokezer szálra párhuzamosítsuk, illetve független és lehet leg rövid számítási lépésekre bontsuk. Az ilyen számítási lépeseket megvalósító, GPU-n futó programokat gyakran kernelnek vagy árnyalónak nevezik. A kernel név a párhuzamos adatfeldolgozási vetületre utal, míg az árnyaló név egy alapvet grakai feladat öröksége, amely a tárgyak felületére érkez fény visszaver dését szimulálja, vagyis az árnyal (shading). Bár a GPU-programozási nyelvek és vezérlésre használható API-k képességeikben és nyelvi elemeikben is egyre hasonlóbbak lettek, még mindig különválnak a grakai és az általános célú megoldások. A két megközelítés két különböz programozói szemléletet takar. A grakus API-k a korábban nagyon er sen korlátozott, de tisztán párhuzamos árnyalóprogramokból igyekeznek rugalmas számítóeszközöket faragni. A GPGPU keretrendszerek az általános programnyelvekhez tesznek hozzá a hagyományos kód párhuzamos futtatását lehet vé tev elemeket. A grakus megközelítés t nhetne túlhaladottnak, vagy mondhatnánk, hogy csak a grakához közeli területeken indokolt, de valójában a lényegének nincs köze a grakához. A lényeg ugyanis az a benne foglalt ismeret, hogy hogyan is m ködnek az olyan hatékony párhuzamos algoritmusok, mint amilyen az inkrementális képalko-

112 GPGPU: Számítások grakus processzorokon ábra. Az inkrementális képalkotás folyamata. tási cs vezeték. Ezért tárgyaljuk el ször ezt a cs vezetéket és bemutatjuk, hogy a graka programozó szemével milyennek is látjuk a GPU-t. Ezzel nemcsak az egyes alkatrészek célját és m ködését tisztázzuk, hanem egyúttal egy érvényes, kipróbált és általános célra is használható GPU programozási megközelítést is adunk. Ezután térünk át a GPGPU megközelítésre, a magasabb absztrakciós szint kedvéért elhagyva minden grakával kapcsolatos fogalmat és lemondva a graka feladataihoz rendelt kötött m ködés hardverelemekr l A grakus cs vezeték modellje A grakus cs vezeték modellje a GPU hardvert azon az absztrakción keresztül szemléli, hogy az egy inkrementális képalkotást [113] (lásd a Számítógépes graka cím fejezetet az els kötetben) végrehajtó eszköz. Az inkrementális képalkotás célja, hogy lefényképezzen egy virtuális világot. Ehhez a világot leíró numerikus modellt lineáris primitívekké (pontokká, vonalakká, háromszögekké) alakítja és ezeket egy diszkrét kép képpontjaira bontja, más szóval raszterizálja. A folyamat számos algoritmikus lépésb l áll, ezek csoportjai alkotják a cs vezeték szakaszait (pipeline stages). Néhány szakaszt dedikált hardverkomponensek valósítanak meg, míg másokat a GPU-n futó programok. A részletek mell zésével, tekintsük át a képalkotás folyamatát (37.2. ábra):

113 37.1. A grakus cs vezeték modellje 1697 A virtuális világ modellpéldányok gy jteménye. A modelleket háromszöghálókkal közelítjük. Ez a folyamat a tesszelláció. Az árnyalás végrehajtásához az objektumokat abba a térbe kell transzformálnunk, amelyben a kamera és a fényforrások is adottak. Ez lehet a világtér vagy a kameratér. A háromszögek csúcspontjait a kamerabeállításoknak megfelel en a képerny re vetítjük. Azt, hogy a csúcspont hol látszik a képerny n, a kamera transzformáció, a perspektív transzformáció és végül a nézetablak transzformáció végrehajtásával számítjuk ki. Kameratérben a kamera az origóban van és a z tengely irányába néz. A szempozícióból induló, a képerny nek megfeleltetett ablak pontjain áthaladó sugarak egy perspektív köteget alkotnak. A perspektív transzformáció szerepe, hogy ezt a perspektív köteget párhuzamos sugárköteggé alakítsa és ezzel a következ lépésben szükséges perspektív vetítést párhuzamos vetítésre cserélje. A perspektív transzformáció után a csúcspontok normalizált eszköz-koordinátákban állnak el. Ebben a térben a látható térfogatot a 1 x 1, 1 y 1, 1 z 1 egyenl tlenségekkel meghatározott téglatest adja meg. A geometriai primitíveknek ezen a térfogaton kívül es részeit a vágás m velete távolítja el. A normalizált eszköz-koordinátákat tovább transzformáljuk a képtérbe, a célkép felbontását és elhelyezkedését is gyelembe véve. Az x = 1, y = 1 normalizált eszköz-koordinátájú pontot a nézeti ablak bal alsó sarkának képerny n elfoglalt helyére képezzük, az x = 1, y = 1 pontot pedig a jobb fels ére. Eközben a z koordinátát a 1 z 1 tartományból a [0, 1] tartományba konvertáljuk. A képtérben minden vetített háromszöget képpontok (pixelek) egy halmazára bontunk. Egy bels pont kitöltésekor annak tulajdonságait köztük a z koordinátát, vagyis a mélységet a csúcspontok adataiból inkrementális lineáris interpolációval számoljuk. Minden képpont árnyalási színe ezekb l az interpolált adatokból számolható, például a csúcspontokban számolt színek interpolált változata lehet a pixelszín. Emellett vagy ehelyett textúrának nevezett képeket is tapétázhatunk a háromszöghálókra. A textúraképek színrekordok kétdimenziós tömbjei, egy elemüket texelnek hívjuk. Azt, hogy a textúrát mi módon képezzük a háromszögek felületére, a csúcspontokhoz rendelt textúrakoordinátákkal adhatjuk meg. Végül a képpont színeket a képerny n megjelenített rasztertár (frame buer) írjuk. A rasztertár mellett egy mélységbuerre (depth buer, z-buer, depth-stencil texture) is szükség van. Ez tárolja a mélységinformációt, vagyis azon felületi pontok z koordinátáit, amelyek színét

114 GPGPU: Számítások grakus processzorokon a rasztertár pixelei tárolják. Amikor újabb háromszöget raszterizálunk egy pixelre, a szín- és mélységinformációt csak akkor írjuk felül, ha az új mélység a mélységbuerben tároltnál kisebb, vagyis az új háromszög ebben a képpontban közelebb van a néz ponthoz. Ennek eredményeképpen egymást helyesen takaró háromszögek 3D képét kapjuk. A mélységbuer-algoritmus egyben példa arra az általánosabb m - veletre, amikor a képpontban tárolt adatot valamilyen új adat és a korábban a képpontban tárolt adat függvényeként határozzuk meg. Az ilyen m veletek neve kompozitálás (merging) A GPU mint az inkrementális képalkotás megvalósítása A grakus API által elénk tárt GPU architektúra a képalkotási cs vezeték közvetlen megvalósítása (37.1. ábra, bal oldal). Ezt a cs vezetéket a CPU a grakus API hívásain keresztül kongurálhajta, majd m ködését egy rajzoláshívás (draw call) révén indíthatja el. Az egymás utáni rajzoláshívások sorozatát, amelyek során a konguráció nem, csupán a bemenetek változnak, menetnek (pass) hívják. Egy rajzoláshívás csúcspontok sorozatát dolgozza fel. A csúcspontokhoz tartozó adatokat a csúcspontbuer (vertex buer) tárolja. A csúcspontok megadása modellezési térben, homogén koordinátákkal történik. Az (x, y, z) Descartes-koordinátájú pont az [xw, yw, zw, w] négyelem homogén koordinátavektorral is megadható, ahol w egy tetsz leges nemzérus skalár lehet (részletesebb magyarázatért lásd a számítógépes grakáról szóló fejezetet). Ennek a reprezentációnak a neve onnan származik, hogy a számnégyes minden elemének ugyanazzal a skalárral való szorzása nem módosítja a kijelölt háromdimenziós pontot. Az [X, Y, Z, w] homogén számnégyesb l ugyanennek a pontnak a Descartes-koordinátáit a homogén osztás segítségével kaphatjuk meg: (X/w, Y/w, Z/w). A homogén koordinátáknak számos el nyös tulajdonsága van a Descartes-koordinátákhoz képest. Homogén koordinátákkal még a párhuzamosok metszéspontja is kifejezhet (egy ideális pont), vagyis az euklideszi geometria párhuzamosok okozta szingularitása kiküszöbölhet. A homogén lineáris transzformációk közé tartozik a perspektív vetítés, aminek nagyon fontos szerepe van a képalkotásban, de Descartes-koordinátákban nem lenne lineáris transzformáció. Ami igazán fontos, hogy az egyeneseket egyenesekbe, síkokat síkokba, háromszögeket háromszögekbe leképez transzformációk halmaza megegyezik a homogén koordinátákon végzett lineáris m veletek halmazával. A csúcspontbuer beállítása után a koordinátáikkal és más attribútumaikkal például textúrakoordinátákkal vagy saját színnel leírt csúcspon-

115 37.1. A grakus cs vezeték modellje 1699 tok megkezdik útjukat a grakus cs vezetékben, a programozható árnyalóprocesszorok és a rögzített funkciójú elemek révén megvalósított feldolgozószakaszokon keresztül. Ezen szakaszokat egyesével ismertetjük. Tesszelláció Ha a csúcspontjaink nem közvetlenül a végs háromszöghálót adják meg, hanem csupán egy parametrikus felület vezérl pontjai, vagy a háromszögháló durvább verziójának csúcsai, akkor az els lépés a végs háromszögháló el állítása, vagyis a. Mivel ennek a szakasznak a programozhatósága korlátozott és a GPGPU alkalmazhatósága nem különösebben jelent s, nem tárgyaljuk tovább, inkább feltételezzük, hogy a csúcspontbuer a tesszellációt nem igényl háromszögháló csúcsait tartalmazza. A csúcspontárnyaló Az objektumokat a vágás el tt normalizált eszköz-koordinátákba kell transzformálni, ezt pedig egy homogén lineáris transzformációval érhetjük el. Ezen felül a GPU feladata lehet a megvilágítás számítása a háromszögháló csúcspontjaiban. Ezeket a m veleteket a csúcspont-árnyaló hajtja végre. Általánosabban tekintve, a csúcspont-árnyaló egység egyszerre egy csúcspont adatait kapja meg, módosíthatja ket új pozíció-, szín- és textúrakoordinátaértékek kiszámításával, és így egy megváltoztatott csúcspontot ad ki. A csúcspontok feldolgozása egymástól függetlenül, párhuzamosan történik. A geometria-árnyaló A geometria-árnyaló a csúcspontrekordok mellett a primitívekr l is kap információt: például mely csúcsok alkotnak egy háromszöget a háromszöghálóban. Az árnyaló továbbíthatja a primitíveket, de új csúcspontokat, új primitíveket is létrehozhat. Lehet ség van arra, hogy ezeket egy kimen buerbe írjuk, amit kés bbi menetek bemenetként használhatnak. A geometria-árnyaló tipikus felhasználási területe a procedurális modellezés, amely szabályok alapján összetett modellek alkot egyetlen pontból vagy háromszögb l kiindulva [75]. A csúcspont-árnyalók kis, specializált egységekb l általános adatfolyamfeldolgozó processzorokká fejl dtek, mialatt megtartották az egy bemenet egy kimenet sémát. A geometria-árnyaló azonban a csúcspont-árnyaló kimen rekordjain (a feldolgozott csúcspontokon) dolgozik és változó (de korlátos) mennyiség hasonló rekordot ad ki. Vágás A során a hardver a primitíveknek csak a normalizált eszköz-koordinátákban ( 1, 1, 1) és (1, 1, 1) átellenes csúcsokkal jellemezhet, koordinátasíkokkal párhuzamos oldalú kockán belüli részét tartja meg. Egy pont akkor esik ezen

116 GPGPU: Számítások grakus processzorokon belülre, ha homogén koordinátái kielégítik a következ egyenl tlenségeket: w x w, w y w, w z w. A harmadik egyenl tlenség speciálisan az OpenGL konvencióihoz igazodik. Akkor érvényes pl. a Cg nyelvben, ha OpenGL csúcspontárnyaló-prolra illeszked gépi kódot fordítunk bel le. Az utolsó egyenl tlenségpár lehetne 0 z w is, ahogy a Direct3D feltételezi. Ez érvényes Cg-ben Direct3D pro- lok esetén, illetve a HLSL szabványban. A különbséget a fordítóprogramok elrejtik, mivel a csúcspontárnyaló kimenetét (a használt konvenció, vagyis a prol ismeretében) olyanra alakítják, amilyent a vágást végz hardver vár. A vágást a GPU rögzített funkciójú hardvere hajtja végre, így m ködését nem lehet megváltoztatni. Azok a primitívek folytathatják útjukat a cs vezeték további szakaszai felé, amelyek a vágási feltételeket teljesítik. Párhuzamos programozási szemszögb l a vágó hardver egy adatfolyamsz r. Ha el szeretnénk hagyni egy, a csúcspont- vagy geometria-árnyaló által feldolgozott adatelemet, a csúcspontok pozícióját úgy kell beállítanunk, hogy azok a vágási kockán kívül essenek. Így a vágó hardver törli az elemet a cs vezetékb l. A vágás után a m velete következik, vagyis a homogén koordinátákat Descartes-koordinátákká alakítjuk úgy, hogy az els három homogén koordinátát a negyedikkel elosztjuk. A csúcspontokat ezután képtérbe transzformáljuk, ahol az els két koordináta azt mondja meg, melyik képpontra esik a csúcspont. Raszterizáció lineáris interpolációval A cs vezeték szíve a nem-programozható raszterizáló szakasz. Ez képes a lineáris primitíveket (háromszögeket, szakaszokat, pontokat) a képerny képpontjaira illeszked diszkrét pixelekké alakítani. Egyszer bben fogalmazva, háromszögeket képes rajzolni a csúcspontok képtérbeli koordinátái alapján. A cs vezeték raszterizáló el tti szakaszai ezeket a csúcspont-koordinátákat számolják ki, a kés bbi szakaszok feladata pedig a képpont színek megállapítása lesz. Bár így a raszterizáció kapcsán a cs vezeték minden szakaszának meg lehet fogalmazni az alapfeladatát, a GPGPU alkalmazások nem feltétlenül igénylik háromszögek rajzolását. A raszterizálót mégis lehet párhuzamos programozási szempontból is értelmezni, mégpedig adatfolyamsokszorozóként (stream expander), hiszen minden primitív számítás nyomán független pixelszámítások sokaságát indítja el. Ehhez csak a háromszögeket kell ügyesen megkonstruálni. A raszterizáció képtérben dolgozik, ahol a csúcspontok x, y koordinátái azon egész képpont-koordináták, ahova a képen a csúcsok vetülnek. A csúcspontokhoz további jellemz k is tartozhatnak, mint például a képtérbeli z

117 37.2. GPGPU a grakus cs vezeték modelljének felhasználásával 1701 koordináta, textúrakoordináták vagy színek. Egy háromszög raszterizációjakor mindazokat a képpontokat azonosítjuk, amelyek a háromszög vetített képén belülre esnek. Az egyes képpontok tulajdonságait lineáris interpolációval határozzuk meg. A pixelárnyaló A csúcspontokhoz rendelt értékekb l interpolációval állnak el a képpontok tulajdonságértékei, és ezek alapján kell meghatározni a pixel színét, illetve módosítható a hozzá tartozó mélységérték is. A szín meghatározásának klasszikus módja az, hogy az interpolált textúrakoordináta alapján kiolvassuk a textúramemóriát, a kapott eredményt pedig az interpolált színnel moduláljuk. Általában egy pixelárnyaló program a pixelhez tartozó interpolált értékeket kapja bementként, és kimenetként egy színt, illetve opcionálisan egy mélységet adhat ki. A csúcspontárnyalóhoz hasonlóan a pixelárnyaló is egy bemeneti rekordhoz egy kimeneti rekord' típusú processzor. A pixelárnyaló a célképponthoz van kötve, a kimenetét sehova máshova nem tudja átirányítani. Kompozitálás A kiszámított képpontszínek nem közvetlenül kerülnek a képmemóriába, hanem a kompozitáló egység (output merger) felel s az új értékek és a korábbi tartalom összeolvasztásáért. El ször a mélységbuer alapján a mélységtesztet hajtjuk végre. Megjegyzend, hogy amennyiben a pixelárnyaló a z értéket nem módosítja, ez a m velet el rehozható a pixelárnyalás elé. Ez a korai z-teszt jobb teljesítményhez vezethet a felesleges pixelfeldolgozások elhagyása miatt. Végül a kompozitáló kombinálja például lineárisan, vagy minimumot, maximumot képezve a kiszámított képpont színt a már meglev pixel színnel, és az eredménnyel felülírja a rasztertárban tárolt színt. Ez a keverés (blending), amivel például átlátszó felületek megjelenítése lehetséges (37.3. ábra). GPGPU céljaira a keverés f leg akkor hasznos, ha egymást követ számítások eredményeinek összegét, minimumát vagy maximumát keressük GPGPU a grakus cs vezeték modelljének felhasználásával Az általános célú programozásban olyan fogalmakat szoktunk meg, mint például a bemen és kimen adat, valamint az ideiglenes és a kimen adatokat el állító, paraméterezhet függvények. Ha a GPU-t a grakus API-n keresztül

118 GPGPU: Számítások grakus processzorokon ábra. Kever egység, amely az új pixelszínt a számított és a korábban tárolt színek kombinálásával állítja el. szeretnénk használni, akkor a programozói fogalmainkat meg kell feleltetni az inkrementális képalkotás fogalmainak, köztük a geometriai primitíveknek, csúcspont, geometria és képpont feldolgozásnak, raszterizációnak, textúrázásnak, kompozitálásnak és a kimeneti képnek. Számos különböz lehet ség van arra, hogy ezt a megfeleltetést megtegyük, melyek el nyei és hátrányai a konkrét algoritmustól függenek. Itt néhány olyan általános megközelítést tárgyalunk, amelyek sikeresnek bizonyultak teljesítményigényes számítási alkalmazásokban. El ször megvizsgáljuk, hogy miként rokoníthatók a programozási fogalmaink a GPU elemeihez A kimenet A GPU-k képeket rajzolnak, vagyis kétdimenziós képponttömböket állítanak el. A rajzolási cél (render target) lehet a felhasználó felé megjelenített rasztertár, de lehet egy kimeneti textúra is (amely esetben a képpont (pixel) helyett textúraelemr l, texelr l szokás beszélni). A GPGPU esetében a kimenet jellemz en egy textúra, amelyben a xpontos számábrázolású rasztertárral szemben lebeg pontos értékek is tárolhatóak. Ennél is fontosabb, hogy a textúrák a kés bbi számítási lépésekben bemenetként használhatóak, vagyis a korábbi kétdimenziós kimenti textúra akár kétdimenziós bemeneti textúraként, vagy többet összefogva háromdimenziós bementi textúraként is szerepelhet. Korábbi GPU-knál minden képponthoz legfeljebb öt lebeg pontos számot tudtunk tárolni, mivel a színt a vörös, zöld, kék és átlátszatlanság értékek írták le, a mélységbuerben pedig egy skalár mélységérték, a z képtérbeli

119 37.2. GPGPU a grakus cs vezeték modelljének felhasználásával 1703 koordináta szerepelhetett. Kés bb a több rajzolási cél (multiple render targets) megjelenésével a képponthoz több, jellemz en négy textúrában is tartozhatott érték, amivel a legnagyobb kimeneti rekord már tizenhét lebeg pontos számot tudott tárgyalni. A Shader Model 5.0-ös GPU-k esetében ez a korlátozás is megkerülhet, a képpontokhoz akár változó hosszúságú adatlistákat is ki tudunk írni. A geometriai elemek határozzák meg, hogy mely képpontokat veszi célba a rajzolási folyamat. Minden primitívet a képtérbe transzformálunk és a vetített képét raszterizáljuk, tehát azok lesznek a kimeneti képpontok, amelyek a vetületen belülre esnek. Ha több primitívet is átküldünk a cs vezetéken, azok vetületei átlapolódhatnak, így egy képpontra több számítást is végzünk. A kompozitáló kombinálja ezeket az eredményeket, például csak a legkisebb képtérbeli mélység t tartja meg a mélységteszt révén, vagy összegzi a részeredményeket a keverés segítségével. A rajzolási célként kijelölt memóriát csak a pixelárnyaló írhatja a kompozitálási m veleten keresztül, miközben közvetlenül egyetlen árnyalóprocesszor sem olvashatja. Mivel különböz pixelárnyaló szálak különböz helyekre írnak a rajzolási célban, szinkronizációs probléma nem merülhet fel A bemenet A képszintézis bemenetei a geometriát leíró adatfolyam és a felületek színét kódoló textúrák. Mivel a háromszöghálónak általában nincs konkrét szerepe GPGPU alkalmazásokban, a geometriát leíró adatokat csupán vezérl mechanizmusként használjuk arra, hogy elosszuk a számítási terhelést az árnyalóprocesszorok között. A valódi GPGPU bemenet a textúrákban tárolt adat lesz. A textúra texelek egy-, két- vagy háromdimenziós tömbje, ahol egy texel egy, kett vagy négy skalár értéket tárol a vörös, zöld, kék és átlátszatlanság csatornákban. A számértékek különböz formátumúak lehetnek, például el jel nélküli bájt vagy 32 bites lebeg pontos szám. GPGPU szempontból többnyire a 32 bites lebeg pontos ábrázolás a legmegfelel bb. Az egydimenziós lebeg pontos textúra hasonló a lineáris CPU memóriához, ahol a szokásos adatszerkezeteket, tömböket, listákat, fákat ugyanúgy lehet tárolni. A kétfajta memória hasonlósága azonban két ponton megtörik. Az egyik tekintetben a textúra gyengébb, a másik tekintetben viszont er sebb, mint a lineáris CPU memória. Nyilvánvaló korlátozás az, hogy a textúra párhuzamosan bár, de csak olvasható minden programozható árnyaló számára, kivéve a rajzolási céltextúrát, ami viszont csak a kompozitáló egység számára írható. A CPU memóriában megszokott olvasás-módosítás-írás ciklust árnyalóprogramban nem használhatjuk. A GPU-tervez knek jó oka volt rá, hogy ne

120 GPGPU: Számítások grakus processzorokon tegyék lehet vé az olvasás-módosítás-írási ciklusokat, és hogy a textúrákat párhuzamosan olvasható, illetve kizárólagosan írható szerepekbe korlátozzák, hiszen így az írást soha nem kell gyorsítótárazni és az olvasási gyorsítótárak soha nem válnak érvénytelenné. Másrészr l viszont a textúramemória sokkal több címzési módot támogat, mint a lineáris memória, és ami még fontosabb, textúrasz r hardveregységeken keresztül is olvasható. A sz r kkel a textúra nemcsak elemek egy tömbje lehet, de egy-, két-, vagy háromdimenziós térbeli függvény végeselemes reprezentációja is (a alfejezet fogja a végeselemes reprezentáció és textúrák közötti kapcsolatot b vebben tárgyalni). Egydimenziós textúrákhoz lineáris sz rés alkalmazása azt jelenti, hogy ha az u textúra koordináta az U és U + 1 texelkoordináták közé mutat, akkor a hardver automatikusan lineárisan interpolál a két texel értéke között. Legyenek a texelek értékei T (U) és T (U + 1). Az u helyen visszaadott sz rt érték ekkor T (u) = (1 u )T (U) + u T (U + 1), ahol u = u U. A kétdimenziós textúrákon bilineáris sz rést használhatunk, az interpolált (u, v) textúrakoordináta-párhoz legközelebb es négy texelérték között. Legyenek ezek T (U, V ), T (U +1, V ), T (U +1, V +1) és T (U, V +1). Az (u, v)-re visszaadott sz rt érték ekkor T (u, v) = T (U, V )u v + T (U + 1, V )(1 u )v + T (U + 1, V + 1)(1 u )(1 v ) + T (U, V + 1)u (1 v ), ahol u = u U és v = v V. Háromdimenziós textúrákra alkalmazható trilineáris sz rés hasonlóképpen m ködik Függvények és paramétereik Ahogy a primitívek végighaladnak a cs vezetéken, árnyalóprocesszorok és rögzített funkciójú elemek dolgozzák fel ket, hogy végül meghatározzák az egyes képpontokhoz tartozó értékeket. Az árnyalóprocesszorok programjai nem változnak egy rajzolási menetben, így azt mondhatjuk, hogy minden egyes képpontot ugyanaz a program számít ki. A képpontok színeinek különböz sége az adatok különböz ségén múlik. Így a GPU olyan hardver, ami rekordok egy tömbjét számolja ki. A GPU-n az adatok egy sor programozható vagy x algoritmust végrehajtó processzoron haladnak keresztül amíg a kimeneti képpontok el nem állnak. Ez azt jelenti, hogy a GPU-t lehet adatfolyamfeldolgozónak (stream

121 37.3. A GPU mint vektorprocesszor 1705 processzor) is tekinteni. A primitíveket meghatározó csúcsok virtuális adatfolyamot alkotnak, amit els ként a csúcspontárnyaló dolgoz fel. Az adatfolyam feldolgozás fogalomkészletét használva azt mondhatjuk, hogy a csúcspontárnyaló egy leképezés, mivel egy-egy csúcs adataira alkalmaz valamiféle függvényt és minden bemenetre egy módosított csúcspontadatot ad ki. Így a bemeneti és kimeneti adatfrekvencia azonos. A geometria-árnyaló megváltoztathatja a primitív típusát és a csúcspontok számát. Az adatfrekvencia csökkenhet, ekkor a m velet neve redukció vagy adatfolyamsz rés. Az adatfrekvencia növekedhet is, amikor adatfolyamsokszorozásról beszélünk. A vágás megtarthat vagy eldobhat primitíveket, de ha azok részben lógnak be a vágási térfogatba, akkor meg is változtathatja ket. Ha ez utóbbi esett l eltekintünk, a vágás tekinthet adatfolyamsz résnek. Ha a csúcsok koordinátáit a csúcspontárnyalóban úgy állítjuk be, hogy a vágási térfogaton kívülre essenek, ki tudjuk zárni a primitívet a további feldolgozási lépésekb l. A raszterizálás a primitívet pixelekké bontja, így adatsokszorozóként m ködik. A pixelárnyaló a csúcspontárnyalóhoz hasonlóan ugyancsak leképezés. Végül a kompozitálás m ködhet kiválasztásként, például a mélységkoordináta alapján, vagy akár összegzésként is, ha a keverést használjuk. Az árnyalóprocesszorok a bemen adataikat regisztereken keresztül kapják meg, amelyeket az el z szakasz egységei töltenek fel. Az ilyen bemenetek neve változó bemenet (varying input). Ezek mellett a CPU programból is beállíthatunk globális paramétereket. Ezeket egységes bemenetnek (uniform input) hívják, mivel az adatfolyam minden elemére azonosak és a cs vezeték m ködése közben nem, csupán a rajzolási menetek között változtathatók A GPU mint vektorprocesszor Azt a párhuzamos gépet, amely a kimeneti értékeket ugyanazzal az algoritmussal, de egymástól függetlenül és köztes eredmények megosztása nélkül számítja, vektorprocesszornak vagy tömbprocesszornak nevezzük. Mivel a GPU hardverben a pixelárnyaló kapcsolható a kimeneti adatelemekhez, ezt az árnyalót használjuk a kimenet el állítására. Természetesen egy adott processzoron futó programnak tudnia kell, hogy melyik adatelemet számítja, alapvet en ebb l adódik a számítás adatfügg sége (nem lenne értelme a párhuzamosításnak, ha ugyanazt számolnánk ki egyszerre több példányban). A pixelárnyaló számára az adatelem indexe nem más, mint a képpontot kijelöl koordináta pár. A legegyszer bb, de a gyakorlat számára a legfontosabb esetben a rajzolási cél minden képpontjára szeretnénk egy menetben eredményt kapni.

122 GPGPU: Számítások grakus processzorokon ábra. A GPU mint vektorprocesszor. Tehát olyan geometriai primitívet kell választanunk, ami a kép összes képpontjára leképz dik, de mindegyikre csak egyszeresen, hogy elkerülhessük egy kimeneti adat többszöri felesleges kiszámítását. Ilyen geometriai primitív maga a nézeti ablak. Képtérben ez nem más, mint a nézetablak (viewport), vágási térben (normalizált eszköz-koordinátákban) pedig a [ 1, 1, 0, 1], [1, 1, 0, 1], [1, 1, 0, 1], [ 1, 1, 0, 1] homogén koordinátás csúcsokkal rendelkez, x, y síkon elhelyezked négyzet. Ezt a két háromszögprimitívb l összeállítható téglalapot hívják teljes képerny s téglalapnak vagy teljes nézeti téglalapnak (full-screen quad, full-viewport quad) (37.4. ábra). Tegyük fel, hogy szeretnénk kiszámítani az N elem y kimeneti tömböt az M elem x bemeneti tömbb l, a p globális paraméter mellett az F függvény segítségével: y i = F (i, x, p), i = 1,..., N. Ahhoz, hogy a GPU-t erre a számításra rábírjuk, rendeljük a rajzolási célként beállított kimeneti textúrát az y tömbhöz. A textúra méretét a kimeneti tömb mérete alapján válasszuk meg úgy, hogy a nézetablaknak le kell fednie a teljes rajzolási célt. Egy H vízszintes és V függ leges felbontással rendelkez kétdimenziós tömb H V elem tárolására alkalmas. Tehát H V N betartása mellett elvileg bármilyen felbontást választhatunk. Azonban a GPU is rendelkezhet korlátozásokkal ezen a téren, például a felbontás legfeljebb lehet, vagy ha ugyanezt a textúrát kés bb bemenetként is szeretnénk használni, vagy bináris redukciót kívánunk végrehajtani rajta, akkor el nyösebb lehet kett hatvány felbontást választani. Ezt akár úgy is

123 37.3. A GPU mint vektorprocesszor 1707 elérhetjük, hogy tömbjeinket nem használt elemekkel egészítjük ki. A vektorfeldolgozás alapgondolatának megfelel en a különböz kimeneti értékek számítása egymástól függetlenül, köztes adatok megosztása nélkül zajlik. Mivel a GPU hardverben a pixelárnyaló végez a kimenet elemeihez kapcsolható független számításokat, ezt az árnyalót használjuk az F kiértékelésére. A paraméterek eléréséhez ismernünk kell az i indexet, vagyis hogy melyik kimeneti elemet számítjuk, és hozzá kell férnünk az x bemeneti tömbhöz. Ennek legegyszer bb módja, hogy a tömböt egy bemen textúrában tároljuk (vagy akár több textúrában, ha az kényelmesebb), hiszen a pixelárnyaló olvashat textúrákból. A CPU feladata a céltextúra bekötése rajzolási célként, az egységes paraméterek beállítása, a nézetablak megadása és egy teljesnézetes téglalap cs vezetékre küldése. Az egységes paramétereken jelölhetjük ki a bemen textúrát és a p globális paraméter értékét. OpenGL API-t feltételezve a CPU programot C nyelven a következ képpen írhatjuk meg: StartVectorOperation( ) { Az egységes p paraméter és a a bemeneti textúra arrayx azonosítójának beállítása } glviewport(0, 0, H, V); // Felbontás, azaz a kimeneti tömb mérete glbegin(gl_quads); // A következ pontok egy téglalap csúcsai glvertex4f(-1,-1, 0, 1); // normalizált eszköz-koordinátarendszerben glvertex4f(-1, 1, 0, 1); glvertex4f( 1, 1, 0, 1); glvertex4f( 1,-1, 0, 1); glend( ); Megjegyzend, hogy a program közvetlenül normalizált eszköztérben, homogén koordináták használatával adja a glvertex4f függvény paramétereként a téglalap csúcsait. Így a cs vezetékben ezeket már nem kell transzformálnunk. Az árnyalóprogramok a változó bemenetet erre szánt regisztereikben kapják meg és a kimenethez rendelt regiszterekbe írják. Minden ilyen regiszter oat4 típusú, tehát négy lebeg pontos számot tárol. A regiszterek szerepüket jelöl nevekkel azonosíthatók, a csúcspont pozíciója például a POSITION regiszterb l olvasható ki. A csúcspont színét a COLOR, textúrakoordinátáit a TEXCOORD0..7 regiszterek tárolják. A csúcspontárnyaló feladata, hogy a csúcspont megkapott pozícióját normalizált eszköz-koordinátarendszerbe transzformálja. Mivel közvetlenül ebben a térben adtuk meg a csúcspontokat, a csúcspontárnyalónak csak át kell másolnia az értéket a bemeneti POSITION regiszterb l a kimeneti POSITION regiszterbe. A kimeneti és bemeneti jelleget az in és out kulcsszavakkal jelezhetjük a regiszterekhez rendelt paraméterek el tt. A bemeneti pont pozícióját a kimenetre másoló csúcspont árnyaló: void VertexShader( in float4 inputpos : POSITION, out float4 outputpos : POSITION )

124 GPGPU: Számítások grakus processzorokon { } outputpos = inputpos; // változtatás nélküli másolás A geometriaárnyalónak ugyanazt a téglalapot kell továbbadnia, amit maga kapott. Ez a viselkedés az alapértelmezett, ehhez nem kell programot megadnunk. A téglalap ezután a vágást végz egységhez ér, ami megtartja a téglalapot, hiszen a vágási térfogaton belül van. Vágás után a homogén osztás a homogén koordinátákból a Descartes-koordinátákat állítja el. Mivel mind a négy csúcs negyedik homogén koordinátáját 1 érték re állítottuk, az els három koordináta nem változik. Osztás után a GPU a téglalap csúcsait képtérbe transzformálja, amelynek során a csúcsok x, y koordinátái a nézetablak sarkaira kerülnek, a z tartomány pedig a ( 1, 1)-b l a (0, 1) intervallumra képz dik le, így a z = 0 értékb l z = 0.5 érték lesz. Végül ezt a téglalapot töltik ki a pixelek, tehát a nézetablak összes képpontjára lefut a pixelárnyaló. A pixelárnyaló az igazi számítást végz egység. A bemen tömböt és a p globális paramétert egységes bemenetként kapja meg, a WPOS regiszter alapján pedig azonosítja, hogy mely képpontot számolja éppen: float FragmentShaderF( in float2 index : WPOS, // célpixel koordinátái uniform samplerrect arrayx, // bemeneti tömb uniform float p // globális p paraméter ) : COLOR // a kimenet egy pixel szín, azaz tömbelem { float yi = F(index, arrayx, p); // F a kiértékelend függvény return yi; } Ebben a programban két bemeneti paramétert deklaráltunk egységes bemenetnek az uniform kulcsszó segítségével: a p paramétert és az arrayx textúraazonosítót. A textúra típusa samplerrect, amivel azt is kijelöltük, hogy milyen címzéssel érhet el a textúra. Ebben a címzési módban a texelközéppontok kétdimenziós egységhálón helyezkednek el. Megjegyzend, hogy itt a korábbiaktól eltér szintaxist alkalmaztunk az árnyaló kimenetének magadására. Ahelyett, hogy a regisztert az out kulcsszóval jelöltük volna meg, itt a kimenet maga a függvény visszatérési értéke, ami a COLOR regiszterbe kerül A SAXPY BLAS függvény megvalósítása Tekintsünk egy konkrét példát és valósítsuk meg a Basic Linear Algebra Subprograms (BLAS) könyvtár ( els szint funkcionalitását, ami a következ általános formában felírható vektorfüggvényeket képes kiértékelni: y = px + y ahol x és y vektorok és p skalárparaméter. Ezt a m veletet a BLAS könyvtárban SAXPY-nak hívják. Ezúttal a pixelárnyaló két textúrát fogad, az x

125 37.3. A GPU mint vektorprocesszor 1709 vektort és az y vektor eredetijét. Egy pixelárnyaló futtatás a kimeneti vektor egyetlen elemét számolja: float FragmentShaderSAXPY( in float2 index : WPOS, // célpixel koordinátái uniform samplerrect arrayx, // x bemeneti vektor uniform samplerrect arrayy, // az y vektor eredeti verziója uniform float p // globális p paraméter ) : COLOR // a kimenet egy pixel szín, azaz vektorelem { float yoldi = texrect(arrayy, index); // yoldi = arrayy[index] float xi = texrect(arrayx, index); // xi = arrayx[index] float yi = p * xi + yoldi; return yi; } A CPU-stílusú programozás tömbindexelése helyett itt texrect Cg függvényével olvasunk be egy elemet a tömböt reprezentáló textúrából. A texrect függvény els paramétere a kétdimenziós textúra azonosítója, amit a CPU-ról egységes paraméterként adunk át, a második pedig a kiválasztandó texelre mutató textúracím. A példában meggyelhet, hogyan kezelhetjük azt a korlátot, hogy az árnyaló csak olvashat a textúrákból, de nem írhatja ket. A SAXPY m veletben az y vektor egyszerre szerepel bemenetként és kimenetként is. Ennek feloldására két textúrát rendelünk az y vektorhoz. Az egyik az eredeti vektor az arrayy textúrában, a másik pedig a rajzolási céltextúra. Az eredeti értéket olvassuk, így a kimenetet anélkül is el tudjuk állítani, hogy a rajzolási céltextúrából kellene olvasnunk ami nem lenne lehetséges Képsz rés Másik fontos példa két textúrának, nevezetesen a kép- és a sz r textúrának a diszkrét konvolúciója, ami sok képfeldolgozási algoritmusban használt alapm velet. M M L(X, Y ) L(X i, Y j)w(i, j), (37.1) i= M j= M ahol L(X, Y ) a sz rt érték az X, Y képpontban, L(X, Y ) az erdeti kép és w(x, y) a sz r kernel, ami (2M + 1) (2M + 1) képpontot fog át. Ezúttal a pixelárnyaló az Image textúrában tárolt kép és a Weight textúrában tárolt sz r kernel alapján egy kimeneti képpont kiértékeléséért felel. Az M értéket, ami a sz r kernel méretének a fele, egységes paraméterként kapja meg az árnyaló: float3 FragmentShaderConvolution( in float2 index : WPOS, // célpixel koordinátái uniform samplerrect Image, // bemeneti kép uniform samplerrect Weight, // sz r kernel uniform float M // a sz r kernel mérete ) : COLOR // a sz rt kép egyetlen pixele {

126 GPGPU: Számítások grakus processzorokon float3 filtered = float3(0, 0, 0); } for(int i = -M; i <= M; i++) for(int j = -M; j <= M; j++) { float2 kernelindex = float2(i, j); float2 sourceindex = index - kernelindex; filtered += texrect(image, sourceindex) * texrect(weight, kernelindex); } } return filtered; Bár a példánk lineáris, vagyis konvolúciós sz r volt, nemlineáris sz r ket, például mediánsz rést is megvalósíthatunk hasonlóan. A programban a két, illetve három lebeg pontos számot tároló oat2 és oat3 típusú változókon alkalmaztunk aritmetikai operátorokat (*, +=, =). A Cg fordító, illetve a GPU ezeket a m veleteket a vektorelemekre, azaz a koordinátákra, egyenként és egymástól függetlenül végzi el. Megjegyezzük továbbá, hogy nem foglalkoztunk azzal a kérdéssel, hogy mi történik a kép szélein, hanem a textúrát mindig a célcím és a kernelcím különbségével megcímezve olvastuk ki. Egy ilyen, a határokat gyelmen kívül hagyó CPU implementáció nyilvánvalóan hibás lenne, hiszen túlindexelnénk a forrástömböt. Itt azonban a texrect függvényt megvalósító textúraolvasó hardver önállóan megoldja ezt a problémát. A textúra inicializálásakor megadhatjuk, mi történjen, ha a textúrakoordináta kilóg az értelmezési tartományból. A választott opciótól függ en vagy a legközelebbi érvényes texelt, vagy egy alapértelmezett értéket kapunk, vagy akár a címet értelmezzük periodikusan A vektorfeldolgozáson túl A példák szerint a GPU-t vektorprocesszorként egyszer használni. Ha az algoritmusunk vektorfeldolgozásra alkalmas, akkor kézenfekv ez a megközelítés. Ugyanakkor számos algoritmusra nem alkalmazható jól a vektorfeldolgozás elve, mégis lehetséges rájuk hatékony GPU implementációt adni. Ebben a szakaszban a vektorfeldolgozó keretrendszert algoritmusok szélesebb körére kiterjeszt koncepciókat tekintjük át SIMD vagy MIMD A vektorprocesszorok általában SIMD (Single Instruction Multiple Data) gépek, vagyis egyszerre ugyanazt a gépi utasítást hajtják végre több adaton. Ez azt jelenti, hogy a vektorm veletek nem tartalmazhatnak adatfügg feltételeket vagy dinamikus lépésszámú ciklusokat. SIMD párhuzamos program ágaiban csak egyetlen közös vezérlési szekvencia lehet.

127 37.4. A vektorfeldolgozáson túl 1711 Természetesen feltételes utasítások nélkül és konstans ciklushatárokkal programozni nagyon korlátozó. A legkorábbi GPU árnyalók ilyen SIMD processzorok voltak, és a programozó feladata volt az összes feltétel kiküszöbölése. A mai GPU-k és fordítók már maguktól megoldják ezt, így programozói szinten ugyanúgy használhatók a feltételes elágazások és dinamikus lépésszámú ciklusok, mintha az árnyalók a CPU-khoz hasonló MIMD (Multiple Instruction Multiple Data) processzorok lennének. A végrehajtás szintjén speciális vezérlési logika teszi lehet vé, hogy az egyes skaláregységek végrehajtási szekvenciái eltérjenek: az egy multiprocesszorban lév skalárprocesszorok továbbra is ugyanazt az utasítást hajtják végre az összes itt futó szálon, de nem minden egység dolgozik valójában, azaz nem változtathatja meg az adatait. A különböz vezérlési szekvenciák m veleteit sorosítják, hogy végül mindegyik végrehajtódjon. Az a szál, amely nem a saját szekvenciáját futtatná, letiltott állapotba kerül. Így a sorosítás miatt nem dolgozó egységeknek felróhatóan a teljesítmény er sen függ a végrehajtási szekvenciák hasonlóságától. Ez az ára annak, hogy a tranzisztorokat vezérlési logika helyett több feldolgozóegységre áldozza a GPU. A feltételes szerkezet minden ágának végrehajtását az eredmény írásának tiltásával megoldó trükk neve predikáció. Tegyük fel, hogy programunkban szerepel a következ részlet: if (condition(i)) { F( ); } else { G( ); } A bemen adattól függ en bizonyos processzorokon a condition(i) feltétel igaz, másokon hamis lesz, így vektorszámítógépünknek bizonyos processzorokon az F függvényt kellene végrehajtania, más processzorokon a G függvényt. Mivel a SIMD architektúra csak egy vezérlési utat enged meg, a párhuzamos rendszernek mindkét szekvenciát végre kell hajtania, úgy, hogy csak akkor engedélyezi az adatok átírását, amíg az érvényes fázisban van. Ezzel a módszerrel az eredeti program a következ, feltételes elágazásokat nem tartalmazó algoritmussá alakítható: enablewrite = condition(i); // írásengedélyezés a feltétel alapján F( ); enablewrite =!enablewrite; // írásengedélyezés a negált feltétel alapján G( ); Mivel ebben a verzióban nincs feltételes végrehajtás, lefuttatható a SIMD gépen. A számítási id azonban a két függvény számítási idejének összege lesz. Ezt a sz k keresztmetszetet úgy lehet kiküszöbölni, ha a számítást több menetre bontjuk és kihasználjuk a korai z-teszt lehet ségét. A korai z-teszt összeveti a pixel z értékét a mélységbuer tartalmával, és ha az kisebb a tárolt

128 GPGPU: Számítások grakus processzorokon értéknél, a pixelre nem fut le a pixelárnyaló program, helyette a processzor másik adatelemet dolgoz fel. A korai z-teszt automatikusan bekapcsolódik olyan pixelárnyaló programok esetén, amelyekben nem módosítjuk a pixel z értékét (az összes eddig tárgyalt program ilyen volt). Ennek a képességnek a kihasználásához három menetre bontjuk a számítást. Az els menetben csak a feltételt értékeljük ki és a mélységbuert ennek megfelel en inicializáljuk. Idézzük fel, hogy ha a z értéket nem módosítjuk, a teljes nézetablakos téglalapunk normalizált eszközkoordinátarendszerben az x, y síkon, képtérben pedig a z = 0.5 síkon van. Tehát ahhoz, hogy a feltételnek megfelel különbségtételt érjünk el, (0.5, 1) tartományban lev értékeket állíthatunk be a feltétel teljesülése esetén, és (0, 0.5) tartományban lev t, ha a feltétel hamis. Az els menet pixelárnyalója csak a feltételt értékeli ki és írja a mélységbuerbe: float FragmentShaderCondition( in float2 index : WPOS, // célpixel koordinátái uniform samplerrect Input, // bemeneti vektor ) : DEPTH // a kimenet a mélységbufferhez kötött { bool condition = ComputeCondition(texRECT(Input, index)); return (condition)? 0.8 : 0.2; // 0.8 nagyobb, mint 0.5; 0.2 pedig kisebb } Ezután még két menetet kell futtatnunk az F és a G kiszámítására. Az els menetben a pixelárnyaló F -et számítja ki és a mélységellen rzést azon pixelek átengedésére állítjuk be, amelyek z = 0.5 mélysége kisebb, mint a mélységbuerben lev érték. Ebben a menetben így csak azok a pixelek értékel dnek ki, amelyekhez a mélységbuerbe 0.8-at írtunk, vagyis ahol a feltétel igaz volt. Ezután a második menetben a pixelárnyaló G-t számítja ki, és a mélységtesztet a buerben lev nél kisebb mélység pixelek átengedésére állítjuk be. A szakaszban a korai z-teszt segítségével változó lépésszámú ciklust valósítunk meg a pixelárnyalóban Redukció A vektorfeldolgozási megközelítésben a kimeneti tömb elemeit függetlenül számoljuk. A tömbnek elég nagynak kell lenni ahhoz, hogy minden árnyalóprocesszort ellásson munkával. Világos, hogy ha csak egy vagy néhány eleme van a tömbnek, akkor csak egy vagy néhány processzor dolgozhat egyszerre, vagyis elveszítjük a párhuzamos feldolgozás el nyét. Számos algoritmus eredménye nem egy nagy tömb, hanem csak egyetlen, tömb alapján számolt érték. Ilyenkor az algoritmusnak csökkentenie, redukálnia kell a kimenet méretét. Ha ezt a redukciót egyetlen lépésben valósítjuk meg, egyetlen texelt kiértékelve, akkor nem használjuk ki optimálisan a

129 37.4. A vektorfeldolgozáson túl ábra. Példa a párhuzamos redukcióra: bemen tömb elemeinek összegzése. párhuzamos architektúrát. Ezért a redukciót is érdemes párhuzamosan, több lépésben végezni. Ez akkor lehetséges, ha a tömbb l az eredmény kiszámítására használt m velet asszociatív, ami a leggyakrabban el forduló m veletekre, az összeg, a minimum, a maximum vagy az átlag képzésére igaz. Tegyük fel, hogy a tömböt egy kétdimenziós textúrában tároljuk. Egy számítási lépés abból áll, hogy textúra felbontását felére csökkentjük, vagyis négy szomszédos texelt egyetlen texelre cserélünk. A pixelárnyalók tehát mindig négy bementi texelt olvasnak be. Ha az eredeti tömb 2 n 2 n felbontású, akkor n redukciós lépés szükséges a kimeneti 1 1 méret eredmény el állításához. A következ példában a bemeneti tömb elemeinek összegét számoljuk ki (37.5. ábra). A CPU program minden iterációban felezi a felbontást és egy teljes nézetablakos téglalapot rajzol. Reduction( ) { Az arrayx bemeneti textúra azonosító beállítása for(n /= 2 ; N >= 1; N /= 2) { // log_2 N iteráció

130 GPGPU: Számítások grakus processzorokon } } glviewport(0, 0, N, N); // A kép méret beállítása, amely NxN pixeles glbegin(gl_quads); // Egy teljes nézetablakos téglalap rajzolása glvertex4f(-1,-1, 0, 1); glvertex4f(-1, 1, 0, 1); glvertex4f( 1, 1, 0, 1); glvertex4f( 1,-1, 0, 1); glend( ); A célterület átmásolása az arrayx azonosítójú textúrába A pixelárnyaló egyetlen redukált texelt számol ki négy texel összegzésével: float FragmentShaderSum( ) ( in float2 index : WPOS, // célpixel koordinátái uniform samplerrect arrayx, // az x bemeneti tömb textúraazonosítója ) : COLOR // egy szín, amely a kimeneti tömb egy eleme { float sum = texrect(arrayx, 2 * index); sum += texrect(arrayx, 2 * index + float2(1, 0)); sum += texrect(arrayx, 2 * index + float2(1, 1)); sum += texrect(arrayx, 2 * index + float2(0, 1)); return sum; } Megjegyezzük, hogy ha kihasználnánk a textúramemória bilineáris sz résének lehet ségét, három textúraolvasást megspórolva egyetlen m velettel is kiolvashatnánk a négy texel értékének átlagát Szórás Vektorfeldolgozás esetén minden processzor egy kimeneti értékhez rendelt, vagyis minden processzornak tudnia kell, mely kimeneti elemet számolja, amit nem irányíthat máshova. Az ilyen statikus jelleg összerendelés gy jt jelleg számításokhoz megfelel. A gy jtés sémában, a bemeneti halmaz választható dinamikusan, de el re ismernünk kell, hogy hova akarjuk kiírni az eredményt: index = ComputeIndex( ); y = F(x[index]); // A bemeneti tömb indexe A gy jtéssel szemben vannak szórás jelleg algoritmusok, ahol egy adott bemeneti érték valamely dinamikusan választott kimenethez járulhat hozzá. Egy egyszer szórási jelleg m velet: index = ComputeIndex( ); y[index] = F(x); // A kimeneti tömb indexe A vektorfeldolgozás általában nem alkalmas szórás (lásd megvalósítására, hiszen a pixelárnyaló csak a hozzá rendelt képpontba írhat. Ha szórási típusú algoritmust szeretnénk megvalósítani a GPU-n, két lehet ségünk van. Egyrészt átstrukturálhatjuk az algoritmust gy jt típusúvá. Ahhoz, hogy szórási típusú algoritmusokat gy jtési típusúvá alakítsunk, máshogy kell tekintenünk a feladatra és megoldására. Integrálegyenletek és transzportproblémák esetén ez az adjungált probléma megoldását jelenti [110]. Másrészt, az index számítását el bbre hozhatjuk a cs vezetékben, és

131 37.4. A vektorfeldolgozáson túl ábra. Szórás megvalósítása. dinamikusan rendelhetjük az indexet a rajzolási célhoz a raszterizáló segítségével (37.6. ábra). Tekintsünk egy híres szórási típusú algoritmust, a hisztogram generálást. Tegyük fel, hogy egy M méret x bemeneti tömb elemeire értékeljük ki az F függvényt, és kiszámoljuk azt az N elem y kimeneti tömböt, ami az (F min, F max) tartomány N egyenl részre osztásával kapott intervallumokba es függvényértékeket tárolja. A hisztogram generálás nem párhuzamos megvalósítása a következ lenne: Histogram( x ) { for(int i = 0; i < M; i++) { index = (int)((f(x[i]) - Fmin)/(Fmax - Fmin) * N); // intervallum index index = max(index, 0); index = min(index, N-1); y[index] = y[index] + 1; } } Láthatjuk, hogy a fenti függvény nem el re meghatározott helyeken ír a kimeneti tömbbe, ezért ez a függvény a csak kötött index célhelyre írni képes pixelárnyalóval nem megvalósítható. A szórást úgy implementálhatjuk, hogy az indexet a csúcspontárnyalóban számoljuk ki, de a számláló növelésének feladatát a cs vezeték többi részére hagyjuk. Az indexeket a raszterizáló hardver köti a kimeneti képpontokhoz. Az olvasás-módosítás-írás ciklusok problémáját megoldhatnánk úgy, hogy minden inkrementálási m velet után új menetet kezdünk és a jelenlegi célterületet a következ menet bemeneti textúrájába másoljuk. Ez a megoldás azonban nagyon gyenge teljesítményt nyújtana és egyáltalán nem használná ki a párhuzamos hardvert. Sokkal szerencsésebb, ha a kompozitáló egység aritmetikai képességeit aknázzuk ki. A pixelárnyaló csak az inkremenst (vagyis az 1 értéket) állítja el, mégpedig ott, ahol a hisztogramot növelni kell, és ezt az értéket adja tovább a kompozitáló egységnek. A kompozitáló hozzáadja az inkremenst a rajzolási cél tartalmához. A CPU program minden egyes bemen adatelemre egy pontprimitívet generál. Ezen felül beállítja a kimen tömböt rajzolási célnak és engedélyezi

132 GPGPU: Számítások grakus processzorokon a kompozitáló egység összeadási m veletét: CPUHistogram( ) { Egységes paraméterek beállítása: Fmin, Fmax, N } gldisable(gl_depth_test); // A mélységellen rzés kikapcsolása glblendfunc(gl_one, GL_ONE); // Kever operátor: cél = forrás * 1 + cél * 1; glenable(gl_blend); // Keverés engedélyezése glviewport(0, 0, N, 1); // A célterület méretének beállítása: N pixel glbegin(gl_points); // Minden egyes bemeneti elem egy pont primitív for(int i = 0; i < M; i++) { glvertex1f( x[i] ); // Egy pontprimitív feldolgozása } glend( ); A csúcspontok pozíciói itt még nem lényegesek, hiszen csak kés bb derül ki, hova képezzük le a pontokat. Így a csúcspontok els koordináját az x[i] bemen elem átadására használjuk. A csúcspontárnyaló megkapja a csúcspont pozícióját, ami ekkor a bemen elemet tartalmazza és megállapítja a pont pozícióját normalizált eszköztérben. Ehhez el ször az F függvényt értékeli ki és megállapítja a függvényértéket tartalmazó intervallum indexét. Ezután ezt az indexet a [ 1, 1] tartományba konvertálja, hiszen normalizált eszköztérben ezek a nézetablak szélei: void VertexShaderHistogram( in float inputpos : POSITION, out float4 outputpos : POSITION, uniform float Fmin, uniform float Fmax, uniform float N ) { float xi = inputpos; int index = (int)((f(xi) - Fmin)/(Fmax - Fmin) * N); // részintervallum index index = max(index, 0); index = min(index, N-1); float nindex = 2.0 * index / N - 1.0; // normalizált eszköz koordinátarendszer outputpos = float4(nindex, 0, 0, 1); // kimeneti koordináták beállítása } A fenti példa nem optimalizált. Vegyük észre, hogy az index számítást és a normalizálást összevonhatnánk és így a kimen tömb N méretére sem lenne szükségünk. A pixelárnyaló minden olyan képpontra le fog futni, amire pontprimitív vetül és egyszer en az 1 inkremens értéket adja ki: float FragmentShaderIncr( ) : COLOR // A kimenet egy pixel szín { return 1; // inkremens, amit a kever ad a célterület pixeléhez } Párhuzamosság vagy újrafelhasználás Az egymástól függetlenül futó párhuzamos processzorok az egyszálas megvalósításhoz képest a processzorok számával arányos gyorsulást nyújtanak. Az egyszálas, nem párhuzamos megvalósítás azonban kihasználhatja, ha különböz kimeneti értékek számításában közös rész ismerhet fel, amit értelem-

133 37.5. A GPGPU programozási modell: CUDA és OpenCL ábra. A hisztogram generálást felhasználó kausztika szimuláció. Az illumináció er ssége a beérkez fotonok számával arányos (Balambér Dávid képei). szer en csak egyszer kell kiszámítani. Így a részeredmény újrafelhasználásával a teljesítmény növelhet. Mivel a független párhuzamos processzorok nem hasznosíthatják újra a más processzorok által el állított adatokat, komparatív el nyeik csökkennek. A GPU-k jelent s adatfolyam-kezelési képességgel rendelkez párhuzamos rendszerek, így ha az újrahasznosítható adat elég korán áll el, a független párhuzamos feldolgozás és az újrahasznosítás el nyeit egyaránt kiaknázhatják. A f adatsokszorozónk a raszterizáló egység. Így bármi, ami a raszterizálás el tt történik, a raszterizált primitív által lefedett képpontok szempontjából globális számításnak tekinthet. Másik megoldás, hogy mivel egy menet eredményét a következ menetekben bemeneti textúraként használhatjuk, az újrahasznosítandó adatokat textúrákba kell írni és a folyamatot több képalkotási fázisra kell bontani A GPGPU programozási modell: CUDA és OpenCL A CUDA (Compute Unied Device Architecture) és az interfészek kínálta programozási modell jelent sen eltér a grakus cs vezeték modelljét l (37.1. ábra, jobb oldal). Ezek multiprocesszorok gy jteményeként láttatják a GPUt, ahol minden multiprocesszor több SIMD skalárprocesszort tartalmaz. A skalárprocesszorok saját regiszterekkel rendelkeznek és a multiprocesszoron belül osztott memórián keresztül kommunikálhatnak, gyorsítótárazott textúrákból beépített sz réssel olvashatnak, valamint írhatják és olvashatják a lassú globális memóriát. Ha kívánjuk, akár olvasás-módosítás-írás m veleteket is használhatunk. A globális memóriában textúrákat hozhatunk létre, amelyek a létrehozásuk után csak olvasásra érhet k el. A grakus API modelljével szemben itt a globális memória írása nem kizárólagos, így versenyhelyzetet teremthet, viszont atomi m veletekkel

134 GPGPU: Számítások grakus processzorokon m ködtethet szemaforokkal biztosíthatjuk az adatok foglaltságának jelzését. A vágás, raszterizáció, kompozitálás és más rögzített funkciójú elemek nem láthatóak és nem is használhatóak ebben a programozási modellben. A GPGPU programozási modellt a grakus API modelljéhez hasonlítva megállapíthatjuk, hogy tisztább és egyszer bb. A GPGPU modellben a párhuzamos processzorok egy szinten vannak és korlátlanul elérhetik a globális memóriát, míg a grakus modellben a processzorok és x funkciójú elemek cs vezetéket alkotnak, és memória írás csak a cs vezeték végén lehetséges. Amikor a GPGPU modellben programozunk, kevesebb korlátozással szembesülünk. Ugyanakkor óvatosnak kell lennünk, hiszen a grakus cs vezeték modellje pontosan azokat a lehet ségeket tiltja, amelyek használata amúgy sem ajánlott nagyteljesítmény alkalmazásokban. A GPGPU programozás m vészete abban rejlik, hogy az eredeti algoritmust hatékonyan bontsuk párhuzamos szálakra úgy, hogy minimális mennyiség adatkommunikációra és szinkronizációra legyen szükség, de a lehet legtöbb processzort lássuk el munkával. A következ szakaszokban egy alapvet m veletet, a mátrix-vektor szorzást elemezzük ebb l a szempontból Mátrix-vektor szorzás A számítási feladatok matematikai modelleken és ezek numerikus megoldásán alapulnak. A numerikus módszerek általában valamiféle linearizálásra épülnek, ami lineáris egyenletrendszerek megoldását igényl algoritmusokhoz vezet, ahol az iteratív megoldás lépéseiben mátrix-vektor szorzatokat kell számolnunk. Így a mátrix-vektor szorzás olyan alapm velet, amit ha párhuzamos architektúrán hatékonyan tudunk implementálni, akkor egy nagyon jól használható általános épít elemet kapunk. Deniálhatjuk úgy is a feladatot, hogy az y eredményvektort az A mátrixból, valamint az x és b vektorokból álló bemenet alapján kell számolnunk a következ képpen: y = Ax + b. Nevezzük ezt MV feladatnak! Legyen az A mátrix mérete N M! Mivel minden bemen vektorelem szerepel minden kimen vektorelem számításában, a nem párhuzamos CPU-implementáció két egymásba ágyazott ciklust tartalmazna, ahol az egyik ciklus a bemenet, a másik a kimenet elemein iterálna végig. Ha úgy párhuzamosítjuk az algoritmust, hogy a kimenet elemeit párhuzamos szálakhoz rendeljük, akkor egy gy jt típusú algoritmust kapunk, ahol egy szál az összes bemen elem hozzájárulását összegy jti és a szál egyetlen kimeneti értékében akkumulálja. Ezzel szemben ha a párhuzamos szálakat a bemenet elemeihez rendelnénk, akkor a szál ennek a bemeneti

135 37.6. Mátrix-vektor szorzás 1719 elemnek minden kimen elemhez tartozó hozzájárulását számolná ki, ami egy szórási m velet lenne. Gy jtés esetén a szálak csak a bemen adatokon osztoznak, de kimenetük kizárólagos, így nincs szükség szinkronizációra. Szórás esetén több szál adhatja hozzá eredményét ugyanahhoz a kimeneti elemhez, így atomi összeadásokra van szükség, ami teljesítményromlással jár. Nem párhuzamos CPU-n a mátrix-vektor szorzás megvalósítása például a következ lehet: void ScalarMV(int N, int M, float* y, const float* A, const float* x, const float* b) { for(int i=0; i<n; i++) { float yi = b[i]; for(int j=0; j<m; j++) yi += A[i * M + j] * x[j]; y[i] = yi; } } Az algoritmus párhuzamos gépre alkalmazásának els lépése az egy szálra es feladat meghatározása. A szórás és gy jtés lehet ségei közül a gy jtést kell el nyben részesítenünk, mivel automatikusan kiküszöböli az írási ütközések problémáját. Gy jt típusú megoldás esetén egy szál az y vektor egy elemét számolja, így N szálat kell indítanunk. A GPU gyakorlatilag korlátlan számú szálat képes indítani. A szálak blokkokba vannak csoportosítva, egy blokk száljai ugyanazon a multiprocesszoron futnak. Így a következ tervezési döntés az, hogy az N szálat hogyan osszuk blokkokba. Egy multiprocesszor tipikusan 32 szálat hajt végre párhuzamosan, így a blokkokban lev szálak száma a 32 többszöröse kell legyen. Amikor a szálak a lassú memóriaelérés miatt várakozni kényszerülnek, a hardverid zít más szálakat próbál futtatni. Ezért hasznos több mint 32 szálat rendelni egy multiprocesszorhoz, hogy mindig legyenek futásra kész szálak. Ugyanakkor az egy blokkban lév szálak számának növelése arra is vezethet, hogy túl kevés blokkunk marad, így a program csupán néhány multiprocesszoron fut. Ezeket gyelembe véve, rendeljünk 256 szálat egy blokkhoz és reméljük, hogy az N/256 meghaladja a multiprocesszorok számát és így teljesen kihasználjuk a párhuzamos hardvert. Apró problémát jelent, ha az N nem 256 egész számú többszöröse. A vektor maradék elemeit is processzorhoz kell rendelnünk, így a szálblokkok száma N/256 fels egészrésze kell legyen. Így viszont lesznek olyan szálaink, amelyekhez nem rendelünk vektorelemeket. Ez nem jelent gondot, ha az extra szálak ezt felismerik és nem okoznak kárt például a kimeneti tömb túlindexelésével. A korábban tárgyalt vektorfeldolgozási esethez hasonlóan itt is minden szálnak tudnia kell, hogy melyik kimeneti elemet számítja. A CUDA könyvtár ezt az információt implicit bemeneti elemek formájában teszi elérhet vé: a blockidx a szálblokk indexe, a blockdim a blokkban lev szálak száma, és a threadidx a szál indexe a blokkon belül.

136 GPGPU: Számítások grakus processzorokon A kimeneti vektor egy elemét számító CUDA kernel program most nem különálló árnyalóprogramként, hanem a hagyományos CPU program speciális függvényeként jelenik meg: global void cudasimplemv(int N, int M, float* y, float* A, float* x, float* b) { // A kiszámítandó elem indexének meghatározása a szál és blokk indexekb l } int i = blockidx.x * blockdim.x + threadidx.x; if(i < N) { // Ha az index túlcímez a tömbön, akkor ugord át. float yi = b[i]; for(int j=0; j<m; j++) yi += A[i * M + j] * x[j]; y[i] = yi; } A global kulcsszó azt jelzi a fordítónak, hogy ez a függvény nem a CPU-n, hanem a GPU-n fog futni, de a CPU-ról is hívható. A paramétereket hagyományos C szintaxissal adjuk át. Az egyetlen különlegesség az, hogy az implicit paramétereket használjuk a szál azonosítószámának, vagyis a kimeneti tömbelem indexének meghatározásához. A kerneleket a CPU programból indítjuk, megadva nemcsak a paramétereket, hanem a szálblokkok és a blokkon belüli szálak számát is: host void run_cudasimplemv() { } int threadsperblock = 256; // number of threads per block int blocknum = (N + threadsperblock - 1)/threadsPerBlock; // blokkok száma cudasimplemv<<<blocknum, threadsperblock>>>(n, M, y, A, x, b); A fordító a host kulcsszó alapján ismeri fel, hogy a függvény a CPU-n fut. A párhuzamos szálak indítása C függvényhíváshoz hasonlóan történik, kivéve a <<<blocknum, threadsperblock>>> elemet, ami azt adja meg, hogy hány szálat kell indítani és hányat kell bel lük egy multiprocesszorra elosztani A mátrixvektor szorzás további párhuzamosítása Eddig a mátrix sorait rendeltük párhuzamos szálakhoz, az A i x skalárszorzatot a szálak sorosan számították. Amennyiben a mátrix sorainak száma kisebb, mint a párhuzamos skalárprocesszorok száma, akkor ekkora párhuzamosítás nem elégséges ahhoz, hogy minden feldolgozóegységet munkával lássunk el. A skalárszorzat számításának átfogalmazása jól ismert, de fogósabb párhuzamosítási probléma, mivel az összeadásokat nem lehet függetlenül végrehajtani és egyetlen skalárt kell kiírnunk a mátrix minden sorára. A szumma részei viszont számolhatók függetlenül, majd ezután a részösszegek összeadhatók. Ez a redukció klasszikus példája. Arra van szükség, hogy a részösszegeket számoló szálak a m veletet el bb befejezzék, az eredményeiket olyan memóriába írják, ahol az azokat összeadó szál elérheti ket és az összeadás csak ezután történjen meg. Ezért a szálak közötti szinkronizációt és az azonos blokkban lév szálak számára elérhet osztott memóriát kell használnunk.

137 37.6. Mátrix-vektor szorzás 1721 Kezdetben tegyük fel, ideális körülményeket és hardvert feltételezve hogy egy sor feldolgozására lehet M darab szálunk és az osztott memória képes M darab lebeg pontos érték tárolására! Legyen Q egy M elem, osztott memóriában tárolt vektor. Ekkor minden szál egy Q j = A ij x j elemet számolhat. Végül Q elemeit összegzéssel kell redukálnunk. Ehhez tegyük fel azt is, hogy M = 2 k, azaz kett hatvány! Így a redukciót k lépésben hajthatjuk végre, minden lépésben a szálak felét leállítva, míg minden túlél szál összeadja Q saját maga által és egy leállított szál által számolt elemét. A végül utoljára maradt szál kiírja az értéket a globális memóriába. #define M THE_NUMBER_OF_MATRIX_COLUMNS global void cudareducemv(int N, float* y, float* A, float* x, float* b) { int i = blockidx.x; int j = threadidx.x; shared float Q[M]; // a multiprocesszor közös memóriájában legyen Q[j] = A[i * M + j] * x[j]; // a matrix-vektor szorzás párhuzamos része } for(int stride = M / 2; stride > 0; stride >>= 1) { // redukció syncthreads(); // várj amíg a blokk többi szálja is ide ér if(j + stride < M) Q[j] += Q[j + stride]; } if(j == 0) y[i] = Q[0] + b[i]; // ha egyetlen elemre sikerült redukálni host void run_cudareducemv() { cudareducemv<<< N, M >>>(N, y, A, x, b); } A gyakorlatban el forduló mátrixméretekre (M > 10 4 ) sem az egyetlen multiprocesszoron futtatható szálak száma, sem az osztott memória mérete nem elég az összes elem párhuzamos feldolgozására. Következ példánkban egyetlen, korlátozott méret szálblokkot használunk egy nagy mátrix feldolgozására. Egyrészt a kimeneti vektort T méret szegmensekre osztjuk. Az egy szegmensen belüli elemeket párhuzamosan értékeljük ki, majd a szálak a következ szegmenssel folytatják a munkát. Másrészt minden skalárszorzat számításnál az A i és x vektorokat Z hosszú szegmensekre osztjuk. Minden párhuzamosan feldolgozott sorra egy Z hosszú, közös Q t vektort tartunk fent. A i és x szegmenseinek elemenkénti szorzatát párhuzamosan számíthatjuk, majd hozzáadhatjuk Q t -hez. Mivel T darab sort egyenként Z darab szál dolgoz fel, a blokk T Z szálból fog állni. Egyetlen szál szemszögéb l nézve ez azt jelenti, hogy az y vektoron T lépéshosszal kell végigmennie és y minden elemére A i -n és x-en Z lépéshosszal kell végigiterálnia. Továbbá y minden elemére Q t értékét a korábbiakhoz hasonlóan redukcióval össze kell adnia. A teljes nagy mátrixokon m köd kernel tehát: global void cudalargemv(int N, int M, float* y, float* A, float* x, float* b) { shared float Q[T * Z]; // a multiprocesszor közös memóriájában legyen int t = threadidx.x / Z;

138 GPGPU: Számítások grakus processzorokon int z = threadidx.x % Z; for(int i = t; i < N; i += T) { Q[t * Z + z] = 0; for(int j = z; j < M; j += Z) Q[t * Z + z] += A[i * M + j] * x[j]; } } for(int stride = Z / 2; stride > 0; stride >>= 1) { syncthreads(); if(z + stride < Z) Q[t * Z + z] += Q[t * Z + z + stride]; } if(z == 0) y[i] = Q[t * Z + 0] + b[i]; host void run_cudalargemv() { cudareducemv<<< 1, T*Z >>>(N, M, y, A, x, b); } Ezt könnyen kiterjeszthetjük több szálblokk használatára, ha a küls hurkot a mátrix sorainak részhalmazára korlátozzuk a blockidx paraméter alapján. A fenti algoritmus kézenfekv en használja az osztott memóriát és lehet vé teszi a blokkméret megválasztásával a szálak memória elérésének a hardver szószélességéhez igazítását. Azonban az x vektor minden elemét minden sor számításához egyszer be kell olvasnunk. Ezen tudunk javítani, ha az x értékeit az osztott memóriába olvassuk és az egy blokkban lév szálakat a mátrix több során m ködtetjük. Ez azonban azt jelenti, hogy kevesebb osztott memóriát tudunk az összegzés párhuzamosítására használni. A kompromisszum vizsgálata túlmutat ezen fejezet keretein, de megemlítjük, hogy a [45] cikk a 64 8-as blokkméretet javasolta. Ilyen stratégia használata esetén további el nyt jelent az A mátrix textúraként való elérése, mivel az adatolvasás kétdimenziós lokalitást fog mutatni, ami a textúra-gyorsítótár szempontjából ideális. A számítási alkalmazások széles köre vezethet vissza olyan mátrix-vektor szorzásra, ahol a mátrixok hatalmasak, de ritkák, azaz nagyon nagy részben zérus elemeket tartalmaznak. Ritka mátrixok esetén a fentebb bemutatott mátrix-vektor szorzási algoritmusok nem hatékonyak, mivel a zérus elemekkel való szorzást is explicit módon számolják. A ritka mátrixok reprezentációit és az azokon m köd MV algoritmusokat a [14] publikáció tárgyalja Esettanulmány: Számítógépes áramlásdinamika A zikában vagy mérnöki területen felmerül problémákat általában parciális dierenciál- vagy integrálegyenletekkel írhatjuk le matematikailag. Mivel a zikai rendszereknek id beli és térbeli kiterjedése is van, a deriváltakat vagy integrálokat az id - és tértartományban egyaránt ki kell értékelni. Térben és id ben kiterjedt adatok reprezentációjához olyan függvényeket kell használ-

139 37.7. Esettanulmány: Számítógépes áramlásdinamika 1723 nunk, amelyeknek a térbeli pozíció és az id a szabad változója. Általános függvények tárolásához végtelen mennyiség adatra lenne szükség, így numerikus módszerekben ezeket csupán véges számú értékkel közelítjük. Szemléletesen ezek az értékek gyakran elképzelhet k úgy is, mint diszkrét pontokban és id pillanatokban vett függvényérték minták. A mögöttes elméleti keretet a végeselem módszer adja. Ha egy f( r) függvényt véges mennyiség adattal szeretnénk reprezentálni, a következ véges sorral közelíthetjük: f( r) f( r) = N f i B i ( r) i=1 ahol B 1 ( r),..., B N ( r) el re deniált bázisfüggvények és f 1,..., f N az f-et leíró együtthatók. Különösen egyszer végeselemes reprezentáció a szakaszonként lineáris séma, amely a tartományban gyakran szabályosan elhelyezett r 1,..., r N mintapontokkal dolgozik. Ezekben a pontokban a függvény kiértékelésével kaphatóak az f i = f( r i ) komponensek és az r i pontok közötti lineáris interpolációval kapjuk a közelít függvényt. Ha a rendszer dinamikus, akkor f megoldásának id függ nek kell lennie, így különböz id pillanatokban a végeselemes reprezentáció eltér. Alapvet en két lehet ségünk van erre. A mintapontokat rögzíthetjük statikusan és csak az f i együtthatók változhatnak id ben. Ezt a modellt eulerinek nevezik. Másrészt azt is megengedhetjük, hogy a mintapontok a rendszer mozgásával együtt elmozduljanak, így az r i mintapontok is id függ vé válnak. Ez a lagrange-i megközelítés, amelyben gyakran nevezik a mintapontokat részecskéknek. Az euleri és lagrange-i diszkretizálási sémákra szemléletes példát a meteorológiai adatok (pl. széler sség, h mérséklet) mérése alapján adhatunk. A földi állomások az adatokat rögzített helyeken mérik. A meteorológiai ballonok viszont hasonló adatokat éppen a leveg áramlását követve változó pozícióból szolgáltatnak. Ebben a szakaszban egy GPU-alapú tudományos számítás megvalósításáról szóló esettanulmányt tárgyalunk. A kiválasztott feladat a számítógépes áramlásdinamika. A füst, a felh képz dés, a t z, robbanások és sok más természeti jelenség mutat áramlásszer viselkedést. Így érthet, hogy jó és gyors áramlásszámításra van szükség a mérnöki és animációs területeken egyaránt. Az áramlás matematikai modelljét a NavierStokes-egyenlet adja. El ször bemutatjuk ezt a parciális dierenciálegyenletet, azután a GPU-alapú euleri és lagrange-i megoldások fejlesztésének lehet ségeit tárgyaljuk. Egy állandó s r ség és h mérséklet közeget a v = (v x, v y, v z ) sebesség-

140 GPGPU: Számítások grakus processzorokon és p nyomásmez vel írhatunk le. A sebesség és nyomás térben és id ben egyaránt változik: v = v( r, t), p = p( r, t). Koncentráljunk a közeg egy egységnyi térfogatú elemére, az r helyen és t id ben. A korábbi, t dt id pillanatban ez az elem r vdt helyen volt, és a dinamika alaptörvényének megfelel en a sebessége az F ered er és az egységnyi térfogatú közeg ρ tömegének hányadosával egyenl gyorsulásnak megfelel en változott. v( r, t) = v( r vdt, t dt) + F ρ dt. Az egységnyi térfogatú elem ρ tömege a közeg s r sége. A sebességet leíró tagokat bal oldalra áthozva és az egyenletet dt-vel elosztva kifejezhetjük a sebesség teljes deriváltját: v( r, t) v( r vdt, t dt) dt = F ρ. Az ered er különböz tényez kb l adódik össze. Ébredhet er a nyomáskülönbség miatt: ( F pressure = p p = x, p y, p ), z ahol p a nyomásmez gradiense. A negatív el jel azt jelzi, hogy a nyomáskülönbség az alacsonyabb nyomású régió felé gyorsítja a közeget. Itt a nabla operátort használtuk, ami Descartes-koordinátákban a következ formában írható fel: = ( x, y, z A súrlódás csillapítja a közeg mozgását. Ez a csillapítás a közeg ν viszkozitásától függ. Az er sen viszkózus folyadékok szirupként tapadnak egybe, míg az alacsony viszkozitásúak szabadon folynak. A teljes csillapítási er t diffúziós tagként fejezzük ki, mivel a súrlódási er a sebességmez a 2 Laplaceoperátorral kifejezett második deriváltjával arányos: F viscosity = ν 2 v = ν ). ( 2 v x v y v z 2 Végül egy F external küls er is gyorsíthatja a közeget. A Föld felszínén feltéve, hogy a z a függ leges tengely ez tipikusan a föld tömegvonzásából származó küls gyorsulás (0, 0, g), ahol g = 9.8 [m/s 2 ]. Az er k összeadásával megkapjuk a térfogat elem sebességére vonatkozó ).

141 37.7. Esettanulmány: Számítógépes áramlásdinamika 1725 NavierStokes-egyenletet: v( r, t) v( r vdt, t dt) ρ = p dt + ν 2 v + F external. Valójában ez az egyenlet nem más, mint a dinamika alaptörvényének áramló közegre alkalmazása, ezért hívják ezt az egyenletet lendületmegmaradási egyenletnek is. A zárt zikai rendszerek nem csupán a lendületet, hanem a tömeget is meg rzik, így ezt is be kell építenünk áramlási modellünkbe. Egyszer en fogalmazva a tömeg megmaradása annyit jelent, hogy ami egy térfogatba befolyik, annak onnan ki is kell folynia, vagyis a tömegáram divergenciája zérus. Amennyiben a közeg összenyomhatatlan, akkor a s r sége állandó. Így a tömegáram a sebességmez vel arányos. Összenyomhatatlan közegekre tehát a tömegmegmaradás miatt a sebességmez divergenciamentes: v = v x x + v y y + v z z Az áramlásdinamika euleri megoldása = 0. (37.2) Az euleri megközelítés a sebesség- és nyomásmez változását rögzített szabályos rácspontokban követi. A rács lehet séget ad arra, hogy a térbeli deriváltakat egyszer en véges dierenciákkal közelítsük. Ha a rácspontok x, y és z távolságokra helyezkednek el a koordinátatengelyek mentén és a p skalármez, valamint a v vektormez értékei az (i, j, k) rácspontban p i,j,k és v i,j,k, akkor a gradiens-, divergencia- és Laplace-operátorokat a következ képpen közelíthetjük: ( p p i+1,j,k p i 1,j,k, pi,j+1,k p i,j 1,k, pi,j,k+1 p i,j,k 1 ), (37.3) 2 x 2 y 2 x v vi+1,j,k x v i 1,j,k x 2 x + vi,j+1,k y v i,j 1,k y 2 y 2 p pi+1,j,k 2p i,j,k + p i 1,j,k ( x) 2 + vi,j,k+1 z v i,j,k 1 z 2 z + pi,j+1,k 2p i,j,k + p i,j 1,k ( y) 2 +, (37.4) p i,j,k+1 2p i,j,k + p i,j,k 1 ( z) 2. (37.5) A NavierStokes-egyenlet és a divergenciamentesség követelménye a diszkretizálás után minden rácspontban és minden id pillanatban négy ismeretlen skalárváltozóra fogalmaz meg követelményeket, amelyek a sebesség három komponense és a nyomás: (v x, v y, v z, p). A numerikus megoldásban az aktuális

142 GPGPU: Számítások grakus processzorokon mez ket az id t-vel való léptetésével számoljuk: v( r, t) = v( r v t, t t) + ν t ρ 2 v + t F ρ external t p. ρ A sebességmez t több lépésben módosítjuk, ahol minden lépés ezen egyenlet jobb oldalán lev egyik tagnak felel meg. Tekintsük ezeket egyenként! Advekció Az új sebességmez t úgy inicializáljuk az r pontban, hogy az el z mez t r v t-ben kiolvassuk, mivel az r-be érkez közegelem ott volt az el z mintavételi id pontban [105]. Ez a lépés az advekciót szimulálja, vagyis azt a jelenséget, hogy az áramlás magával viszi a sebességmez t: w 1 ( r) = v( r v t, t t). Diúzió A diúzió a sebességmez nek a közeg bels súrlódásából, viszkozitásából fakadó csillapítása. Megtehetnénk, hogy a diúziós tagot hozzáadjuk az eddig számolt sebességmez höz: w 2 = w 1 + ν t ρ 2 w 1. Ez az el relépéses Euler-integrálás azonban numerikusan instabil. Az instabilitás oka, hogy az el relépéses módszerek jelenlegi értékek alapján jósolják a jöv t és minden szimulációs lépés hozzátesz a hibához, ami minden határon túl növekedhet (részletesebben lásd a tudományos számításokról szóló fejezetben). Az el relépéses integrátorokkal szemben a visszalépéses módszerrel garantálható a stabilitás. A visszafele néz megközelítés stabil, mivel a jöv jóslása közben egyben a múltat is korrigálja. Így az összes hiba véges értékhez konvergál és korlátok közt marad. A mi esetünkben a visszalépéses módszer azt jelenti, hogy a Laplace-operátort a jöv beli, még ismeretlen sebességmez re alkalmazzuk, nem pedig az aktuális sebességmez re: w 2 = w 1 + ν t ρ 2 w 2. (37.6) A számítás ezen lépcs jében a w 1 advektált mez a rácspontokban ismert, viszont a diúzió utáni w i,j,k 2 sebességek ismeretlenek. A (37.5) egyenletet felhasználva megállapíthatjuk, hogy az ismeretlen w 2 vektormez re a Laplaceoperátort alkalmazva az (i, j, k) rácspontbeli értékre a saját és a szomszédok w 2 értékeinek lineáris kombinációját kapjuk. Így a (37.6). egyenlet egy ritka

143 37.7. Esettanulmány: Számítógépes áramlásdinamika 1727 lineáris egyenletrendszer: w 2 = w 1 + A w 2 (37.7) ahol a w 1 vektor az advekcióval nyert ismert sebességek vektora, w 2 az ismeretlen sebességek vektora, végül az A w 2 mátrix-vektor szorzat pedig a (ν t/ρ) 2 w 2 ( r) deriváltnak a diszkrét formája. Az ilyen rendszerek kiváló alanyai a Jakobi-iterációnak (lásd a tudományos számításokról szóló fejezetben). Kezdetben a w 2 vektort zérus értékkel töltjük fel és iteratívan kiértékeljük a (37.7) egyenlet jobb oldalát, az eggyel korábbi lépés eredményét mindig a jobb oldalon szerepl w 2 vektorba másolva. Így az egyenletrendszer megoldását ritka mátrix-vektor szorzások sorozatára vezetjük. Figyeljük meg, hogy az A mátrixot nem kell tárolnunk. Amikor a w 2 sebességmez egy rácspontbeli értékére van szükség, a szomszédok megkeresésével a (37.5) egyenlet egyszer képlete megadja az eredményt. Egy rácspont értékének a saját és szomszédos korábbi értékek alapján történ módosítását képsz résnek hívjuk. Így tehát a Jakobi-iteráció egy lépése képsz rési m velettel egyenérték. A képsz rés GPU megvalósítását a szakaszban tárgyaltuk. A küls er tér A küls er minden rácspontban gyorsítja a sebességmez t: w 3 = w 2 + t ρ F external. Vetítés Az eddigiekben a w 3 új sebességmez t az ismeretlen nyomásmez gyelembe vétele nélkül számítottuk. A vetítési lépésben kiszámoljuk az ismeretlen p nyomásmez t és neki megfelel módon módosítjuk a sebességmez t: v(t) = w 3 t ρ p. A nyomásmez t a sebességmez divergenciamentességének követelményéb l nyerjük. Alkalmazzuk az egyenlet mindkét oldalára a divergencia-operátort. Ezután a bal oldal zérus lesz, mivel divergenciamentes vektormez t keresünk, amire v = 0: ( 0 = w 3 t ) p ρ = w 3 t ρ 2 p. Feltételezve, hogy a w 3 vektormez értékei szabályos rácson adottak, a rácspontokban az ismeretlen nyomás meghatározásával és a divergencia és a

144 GPGPU: Számítások grakus processzorokon ábra. Az euleri módszer egy id lépése a sebességmez textúráját frissíti. Laplace-operátor a (37.4) és (37.5) egyenleteknek megfelel véges dierenciás kiértékelésével ismét ritka lineáris egyenletrendszert kapunk a diszkrét nyomásértékekre. Ezt az egyenletrendszert is Jakobi-iterációval oldjuk meg. A diúziós lépéshez hasonlóan a vetítésbeli Jakobi-iteráció is egyszer képfeldolgozási m velet. Euleri szimuláció a GPU-n A diszkretizált sebesség- és nyomásmez ket kényelmesen tárolhatjuk háromdimenziós textúrákban, ahol a diszkrét változókat szabályos rácson elhelyezked térfogatelemek (voxelek) középpontjaihoz rendeljük [50]. Minden lépésben ezen adathalmazok tartalmát számoljuk újra (37.8. ábra). Az advekció számításánál nagy el nyt jelent, hogy a mez ket textúrában tároljuk. Az r i voxelközéppontban úgy kapjuk az advektált mez t, hogy az r i v i t pozícióból kiolvassuk a mez értékét. Az így számolt pozíció nem feltétlenül esik voxel középpontra, hanem rácspontok között helyezkedik el. A végeselemes megközelítésnek megfelel en az itteni érték a mez végeselemes rekonstrukciójából nyerhet. Ha szakaszonként lineáris bázisfüggvényeket feltételezünk, akkor a textúrasz r hardver ezt a feladatot további számítási költség nélkül megoldja (37.9. ábra). A vektor- és skalármez k háromdimenziós textúrában tárolásának hátránya, hogy a textúrákat a GPU csak olvasni tudja, akár a grakus API-t, akár a GPGPU megközelítést használjuk. Grakus API esetén a módosított mez t a rajzolási célba, GPGPU esetben pedig a globális memóriába kell írni. Ezután a következ szimulációs lépésben a korábbi rajzolási célt vagy globális memóriaterületet bemen textúrának kell deklarálni. Az írási ütközések elkerülésére gy jt megközelítést alkalmazunk és minden kimeneti értéket tartalmazó rácsponthoz rendelünk egy számot. Ha a GPU-k textúrákon keresztül olvassák a globális adatokat, akkor a szál által kiírt új érték azután válik láthatóvá, hogy a menet vagy a kernelek futása véget ért és az eddigi kimenetet innent l bemen textúrának nyilvánítjuk. Ezért egyetlen id lépcs számítását elemi módosító lépésekre kell bontanunk mindenhol, ahol egy rácspont korábban számolt értékét fel kívánjuk használni. Ez

145 37.7. Esettanulmány: Számítógépes áramlásdinamika 1729 Advekció Jacobi-iteráció ábra. A szimulációs lépések mint háromdimenziós textúrák módosításai. Az advekció számítása kiaknázza a textúrasz r hardvert. A súrlódás és vetítés lineáris egyenleteit Jacobiiterációval oldjuk meg, ahol egy texelt (illetve három dimenzióban voxelt) a szomszédai súlyozott átlagával módosítunk, ami szemléletesen egy képsz rési lépésnek felel meg. azt jelenti, hogy szükség van egy advekciós menetre, Jakobi-iterációs menetek sorozatára a diúziós lépésben, egy küls er t számító menetre és egy második Jakobi-iterációs menetsorozatra a vetítési lépésben. A GPGPU keretrendszerben egy szál ugyan olvashatja a más szálak által el állított adatokat, de ekkor szinkronizálni kell, hogy biztosak lehessünk abban, hogy az olvasott érték már érvényes, nem pedig az írás el tti értéket olvassuk. Ilyenkor a szinkronizációs pontok töltik be ugyanazt az ellen rz szerepet, amit esetünkben a menetek, illetve kernelek szétválasztása. A grakus API esetében van még egy korlátozás. A rajzolási cél csak kétdimenziós lehet, így vagy kiterítjük a háromdimenziós voxeltömb rétegeit egy hatalmas kétdimenziós textúrába, vagy egy lépésben csak egy réteget frissítünk. A ábra kiterített háromdimenziós textúrát ábrázol. Miután a textúrákat beállítottuk, az egész térfogatra végrehajtható egy szimulációs lépés a teljes kiterített rácsot lefed téglalap rajzolásával. A grakus API-t használó megközelítésnek nemcsak hátrányai, de el nye is van a GPGPU módszerhez képest, mégpedig a lineáris egyenletrendszerek Jakobi-iterációval történ megoldásakor. Minden rácsponton egy pixelárnyaló fut, amely a rácsponthoz rendelt texel értékét számítja. Az olyan rácspontokban, ahol a szomszédok hatása elhanyagolható, kevesebb iterációs lépésre lenne szükség, mint ahol a szomszédok jelent sek. Egy kvázi-simd gépen, amilyen a GPU, célszer tlen a processzorokra eltér mennyiség számítási munkát bízni. A korai z-teszt kihasználásával azonban ezt a problémát megkerülhetjük és javíthatjuk a teljesítményt [114]. A mélységértéket a környezet

146 GPGPU: Számítások grakus processzorokon ábra. Kiterített háromdimenziós sebességmez (bal oldali kép) és a megjelenített s r ségmez (jobb oldali kép). legnagyobb elemével és az iterációs számmal arányosan állítjuk be. Ily módon az iteráció során a GPU kevesebb pixelt dolgoz fel, miközben a fontos területekre koncentrálhat. Méréseink szerint ez az optimalizáció a teljes szimulációs id t körülbelül 40%-kal csökkenti ). Ha szeretnénk az áramlást megjeleníteni, feltételezhetjük, hogy az áramlás egy skalár indikátormez t is magával sodor. Ez úgy m ködik, mintha némi festéket vagy konfettit öntenénk az áramló közegbe. Az indikátormez t lebeg pontos voxeltömbben tároljuk. Az advekciós képletet a D indikátorváltozóra alkalmazva ezt a mez t is frissíthetjük a t id lépcs szimulációja során: D( r, t) = D( r v t, t t). Egy pont színét és átlátszóságát az indikátorváltozó értékéb l egy, a felhasználó által szabályozható átviteli függvény segítségével számolhatjuk. A kapott indikátormez t a háromdimenziós textúrát szeletenként rajzoló módszerrel jeleníthetjük meg. Ez félig átlátszó, a nézeti irányra mer leges sokszögeket rajzol hátulról el re, a keverés bekapcsolásával ( ábra). A háromdimenziós textúra színe és átlátszósága az indikátorváltozó függvénye A dierenciálegyenletek lagrange-i megoldása A lagrange-i megközelítésben a teret részecskék segítségével diszkretizáljuk, vagyis csak véges számú áramló folyadékelemet követünk. Jelöljük a ré-

147 37.7. Esettanulmány: Számítógépes áramlásdinamika ábra. Euleri folyadékszimulációval készült animáció képkockái. szecskék számát N-nel, az i-edik diszkrét közegelem pozícióját és sebességét r i -vel és v i -vel! Feltesszük, hogy minden részecske ugyanolyan m tömeg közegelemet reprezentál. Mivel a s r ség térben változik, minden részecskéhez eltér V i = m/ρ i térfogat tartozik. A lendületmegmaradás egyenlete ebben az esetben a következ formájú: d r i dt = v i, m d v ( i dt = p( r i ) + ν 2 v( r i ) + F ) external ( r i ) V i. (37.8) Ha a szimuláció során részecskék nem vesznek el, a tömeg automatikusan megmarad, de mivel ez a tömeg kis térfogaton összpontosulhat, a szimulált közeg nem lesz összenyomhatatlan. Lagrange-i szimulációban általában összenyomható gázt feltételezünk. A diszkrét pontokban ismert rendszer tetsz leges pontban érvényes jellemz it interpolációval nyerhetjük. Tegyük fel, hogy egy A jellemz a részecskepozíciókban ismert, vagyis A 1,..., A N adott. Egy tetsz leges r pozícióban az A jellemz t a részecskék hozzájárulásainak súlyozott összegeként számoljuk: N A( r) = A i V i W ( r r i ). i=1 ahol V i az r i pontban lev részecske által elfoglalt térfogat, W (d) egy simító kernel, más néven radiális bázisfüggvény, amely a részecske pozíciója és a vizsgált pont közötti d távolságtól függ. Más szemszögb l nézve a simító kernel azt fejezi ki, hogy milyen gyorsan enyészik el a részecske hatása a távolsággal. A simító kernel normalizált, ha a simítás a jellemz összértékét meg rzi, ami akkor igaz, ha a kernel a teljes tértartományon integrálva 1-et

148 GPGPU: Számítások grakus processzorokon ad. A lehetséges kernelek egy példája a h legnagyobb sugarú kúpos kernel: W (d) = 15 πh 6 (h d)3, ha 0 d h és zérus egyébként. Normalizált kernelekre az r j pontban érvényes részecskes r ség következ képpen becsülhet : N ρ j = ρ( r j ) = mw ( r j r i ). i=1 Mivel minden részecske ugyanolyan m tömeg, a j index részecskéhez tartozó térfogat: V j = m 1 = ρ N j i=1 W ( r j r i ). Az ideális gáztörvény szerint állandó h mérsékleten a nyomás fordítottan arányos a térfogattal, így a j index részecskénél a nyomás: p j = k V j, ahol a k konstans a h mérséklett l függ. A nyomás egy tetsz leges r pontban: p( r) = N p i V i W ( r r i ). i=1 A nyomáskülönbségek miatti gyorsuláshoz szükséges a nyomásmez gradiensének számítása. Mivel az r térbeli változó csak a simító kernelben szerepel, a gradiens a simítókernel gradienséb l számítható: p( r) = N p i V i W ( r ri ). i=1 Így els közelítésben a j index részecskére a nyomásból származó er : F pressure,j = p( r j ) = N p i V i W ( rj r i ). Ezzel viszont van egy kis gond. A közelít sémánk nem garantálhatja a zikai szabályok teljesítését, így az er k szimmetriáját és következésképpen a lendületmegmaradását sem. Gondoskodnunk kell arról, hogy az i. részecskére a j. részecske miatt ható er mindig egyenl legyen a j. részecskére az i. részecske miatt ható er vel. A szimmetrikus viszonyt a nyomásból származó i=1

149 37.7. Esettanulmány: Számítógépes áramlásdinamika 1733 er következ módosításával biztosíthatjuk: F pressure,j = N i=1 p i + p j V i W ( rj r i ). 2 A viszkozitási taghoz a vektormez re a Laplace-operátort kell alkalmazni, amit a Laplace-operátornak a simító kernelre való végrehajtásával számíthatunk: F viscosity,j = ν N 2 v = ν v i V i 2 W ( r j r i ). i=1 A nyomásból ered er höz hasonlóan itt is inkább egy szimmetrikus változatot használunk, hogy az er k szimmetrikusak maradjanak: F viscosity,j = ν N ( v i v j ) V i 2 W ( r j r i ). i=1 A küls er ket közvetlenül alkalmazhatjuk a részecskékre. A részecske test ütközéseket a részecske sebességnek a test felületére mer leges komponensének tükrözésével kezelhetjük. Miután minden er t kiszámolunk és a (37.8) egyenlet id szerinti deriváltjait véges dierenciákkal közelítjük a következ képpen kaphatjuk meg a részecskék új pozícióit és sebességeit: r i (t + t) = r i (t) + v i (t) t, v i (t + t) = v i (t) + ( F pressure,i + F viscosity,i + F external,i ) V i t/m. Vegyük észre, hogy ez is egy rossz stabilitási tulajdonságokkal rendelkez el relépéses euleri integrálási séma. Ehelyett stabil alternatívát, például Verlet-integrálást is használhatunk [33]. A lagrange-i megközelítés véges számú részecskét követ, ahol a részecskékre ható er k a többi részecske pozíciójától és tulajdonságaitól függenek. Így egy N részecskéb l álló rendszer id léptetéséhez elég O(N 2 ) kölcsönhatást megvizsgálni. Az ilyen jelleg feladatokat többtest problémának hívják. Lagrange-i megoldás a GPU-n GPGPU keretrendszerben a részecskék tulajdonságait egydimenziós tömbként tárolhatjuk a globális memóriában, vagy egydimenziós textúrából olvashatjuk ki ket. Grakus API esetén csak textúrával reprezentálhatjuk a részecskejellemz ket. Az adatok textúrából olvasásának csak a jobb gyorsítótárazás miatt van el nye, mivel a textúrasz r hardver itt nem hasznos. Egy gy jt típusú módszer minden vezérelt részecskéhez rendelne egy szálat és a szál

150 GPGPU: Számítások grakus processzorokon ábra. Tömbökben vagy textúrákban tárolt adatstruktúrák. A részecske pozíció és sebesség egydimenziós oat3 típusú textúrába kerül. A számított s r séghez és nyomáshoz egydimenziós oat2 típusú textúrát használunk. Végül, egy kétdimenziós textúra azonosítja minden részecskéhez a hozzá közel lév és ezért hatással bíró további részecskéket ábra. A lagrange-i megoldás egy id lépése, amely a pirossal (feketével) színezett részecskét a sárga (fehér) szomszédai szerint mozgatja. a többi részecske hatását számolná. Mivel a simító függvény csak egy korlátos tartományban nem zérus, csak a simító függvény maximális sugaránál közelebbi részecskéknek lehet hatása. Érdemes ezeket a közeli, úgynevezett szomszédos részecskéket csak egyszer azonosítani és a globális memória kétdimenziós textúrájában eltárolni, majd a kés bbi kernelekben a szomszédsági információt újabb számítások nélkül felhasználni. A GPGPU megközelítésben három egydimenziós tömbre van szükségünk a részecskék pozíciójának, sebességének, s r ségének és nyomásának reprezentációjára, valamint egy kétdimenziós tömbre a szomszédos részecskék tárolásához ( ábra). A grakus megközelítésben ezek egy- vagy kétdimenziós textúrák. Minden részecskére futtathatunk egy kernelt, vagy egy pixelárnyalót. Minden olyan lépésnél, ahol a részecskéknek valamely korábban számított tulajdonságát szeretnénk felhasználni, a részecske feldolgozását menetekre vagy kernelekre kell osztani. Az els menet a részecskék szomszédainak azonosítása, vagyis a simítókernel sugarán belüli többi részecske megtalálása. Ennek a lépésnek a kimenete egy olyan kétdimenziós tömb, ahol az oszlopok a részecske indexével címezhet k és az oszlop elemei a közeli részecskék indexei és távolságai. A második menet a s r séget és nyomást számítja ki, a közeli részecs-

151 37.7. Esettanulmány: Számítógépes áramlásdinamika ábra. Lagrange-i megoldóval készült animációk a részecskéket gömbökkel megjelenítve (fels kép) és izofelület megkeresésével (alsó kép) [53]. kék száma és távolságai alapján. Ezután minden részecske nyomása minden szál számára elérhet lesz. A harmadik menet az er ket számolja a közeli részecskék nyomása és sebessége alapján. Végül minden részecske megkapja az újonnan kiszámolt sebességét és új pozíciójára mozog ( ábra). A részecskepozíciók ismeretében a rendszert többféleképpen megjeleníthetjük. Rajzolhatunk például pontot, vagy apró gömböt minden részecskéhez ( ábra fels képe). Egy másik megoldás a részecskéket a képerny re keni az euleri megoldásban látott rajzolási stílushoz hasonló eredménnyel ( ábra). Végül az áramló közeg felszínét is megkereshetjük és a felületen a geometriai optika törvényeit követve fényvisszaver dést és törést számolhatunk ( ábra alsó képe). A közeg felszíne a s r ségmez szintfelülete, amely az alábbi implicit egyenlet megoldásaként deniálható: ρ( r) = ρ iso. Ezt az egyenletet a virtuális kamerából látható pontokra sugármasírozás [112] (ray marching) segítségével oldhatjuk meg. A szem pozíciójából a képponton keresztül haladó sugár mentén kis lépéseket teszünk. Minden r s mintapontban ellen rizzük, hogy a ρ( r s ) s r ség meghaladja-e a megadott ρ iso értéket. Az els olyan lépésben, amikor ez megtörténik, megtaláltuk a sugár-szintfelület metszéspontot. A sugarakat innen a visszaver dési és törési irányokban folytathatjuk. Ezen irányok számításához a szintfelület

152 GPGPU: Számítások grakus processzorokon normálvektorára is szükség van, amit a s r ségmez gradienseként számolhatunk. Megjegyzések a fejezethez A GPU-k x transzformációs és multitextúrázó hardverei egy jó évtizeddel ezel tt váltak programozható csúcspont- és pixelárnyalókká. A GPU-k nagy lebeg pontos számítási teljesítménye gyorsan megteremtette az igényt arra, hogy ne csak az inkrementális képalkotásra, de más algoritmusokra is használni lehessen ket. Az els GPGPU algoritmusok még kapcsolódtak a grakához, mint például a sugárkövetés, vagy a természeti jelenségek szimulációja. A GPGPU számítások korai éveir l kiváló összefoglaló található a [92]-ban. A számítógépes graka kutatói azóta is lelkesen dolgoznak az új hardverrel, hiszen annak általános célú képességei lehet vé tették az inkrementális képalkotástól alapvet en különböz algoritmusok megvalósítását. A legfontosabb irányok a zikai alapú fényterjedés szimulációja, amit globális illuminációnak [111] hívnak, valamint a merev testek mozgásának és ütközéseinek zikai szimulációja és az áramlásszámítás, amelyek valós idej rendszerekben és játékokban valószer szimulációt tettek lehet vé. A GPU Gems könyvsorozat [41, 95, 85] és ShaderX (ma már GPU Pro [36]) sorozat hasonló eljárások terjedelmes gy jteményét alkotják. A CUDA és OpenCL platformok megjelenése óta a magas teljesítményigény számítások minden területén megjelentek GPU alapú megoldások. A GPGPU.org weboldal és NVIDIA weboldala [89, 88] cikkek és programok tárházai, egyben a GPU alapú megközelítés minden területen meglev elfogadottságának bizonyítékai. Sikeres GPU alkalmazások születtek a következ, sok számítást igényl területeken, a teljesség igénye nélkül: mindenfajta zikai jelenség szimulációja, dierenciálegyenletek megoldása, tomográás rekonstrukció, számítógépes látás, adatbáziskeresés, adattömörítés, lineáris algebra, jelfeldolgozás, molekuladinamika és molekuladokkolás, pénzügyi informatika, víruskeresés, végeselemes módszerek, Monte-Carlo módszerek, számítógépek szimulációja (CNN, neurális hálózatok, kvantumszámítógépek), mintaillesztés, DNS-szekvenciálás, kriptográa, digitális holográa, kvantumkémia stb. Ha skálázható rendszert szeretnénk, amit nem határol be egyetlen GPU kártya memóriájának mérete, GPU klasztert is építhetünk. Egyetlen PC-be akár 4 GPU-t is szerelhetünk, és az összekapcsolható PC-k száma korlátlan [118]. Az ilyen rendszerekben azonban már a kommunikáció lesz a sz k keresztmetszet, mert a jelenlegi kommunikációs csatornák nem versenyezhetnek a GPU-k számítási teljesítményével.

153 38. Quantumalapú algoritmusok Quantum

154 IX. GYAKORLATI MÓDSZEREK

155 39. Koniktushelyzetek kezelése A gyakorlati élet minden területén találkozunk olyan helyzetekkel, amikor egymásnak ellentmondó szempontokat kell egyidej leg gyelembe vennünk. A probléma sokkal komolyabbá válik akkor, amikor több döntéshozó, érdekcsoport közös megegyezése kell ahhoz, hogy a megoldás kialakuljon. A koniktus helyzetek matematikai szempontból három csoportba oszthatók: 1. Egyetlen döntéshozónak kell döntenie több, ellentmondó szempont együttes gyelembevételével 2. Több döntéshozónak kell egy közös megoldást találnia, amikor mindegyik döntéshozó csak egy kritériumot vesz gyelembe 3. Több döntéshozó keres közös megoldást, de mindegyik döntéshozó egyszerre több kritériumot vesz gyelembe Az els esetben a probléma többcélú optimalizációs probléma, mikor a különféle szempontok jelentik a célfüggvényeket. A második eset tipikus játékelméleti probléma, amikor a döntéshozók a játékosok, és a kritériumok jelentik a kizet -függvényeket. A harmadik eset, mint Pareto-játékok szerepel az irodalomban, amikor az egyes játékosok optimum helyett csak Paretooptimális megoldások megtalálására törekednek. Ebben a fejezetben ennek a nagyon fontos, összetett témakörnek az alapjait fogjuk tárgyalni Többcélú programozás alapjai Tegyük fel, hogy egyetlen döntéshozó kívánja a legjobb döntési alternatívát megtalálni több, általában ellentmondó kritérium alapján. A kritériumok általában döntési célokat reprezentálnak. Ezeket általában verbálisan fogalmazzák meg el ször, mint például tiszta leveg, olcsó üzemeltetés stb. A matematikai modell megfogalmazása el tt ezeket a célokat el ször kvantikálható mutatókkal kell leírni. Gyakran el fordul, hogy egy-egy kritériumot egyszerre több mutató jellemez, ilyen például a leveg min sége, hiszen sokféle szennyezés egyidej jelenléte befolyásolja annak min ségét. Matematikailag általában

156 Koniktushelyzetek kezelése feltesszük, hogy az egyes mutatók (ezeket célfüggvényeknek fogjuk hívni a továbbiakban) nagyobb értéke kedvez bb értéket jelent, így az összes célfüggvényt egyidej leg kívánjuk maximalizálni. Ha valamelyik célfüggvényt eredetileg minimalizálni akarjuk, akkor nyugodtan beszorozhatjuk annak értékét ( 1)-gyel, és az így nyert új célfüggvény már maximum jelleg vé válik. Ha valamelyik célfüggvény esetében valamilyen optimális érték elérése a cél, akkor az attól való eltérés ( 1)-szeresét maximalizálhatjuk. Ha X jelöli a lehetséges döntési alternatívák halmazát, és f i : X R jelöli az i-edik célfüggvényt (i = 1, 2,..., I), akkor a feladat matematikailag a következ képpen fogalmazható meg: f i (x) max (i = 1, 2,..., I), (39.1) feltéve, hogy x X. Egyetlen célfüggvény optimalizálása esetén optimális megoldást keresünk. Optimális megoldások eleget tesznek a következ feltételeknek: (i) Optimális megoldás mindig jobb, mint bármely nem optimális megoldás. (ii) Nincs olyan lehetséges megoldás, amely kedvez bb célfüggvényeket biztosítana, mint egy optimális megoldás. (iii) Ha egyszerre több optimális megoldás létezik, akkor azok ekvivalensek olyan szempontból, hogy azonos célfüggvényekkel rendelkeznek. Ezek a tulajdonságok azonnal adódnak abból az egyszer tényb l, hogy a következménytér, H = {u u = f(x) adott x X mellett} (39.2) a valós számegyenes részhalmaza, amely teljesen rendezett. Több célfüggvény esetén a H = {u = (u 1,..., u I ) u i = f i (x), i = 1, 2,..., I adott x X mellett} (39.3) következménytér az I-dimenziós euklideszi tér részhalmaza, amely csak félig rendezett halmaz. Egy másik bonyodalom származik abból is, hogy általában nem létezik olyan döntési alternatíva, amely az összes célfüggvényt egyszerre maximalizálja. Jelölje f i = max{f i (x) x X} (39.4) az i-edik célfüggvény egyedi maximumát, akkor az f = (f 1,..., f I )

157 39.1. Többcélú programozás alapjai 1741 pontot ideális pontnak nevezzük. Ha f H, akkor létezik olyan x döntés, amelyre f i (x ) = fi, i = 1, 2,..., I esetén. Ilyen speciális esetekben x kielégíti az el z ekben tárgyalt (i)-(iii) feltételeket. Ha azonban f / H, akkor a helyzet ennél sokkal bonyolultabb. Optimális megoldások helyett ilyenkor un. Pareto-optimális megoldásokat keresünk deníció. Egy x X alternatívát Pareto-optimálisnak nevezünk, ha nincs olyan x X, amelyre f i (x) f i (x) i = 1, 2,..., I esetén és legalább egy i esetén szigorú egyenl tlenség áll fenn. Egy többcélú optimalizációs probléma nem feltétlenül rendelkezik Paretooptimális megoldással, mint azt a H = {(f 1, f 2 ) f 1 + f 2 < 1} halmaz esete mutatja. Minthogy H nyílt halmaz, tetsz leges (f 1, f 2 ) H és elég kis pozitív ɛ 1 és ɛ 2 mellett (f 1 + ɛ 1, f 2 + ɛ 2 ) H tétel. Ha X korlátos, zárt egy véges dimenziós euklideszi térben és az összes célfüggvény folytonos, akkor létezik Pareto-optimális megoldás. A következ két példa egy diszkrét és egy folytonos problémát mutat be példa. Tegyük fel, hogy egy szennyvíztisztító állomás tervezésénél két alternatíva közül kell választani. Az els alternatíva költsége két milliárd Ft, és napi kapacitása 1500 m 3. A másik alternatíva drágább, 3 milliárd Ft napi 2000 m 3 kapacitással. Ebben az esetben X = {1, 2}, f 1 = költség, f 2 = kapacitás. Az alábbi táblázat foglalja össze az adatokat: Alternatíva f 1 f ábra. Szennyvíztisztító állomás tervezése. Mindkét alternatíva Pareto-optimális, hiszen 2 > 3 és 2000 > A H következménytér két pontból áll: ( 2, 1500) és ( 3, 2000) példa. Három technológiai variáns optimális kombinációját használják egy szennyvíztisztító állomáson. Az els variáns 3,2,1 mg/m 3 szennyezést távolít el az egyik fajta szennyezésb l, és 1,3,2 mg/m 3 mennyiséget a másik fajta szennyezésb l. Jelölje x 1, x 2 és 1 x 1 x 2 a három technológia változat százalékos összetételét. A

158 Koniktushelyzetek kezelése korlátozó feltételek: az eltávolított szennyezés mennyisége: x 1, x 2 0 x 1 + x 2 1, 3x 1 + 2x 2 + (1 x 1 x 2 ) = 2x 1 + x x 1 + 3x 2 + 2(1 x 1 x 2 ) = x 1 + x Minthogy a harmadik tag konstans, a következ két célfüggvényes optimum-feladatot kapjuk: 2x 1 + x 2, x 1 + x 2 max feltéve, hogy x 1, x 2 0 x 1 + x 2 1. A H következménytér a következ képpen határozható meg. Az f 1 = 2x 1 + x 2 f 2 = x 1 + x 2 egyenletekb l x 1 = f 1 f 2 és x 2 = f 1 2f 2, 3 3 és a korlátozó feltételekb l a következ feltételek adódnak az f 1 és f 2 célfüggvényekre: x 1 0 f 1 f 2 0 x 2 0 f 1 + 2f 2 0 x 1 + x 2 1 2f 1 + f 2 3. A és ábrán az X és H halmazt ábrázoljuk. A H halmaz képe alapján világos, hogy az (1, 1) és (2, 1) pontokat összeköt egyenes szakasz pontjai a Pareto-optimális pontok. A (2, 1) pont egyik lehetséges H-beli pontnál sem jobb, mert az els célfüggvényben a lehet legrosszabb síkokat szolgáltatja. A szakasz pontjai sem ekvivalensek egymással, az (1, 1) pontból lefelé haladva a (2, 1) pont irányába az els célfüggvény növekszik, a második pedig állandóan csökken. Így az optimális megoldásoknál látott (ii) és (iii) tulajdonság nem marad érvényben a többcélú esetben. Az el z példában láttuk, hogy különböz Pareto-optimális megoldások különböz célfüggvény értékeket adnak, így alapvet fontosságú annak eldöntése, hogy egy-egy konkrét esetben melyiküket válasszuk. Erre a kérdésre ad választ a többcélú programozás módszertana. A legtöbb módszer alapja az, hogy valamilyen valós érték érték-függvénnyel helyettesíti a célfüggvényeket, azaz a célfüggvények által generált preferenciát egyetlen valós érték függvénnyel helyettesíti. Ebben az alfejezetben a leggyakrabban alkalmazott többcélú programozási módszerekkel foglalkozunk.

159 39.1. Többcélú programozás alapjai ábra. Az X halmaz képe ábra. A H halmaz képe Hasznossági függvények alkalmazása Természetes módszert jelent a következ. Minden egyes célfüggvényhez hozzárendelünk egy-egy hasznossági függvényt. Legyen u i (f i (x)) az i- edik célfüggvény hasznossági függvénye. Az u i függvény konstrukciója a

160 Koniktushelyzetek kezelése hasznossági függvények elméletében megszokott módon történhet, például a döntéshozó szubjektíven deniálhatja az u i értékeket adott f i értékek mellett, majd az így adódó pontokra folytonos függvényt illeszthetünk. Additíven független hasznossági függvény esetén additív, hasznosságban független hasznossági függvény esetében pedig vagy additív vagy multiplikatív összevont hasznossági függvényalakot kaphatunk. Azaz, az összevont hasznossági függvény alakja vagy vagy u(f) = ku(f) + 1 = I k i u i (f i ) (39.5) i=1 I kk i u i (f i ) + 1. (39.6) i=1 Ilyen esetekben a többcélú optimalizációs feladat egyetlen célfüggvény vé írható át: u(f) max (39.7) feltéve, hogy x X, és ily módon u(f) jelenti az "értékfüggvényt" példa. Tekintsük ismét az el z példában szerepl döntési problémát. Az els célfüggvény értékkészlete [0, 2], a második célfüggvényé pedig [ 1, 1]. Lineáris hasznossági függvényeket feltételezve u 1 (f 1 ) = 1 2 (f 1) és u 2 (f 2 ) = 1 2 (f 2) + 1. Tegyük fel továbbá, hogy a döntéshozó megadta az u(0, 1) = 0, u(2, 1) = 1, és az u(0, 1) = 1 4 értékeket. Lineáris összevont hasznossági függvényt feltételezve és az adott értékek alapján u(f 1, f 2 ) = k 1 u 1 (f 1 ) + k 2 u 2 (f 2 ), 0 = k k = k k = k k 2 1. A harmadik egyenletb l k 2 = 1 4, a másodikból pedig k 1 = 3 4, úgyhogy u(f 1, f 2 ) = 3 4 u 1(f 1 )+ 1 4 u 2(f 2 ) = (2x 1 +x 2 ) ( x 1 +x 2 +1) = 5 8 x x

161 39.1. Többcélú programozás alapjai 1745 Tehát a következ egyetlen célfüggvénnyel rendelkez feladatot oldjuk meg: feltéve, hogy 5 8 x x 2 max x 1, x 2 0 x 1 + x 2 1. Könnyen látható, hogy az optimális megoldás: x 1 = 1, x 2 = 0, vagyis az els technológiát kell csak alkalmazni. Tegyük fel, hogy n a célfüggvények száma és a döntéshozó megad N vektort: (f (l) 1,..., f n (l) ) és a hozzátartozó u (l) összevont hasznossági függvényértékeket. Ekkor a k 1,..., k n együtthatókat a k 1 u 1 (f (l) 1 ) + + k nu n (f (l) n ) = u (l) (l = 1, 2,..., N) egyenletrendszer megoldásával kaphatjuk. Mindig feltesszük, hogy N n, így legalább annyi egyenletünk van mint az ismeretlenek száma. Ha az egyenletrendszer ellentmondást tartalmaz, akkor a legkisebb négyzetek módszerével a legjobban illeszked megoldást határozzuk meg. Tegyük fel, hogy U = u 11 u 1n u 21 u 2n.. u N1 u Nn A formális algoritmus ekkor a következ : Hasznossági-függvény-módszer(u) 1 for i 1 to N 2 do for j 1 to n 3 do u ij u j (f (i) j ) 4 k (U T U) 1 U T u a megoldásvektor 5 return k és u = u (1) u (2). u (N) Súlyozásos módszer Ennek a módszernek az alkalmazásakor az értékfüggvényt az eredeti célfüggvények lineáris kombinációjaként választjuk, vagyis a I α i f i (x) max (x X) (39.8) i=1

162 Koniktushelyzetek kezelése feladatot oldjuk meg. Ha az egyes célfüggvényeket különböz dimenzióban mérjük, akkor az összevont célfüggvény nem értelmezhet, ugyanis különböz mértékegység tagokat adunk össze. Ilyenkor a célfüggvényeket normalizálni szoktuk. Legyen m i és M i az f i célfüggvény minimuma és maximuma az X halmazon. A normált i-edik célfüggvény ekkor az f i (x) = f i(x) m i M i m i képlettel adódik, és a (39.8) problémában f i helyett f i szerepel: I α i f i (x) max (x X) (39.9) i=1 Kimutatható, hogyha az összes α i súly pozitív, (39.9) optimális megoldásai Pareto-optimálisak az eredeti feladatot nézve példa. Tekintsük ismét a példa esetét. A ábrából látjuk, hogy m 1 = 0, M 1 = 2, m 2 = 1, és M 2 = 1. Tehát a normált célfüggvények: f 1 (x 1, x 2 ) = 2x 1 + x 2 0 = x x 2 és f 2 (x 1, x 2 ) = x 1 + x = x x Tegyük fel hogy a célfüggvények egyformán fontosak, így azonos súlyokat választunk: α 1 = α 2 = 1 2, így az összevont célfüggvény: 1 2 (x x 2) ( 1 2 x x ) = 1 4 x x Könnyen látható, hogy az X halmazon az optimális megoldás: x 1 = 0, x 2 = 1, azaz csak a második technológia variánst kell alkalmazni. Tegyük fel, hogy α = (α 1, α 2,..., α I ). A formális algoritmus ekkor a következ : Súlyozásos-módszer(α) 1 for i 1 to I 2 do m i (f i (x) min) 3 M i (f i (x) max) 4 k ( I i=1 α if i max) 5 return k

163 39.1. Többcélú programozás alapjai Távolságfügg módszerek Amennyiben normáljuk a célfüggvényeket, az egyedi normált célfüggvények legkedvez bb értéke 1 és legkedvez tlenebb értéke 0. Az 1 = (1, 1,..., 1) pont tehát az ideális pont és a 0 = (0, 0,..., 0) pont a legrosszabb hozamvektor. Távolságfügg módszerek esetén vagy az 1 vektorhoz kívánunk legközelebb jutni, vagy a 0 ponttól legtávolabb, így vagy a vagy a ϱ(f(x), 1) min (x X) (39.10) ϱ(f(x), 0) max (x X) (39.11) feladatot oldjuk meg, ahol ϱ valamilyen R I -beli távolságfüggvényt jelent. A gyakorlati alkalmazásokban a következ távolságfüggvények szerepelnek leggyakrabban: I ϱ 1 (a, b) = α i a i b i (39.12) ϱ 2 (a, b) = i=1 ( I i=1 α i a i b i 2 ) 1 2 (39.13) ϱ (a, b) = max{α i a i b i } i (39.14) I ϱ g (a, b) = a i b i α i. (39.15) i=1 A ϱ 1, ϱ 1, ϱ távolságok a közismert Minkowski-féle metrikák p = 1, 2, esetben. A ϱ g geometriai távolság nem elégíti ki a távolságfüggvények szokásos feltételeit, azonban mégis gyakran alkalmazzuk a gyakorlatban. Mint azt mi is látni fogjuk a kés bbiekben, a klasszikus Nash-féle koniktus-feloldási algoritmus is a geometriai távolságot használja. Könnyen kimutathatjuk, hogy a ϱ 1 távolságra épül módszerek ekvivalensek a súlyozási módszerrel. Vegyük észre el ször, hogy ϱ 1 (f(x), 1) = I α i f i (x) 1 = i=1 I α i 1 f i (x) = i=1 I α i i=1 I α i f i (x), (39.16) ahol az els tag konstans, a második tag pedig a súlyozásos módszer célfüggvénye. Hasonlóan, i=1 ϱ 1 (f(x), 0) = I α i f i (x) 0 = i=1 I α i (f i (x) 0) = i=1 I α i f i (x) (39.17) i=1

164 Koniktushelyzetek kezelése ábra. Távolság minimalizálás ábra. Távolság maximalizálás. mely a súlyozásos módszer célfüggvénye. A módszert a és ábra mutatja példa. Tekintsük ismét az el z példa problémáját. A normalizált következményeket a ábra mutatja. A két koordináta: f 1 = f 1 2 és f 2 = f Az α 1 = α 2 = 1 2 és a ϱ 2 távolság választásával az ideális ponthoz legközelebbi

165 39.1. Többcélú programozás alapjai ábra. A normált H halmaz képe. H-beli pont f 1 = 3 5, f 2 = 4 5. Így f 1 = 2f 1 = 2x 1 + x 2 = 6 5 és f 2 = 2f 1 1 = x 1 + x 2 = 3 5, vagyis az optimális döntés: x 1 = 1 5, x 2 = 4 5, 1 x 1 x 2 = 0. Tehát csak az els két technológiát kell alkalmazni 20% és 80% arányban. Válasszunk újra egyforma súlyokat (α 1 = α 2 = 1 2 ) és a ϱ 2 távolságot, viszont keressük meg az ideálisan legrosszabb ponttól a legtávolabbi H-beli pontot. A ábrából látjuk, hogy a megoldás így f 1 = f 1 2, f 2 = 1, f 1 = 2f 1 = 1, f 2 = 2f 2 1 = 1. Tehát az optimális döntés: x 1 = 0 és x 2 = 1 A formális algoritmus a következ :

166 Koniktushelyzetek kezelése Távolságfügg -módszer(ϱ, f) 1 for i 1 to I 2 do m i (f i (x) min) 3 M i (f i (x) max) 4 f i (x) (f i (x) m i )/(M i m i ) 5 k (ϱ(f(x), 1) min) vagy k (ϱ(f(x), 0) max) 6 return k Irányfügg módszerek Tegyük fel, hogy rendelkezésünkre áll egy olyan f pont a H halmazon, amelyen javítani szeretnénk. Az f a jelenlegi helyzetet jelenti, amelyen a döntéshozó javítani kíván, vagy tervezési szinten a lehet legrosszabb pontot választhatjuk kiinduló pontnak. Feltesszük továbbá, hogy a döntéshozó megad egy javítási irányvektort, amelyet v jelöl. A feladat ezután az, hogy f -b l kiindulva a v irányvektor mentén a lehet legtávolabb jussunk el a H halmazon. Matematikailag tehát a t max (f + tv H) (39.18) optimumfeladatot oldjuk meg, és a hozzátartozó döntést az f(x) = f + tv (39.19) egyenlet megoldása adja az optimális t érték mellett. A módszert grakusan az ábra ábrázolja példa. Tekintsük ismét a példa problémáját és tegyük fel, hogy f = (0, 1), ami a lehet legrosszabb célfüggvényértékeket tartalmazza komponenseiben. Ha egyenl mértékben kívánunk a célfüggvényeken javítani, akkor a v = (1, 1) választással kell élnünk. A grakus megoldást a ábra mutatja, amely szerint f 1 = 4 3 és f 2 = 1 3, így a megfelel döntési változó értékek a következ k: x 1 = 1 3 és x 2 = 2 3. A módszernek egy nagyon ritkán alkalmazott változata az, amikor a nem lehetséges ideális pontból szisztematikusan (azaz egy adott irány mentén) csökkentjük a célfüggvényértékeket egészen addig, amíg lehetséges megoldás

167 39.1. Többcélú programozás alapjai ábra. Irányfügg módszerek ábra. A 39.6 példa grakus megoldása. adódik. Ha f jelöli azt az ideális pontot, akkor a (39.18) optimumfeladat a következ képpen módosul: és a megfelel döntést az egyenlet megoldásából nyerhetjük. t min (f tv H) (39.20) f = f tv (39.21) példa. Visszatérve az el z példára tegyük fel, hogy f = (2, 1) és v = (1, 1), azaz azonos mértékben kívánjuk a célfüggvényeket csökkenteni. A ábrán mutatjuk a probléma grakus megoldását, ahol könnyen látható, hogy ugyanaz a

168 Koniktushelyzetek kezelése ábra. A 39.7 példa grakus megoldása. megoldás adódik, mint az el z példa esetében. A módszer alkalmazását a (39.18) vagy a (39.20) optimumfeladat megoldása jelenti, és a megfelel optimális döntést a (39.19) vagy a (39.21) egyenlet megoldása adja. Gyakorlatok Határozzuk meg a H következményteret a következ gyakorlathoz: x 1 + x 2 max x 1 x 2 max feltéve, hogy x 1, x 2 0 3x 1 + x 2 3 x 1 + 3x Tegyük fel, hogy a döntéshozó hasznossági függvényei: u 1 (f 1 ) = f 1 és u 2 (f 2 ) = 1 2 f 2. Tegyük fel továbbá, hogy a döntéshozó megadta az u(0, 0) = 0, u(1, 0) = u(0, 1) = 1 2 értékeket is. Határozzuk meg a lineáris összevont hasznossági függvény alakját Oldjuk meg az gyakorlatot a súlyozásos módszerrel a célfüggvények normalizálása nélkül. Válasszuk az α 1 = α 2 = 1 2 súlyokat Ismételjük meg az el z gyakorlatot, de normalizáljuk a célfüggvényeket Oldjuk meg az gyakorlatot normalizált célfüggvényekkel, α 1 = α 2 = 1 2 súlyokkal és (i) ϱ 1 távolság minimalizálásával (ii) ϱ 2 távolság minimalizálásával (iii) ϱ távolság minimalizálásával Ismételjük meg az el z gyakorlatot, de távolság minimalizálás helyett maximalizáljuk a távolságot a 0 vektortól.

169 39.2. Egyensúlypontok módszere Oldjuk meg az gyakorlatot irányfügg módszerrel az f = (0, 1) és v = (1, 1) választással Ismételjük meg az el z gyakorlatot az f = ( 3 2, 1) és v = (1, 1) választással Egyensúlypontok módszere Ebben az alfejezetben feltesszük, hogy I döntéshozó érdekelt egy közös x X döntési alternatíva kiválasztásában. Jelölje f i : X R az i-edik döntéshozó célfüggvényét, amelyet a játékelméleti irodalomban kizet függvénynek is nevezünk. A döntéshozók egymáshoz való viszonyától függ en nem-kooperatív és kooperatív játékról beszélünk. Az els esetben az egyes döntéshozók csak saját hasznukkal tör dnek, a másodikban pedig valamiféle megállapodásra törekednek, amikor mindegyikük jobban jár, mint a nem-kooperatív esetben. Ebben az alfejezetben a nem-kooperatív esetet tárgyaljuk, a kooperatív eset a következ alfejezet témája lesz majd. Jelölje i = 1, 2,..., I és x X esetén H i (x) azon döntési alternatívák halmazát, amelyekbe az i-edik döntéshozó közvetlenül áttérhet x-b l a többiek segítsége nélkül. Nyilvánvalóan H i (x) X deníció. Egy x X alternatíva egyensúlypontot jelent, ha tetsz leges i és x H i (x ) mellett f i (x) f i (x ). (39.22) Ez a deníció úgy is megfogalmazható, hogy x stabilis abból a szempontból, hogy egyik döntéshozó sem tudja a döntési alternatívát x -ból egyedül megváltoztatni úgy, hogy célfüggvényérték javuljon. Nem-kooperatív játékok esetén az egyensúlypontok jelentik a játék megoldását. Tetsz leges x X és i döntéshozó esetén az L i (x) = {z z H i (x) és minden y H i (x) esetén f i (z) f i (y)} (39.23) halmazt, amelyet az i-edik döntéshozónak az x alternatívára adott legjobb válaszai halmazának is nevezzük. Világos, hogy L i (x) elemei jelentik azokat az alternatívákat amelyekre x-b l áttérhet az i-edik döntéshozó és az összes ilyen lehet ség közül a legkedvez bb célfüggvényt biztosít számára. A (39.22) egyenl tlenségb l az is világos, hogy x egyensúlypont akkor és csak akkor, ha i = 1, 2,..., I esetén x L i (x ), azaz x közös xpontja az L i ponthalmaz leképezéseknek. Az egyensúlypontok létezése tehát visszavezethet pont-halmaz leképezések közös xpontjának létezésére, így ez a probléma a

170 Koniktushelyzetek kezelése i = i = (1, 2) (2, 4) (2, 1) (0, 5) ábra. Játék egyensúlypont nélkül. szokásos módszerekkel tárgyalható. Igen gyakori az az eset, amikor az egyes döntéshozók egyéni döntéseib l áll össze a kollektív döntés. Jelölje X i az i-edik döntéshozó lehetséges alternatíváinak a halmazát, x i X i a konkrét alternatívákat, és legyen f i (x 1,..., x I ) az i-edik döntéshozó célfüggvénye. Azaz a kollektív döntés x = (x 1,..., x I ) X 1 X 2 X I = X. Ebben az esetben H i (x 1,..., x I ) = {(x 1,..., x i 1, z i, x i+1,..., x I ) z i X i } és a (39.22) egyensúlypont deníció a következ képpen módosul: f i (x 1,..., x i 1, x i, x i+1,..., x I) f i (x i,..., x I). (39.24) A játékelméleti irodalomban az egyensúlypontot Nash-féle egyensúlypontnak is nevezzük. Egyensúlypontok létezése nem garantált általában, ennek illusztrálására tekintsük az I = 2 esetet, amikor mindkét döntéshozó 2 alternatíva között választhat: X 1 = {1, 2} és X 2 = {1, 2}. A célfüggvényértékeket a ábra mutatja, ahol a zárójelbeli els szám az els, a második szám pedig a második döntéshozó célfüggvényértékét mutatja. Amennyiben létezik is egyensúlypont, annak egyértelm sége nem garantált, amit a konstans célfüggvények esete igazol, amikor minden döntési alternatíva egyensúlypontot jelent. Amennyiben az X 1,..., X I halmazok végesek, az egyensúlypont könnyen megtalálható a teljes leszámolás módszerével, amikor az összes döntési vektor x = (x 1,..., x I ) esetén leellen rizzük, hogy az x i komponens kicserélhet -e úgy, hogy az f i célfüggvény növekedjék. Ha igen, x nem egyensúlypont. Ha egyetlen komponens sem cserélhet ki ily módon, akkor x egyensúlypont. Az algoritmus formális leírására tegyük fel, hogy X 1 = {1, 2,..., n i }.

171 39.2. Egyensúlypontok módszere 1755 Egyensúlypont-keresés 1 for i 1 1 to n 1 2 do for i 2 1 to n do for i I 1 to n I 5 do kulcs 0 6 for k 1 to n 7 do for j 1 to n k 8 do if f k (i 1,..., i k 1, j, i k+1,..., i I ) > f(i 1,..., i I ) 9 then kulcs 1 és ugorjunk a 10. sorra 10 if kulcs = 0 11 then (i 1,..., i I ) egyensúlypont Egyensúlypont létezését garantálja a következ tétel tétel. Tegyük fel, hogy i = 1, 2,..., I esetén (i) X i konvex, korlátos és zárt egy véges dimenziós euklideszi térben (ii) f i folytonos az X halmazon (iii) rögzített x 1,..., x i 1, x i+1,..., x I mellett f i konkáv x i -ben. Ekkor legalább egy egysúlypont létezik. Az egyensúlypontok meghatározása általában azon az észrevételen alapul, hogy minden i esetére x i az f i (x 1,..., x i 1, x i, x i+1,..., x I) max (x i X i ) (39.25) optimumfeladat megoldása. Az optimális megoldás szükséges feltételeit (például a Kuhn-Tucker feltételeket) felírva egy egyenl ség-egyenl tlenségrendszert kaphatunk, amely megoldásai között szerepelnek az egyensúlypontok. Ennek a módszernek az illusztrálására tegyük fel, hogy X i = {x i g i (x i ) 0} ahol x i véges dimenziós vektor és g i vektor érték függvény. Ily módon (39.25) a következ képpen írható át: f i (x 1,..., x i 1, x i, x i+1,..., x I) max (g i (x i ) 0). (39.26)

172 Koniktushelyzetek kezelése A Kuhn-Tucker szükséges feltételek ebben az esetben a következ k: u i 0 g i (x i ) 0 i f i (x) + u T i ig i (x i ) = 0 T u T i g i(x i ) = 0, (39.27) ahol i az x i szerinti gradiensképzést jelöli, és u i olyan vektor, amely hossza megegyezik g i hosszával. Ha a (39.27) feltételeket i = 1, 2,..., I esetére felírjuk, egy egyenlet-egyenl tlenség-rendszert kapunk, amely megoldására vannak számítógépes módszerek. Könnyen látható, hogy (39.27) átírható egy nemlineáris optimalizálási feladattá is: I i=1 ut i g i(x i ) min u i 0 g i (x i ) 0 i f i (x) + u T i ig i (x i ) = 0 T. (39.28) Ha az optimális célfüggvényérték pozitív, akkor a (39.27) rendszernek nincs megoldása, és ha az optimális célfüggvényérték zérus, akkor bármely optimális megoldás egyben megoldja a (39.27) rendszert is, így az optimális megoldások között kell keresnünk az egyensúlypontokat. A KuhnTucker féle feltételek elégségességér l tudjuk, hogyha f i konkáv x i -ben minden i esetén, akkor a KuhnTucker feltételek elégségesek is, így (39.27) bármely megoldása egyensúlypontot szolgáltat. Az algoritmus formálisan a következ : KuhnTucker-egyensúlypont 1 for i 1 to I 2 do g i i f i 3 J i i g i (x i ) 4 (x 1,..., x I ) a (39.28) optimumfeladat megoldása 5 if I i=1 ut i g i(x i ) > 0 6 then return "nincs egyensúlypont" 7 else return (x 1,..., x I ) példa. Tegyük fel, hogy I termel üzem gyárt valamilyen víztisztító berendezést, amelyet háztartásokba adnak el. Jelölje x i az i-edik termel által el állított mennyiséget, c i (x i ) a költségfüggvényét, és p( I j=1 x j) az eladási árat, amely a teljes piacra bocsátott mennyiségt l függ. Legyen továbbá L i az i-edik termel kapacitása. A lehetséges X i döntési halmaz tehát a [0, L i ] zárt intervallum, amely az x i 0 L i x i 0 (39.29)

173 39.2. Egyensúlypontok módszere 1757 feltételekkel írható le, így ( ) xi g i (x i ) =. L i x i Az i-edik termel célfüggvénye annak protja: f i (x 1,..., x n ) = x i p(x x n ) c i (x i ). (39.30) Minthogy g i (x i ) kétdimenziós, u i is kételem vektor, és a (39.28) optimumfeladat a következ alakú: I i=1 (u(1) i x i + u (2) i (L i x i )) min p( I j=1 x j) + x i p ( I j=1 x j) c i (x i) + (u (1) i, u (2) i ) ( 1 1 Vezessük be az α i = u (1) i u (2) i β i = u (2) i u (1) i, u (2) i 0 x i 0 L i x i 0 ) = 0. (39.31) új változót, és a könnyebb jelölés érdekében legyen, akkor az utolsó feltétel gyelembevételével a következ problémát nyerjük: I i=1 ( x i(p( I j=1 x j) + x i p ( I j=1 x j) c i (x i)) + β i L i ) min β i 0 x i 0 x i L i. (39.32) Vegyük észre, hogy optimum esetén β i = 0, így a célfüggvény utolsó tagját el is hagyhatjuk. Tekintsük az I = 3, c i (x i ) = ix 3 i + x i, L i = 1, p(s) = 2 2s s 3 speciális esetet. A (39.32) feladat most a következ képpen egyszer södik: 3 i=1 x i(2 2s s 2 2x i 2x i s 3ix 2 i 1) max x i 0 (39.33) x i 1 x 1 + x 2 + x 3 = s. Egy egyszer számítógépes program felhasználásával az optimális megoldás: és egyben ez az egyensúlypont is. x 1 = , x 2 = , x 3 = , Gyakorlatok Legyen I = 2, X 1 = X 2 = [0, 1], f 1 (x 1, x 2 ) = x 1 + x 2 x 2 1, f 2 (x 1, x 2 ) = x 1 + x 2 x 2 2. Írjuk fel a (39.27) feltételrendszert és oldjuk is meg Az el z gyakorlathoz írjuk fel a (39.28) optimum feladatot és oldjuk is meg.

174 Koniktushelyzetek kezelése Legyen most is I = 2. X 1 = X 2 = [ 1, 1], f 1 (x 1, x 2 ) = (x 1 + x 2 ) 2 + x 1 + 2x 2, f 2 (x 1, x 2 ) = (x 1 + x 2 ) 2 + 2x 1 + x 2. Ismételjük meg a gyakorlatot Ismételjük meg a gyakorlatot az el z gyakorlatbeli problémához Kooperatív játékok módszerei Az el z alfejezethez hasonlóan jelölje ismét I a döntéshozók számát, X i az i-edik döntéshozó döntési halmazát és x i X i a konkrét döntési alternatívákat. Jelölje továbbá f i (x 1,..., x I ) az i-edik döntéshozó célfüggvényét. Legyen S a döntéshozók valamilyen részhalmaza, amelyet játékelméletben általában koalíciónak is szoktak nevezni. Tetsz leges S {1, 2,..., I} mellett vezessük be a v(s) = max min x i X i x j X j k S f k (x 1,..., x I ) (i S, j / S) (39.34) függvényt, amelyet az 1, 2,..., I halmaz összes részhalmazán deniált karakterisztikus függvénynek is nevezünk, ha a (39.34) deníciót kiegészítjük a v( ) = 0 és a v({1, 2,..., I}) = max x i X i k=1 I f k (x 1,..., x I ) (1 i I) két széls séges esettel. Tegyük ismét fel, hogy az X i halmazok végesek: X i = {1, 2,..., n i }, i = 1, 2,..., I esetén. Legyen S egy koalíció. A v(s) érték a következ algoritmussal adódik. Itt S jelöli S elemeinek számát és k 1, k 2,..., k S az elemeket, és l 1, l 2,..., l I S az S-be nem tartozó elemeket.

175 39.3. Kooperatív játékok módszerei 1759 Karakterisztikus-függvény(S) 1 v(s) M, ahol M egy nagyon nagy pozitív szám 2 for i 1 1 to n k do for i S 1 to n k S 5 do for j 1 1 to n l do for j I S 1 to n li S 8 do Z M, ahol M egy nagy pozitív szám 9 V S t=1 f i t (i 1,..., i S, j 1,..., j I S ) 10 if V < Z 11 then Z V 12 if Z > v(s) 13 then v(s) Z 14 return v(s) példa. Térjünk vissza az el z példában tárgyalt döntési problémához, és tegyük fel, hogy I = 3, L i = 3, p( I i=1 x i) = 10 I i=1 x i és c i (x i ) = x i + 1, i = 1, 2, 3 esetén. Minthogy a költségfüggvények azonosak, a célfüggvények is azonosak: f i (x 1, x 2, x 3 ) = x i (10 x 1 x 2 x 3 ) (x i + 1). A következ kben meghatározzuk a karakterisztikus függvényt. Legyen el ször S = {i}, ekkor v(s) = max min{x i (10 x 1 x 2 x 3 ) (x i + 1)} (j i). x i x j Minthogy a függvény szigorúan csökken az x j (i j) változókban, minimális értéke x j = 3 esetén adódik, így v(s) = max x i (4 x i ) (x i + 1) = max i 0 x ( x2 i + 3x i 1) = 5 i 3 4, ami egyszer dierenciálással könnyen látható. Hasonlóan az S = {i, j} esetben v(s) = max i,j min {(x i + x j )(10 x 1 x 2 x 3 ) (x i + 1) (x j + 1)}. k i,j Hasonlóan az el z esethez a minimum az x k = 3 esetben adódik, úgyhogy v(s) = max {(x i +x j )(7 x i x j ) (x i +x j +2)} = max {x(7 x) (x+2)} = 0 x i,x j 3 0 x 6 = max 0 x 6 { x2 + 6x 2} = 7

176 Koniktushelyzetek kezelése ahol bevezettük az új x = x i + x j változót. Az S = {1, 2, 3} esetben v(s) = max {(x 1 +x 2 +x 3 )(10 x 1 x 2 x 3 ) (x 1 +1) (x 2 +1) (x 3 +1)} = 0 x 1,x 2,x 3 3 = max {x(10 x) (x + 3)} = max 0 x 9 0 x 9 { x2 + 9x 3)} = 17.25, ahol most bevezettük az x = x 1 + x 2 + x 3 változót. A (39.34) deníció úgy is értelmezhet, hogy a v(s) karakterisztikus függvény-érték az S koalíció garantált együttes célfüggvényértékét adja meg függetlenül attól, hogy a többiek mit csinálnak. Kooperatív játékok elméletének és gyakorlatának az a központi kérdése, hogy az együttesen maximálisan elérhet v({1, 2,..., I}) együttes hasznon az egyes döntéshozók hogyan osztozzanak meg. Egy (φ 1, φ 2,..., φ I ) elosztást imputációnak szoktak nevezni, ha φ i v({i}) (39.35) i = 1, 2,..., I esetén és I φ i = v({1, 2,..., I}). (39.36) i=1 A (39.35)(39.36) egyenl tlenségrendszernek általában végtelen sok imputáció tesz eleget, így további feltételeket kell kikötnünk annak érdekében, hogy az imputáció-halmaz egy speciális elemét kiválaszthassuk. Hasonló helyzettel találkozhatunk a többcélú programozás tárgyalásánál is, amikor egy-egy speciális Pareto-optimális megoldást keresünk meg a konkrét módszerek alkalmazásával példa. Az el z esetben egy (φ 1, φ 2, φ 3 ) vektor akkor imputáció, ha φ 1, φ 2, φ φ 1 + φ 2, φ 1 + φ 3, φ 2 + φ 3 7 φ 1 + φ 2 + φ 3 = A legnépszer bb megoldási koncepció a következ képpen adható meg: φ i = S {1,2,...,I} Shapley-érték, amely a (s 1)!(I s)! (v(s) v(s {i})), (39.37) I! ahol s jelöli az S koalíció elemeinek a számát. Tegyük fel, hogy a döntéshozók teljesen kooperálnak, azaz az {1,2,...,I}

177 39.3. Kooperatív játékok módszerei 1761 koalíciót hozzák létre, és az egyes döntéshozók véletlen sorrendben csatlakoznak a koalícióhoz. A v(s) v(s {i}) különbség az i-edik döntéshozónak az S koalícióhoz való hozzájárulását mutatja, a (39.37) kifejezés pedig ugyanennek a döntéshozónak az átlagos hozzájárulását. Kimutatható, hogy (φ 1, φ 2,..., φ I ) egy imputáció. A Shapley-értékek számítása a következ algoritmussal történhet: Shapley-érték 1 for S {1,..., I} 2 do v(s) Karakterisztikus-Függvény(S) 3 for i 1 to I 4 do alkalmazzuk (39.37) -et φ i kiszámítására példa. Az el z példában kiszámítottuk a karakterisztikus függvény értékét. A szimmetria miatt φ 1 = φ 2 = φ 3 kell legyen a Shapley-érték esetén. Minthogy φ 1 +φ 2 +φ 3 = v({1, 2, 3}) = 17.25, φ1 = φ 2 = φ 3 = Ugyanezt az értéket kapjuk a (39.37) képlettel is. Tekintsük a φ 1 értéket. Ha i / S, akkor v(s) = v(s {i}), így az összeg megfelel tagjai zérus érték ek. A nemzérus tagok az S = {1}, S = {1, 2}, S = {1, 3} és S = {1, 2, 3} koalíciók esetében adódnak, így φ 1 = 0!2! 3! (5 1!1! 0) + 4 3! (7 5 4 ) + 1!1! 3! (7 5 4 ) + 2!0! 3! (69 4 7) = 1 6 ( ) = = Egy alternatív megoldási koncepció a megoldás stabilitását követeli meg. Azt mondjuk, hogy egy vektor φ = (φ 1,..., φ I ) majorálja a ψ = (ψ 1,..., ψ I ) vektort az S koalícióban, ha ψ i, i S φ i > i S azaz az S koalíció érdeke a φ kizetési vektorról áttérni a ψ kizetési vektorra, vagy ψ instabil az S koalícióra nézve. A NeumannMorgenstern megoldás imputációk olyan V halmaza, amelyre (i) Nincs olyan φ, ψ V, hogy φ majorálja ψ-t valamilyen koalícióban (bels stabilitás) (ii) Ha ψ / V, akkor van olyan φ V, hogy φ majorálja ψ-t legalább egy koalícióban (küls stabilitás).

178 Koniktushelyzetek kezelése Ennek a koncepciónak az a f nehézsége, hogy nincs általános egzisztencia tétel nem üres V halmaz létezésére, és nem ismert általános módszer a V halmaz konstrukciójára. Gyakorlatok Legyen I = 3, X 1 = X 2 = X 3 = [0, 1], f i (x 1, x 2, x 3 ) = x 1 + x 2 + x 3 x 2 i (i = 1, 2, 3). Határozzuk meg a v(s) karakterisztikus függvényt Az el z gyakorlatban adott játék esetére írjuk fel a (39.35), (39.36) feltételrendszert Határozzuk meg a ψ i Shapley-értékeket a gyakorlatban megadott játék esetére Csoportos döntéshozatal Az els alfejezetekben feltettük, hogy a célfüggvényeket numerikus értékek írják le. Ezek a numerikus értékek preferenciákat is jelentenek, hiszen az i- edik döntéshozó az x alternatívát preferálja z-vel szemben, ha f i (x) > f i (z). Ebben az alfejezetben olyan módszerekkel fogunk foglalkozni, amelyek nem igénylik célfüggvények ismeretét, csak az egyes döntéshozók preferenciáit. Jelölje I ismét a döntéshozók számát, X a döntési alternatívák halmazát. Ha az i-edik döntéshozó az x alternatívát jobbnak tartja, mint az y alternatívát, akkor azt x i y jelöli, ha x-et jobbnak vagy azonosan jónak tartja, mint az y alternatívát, akkor ezt x i y jelöli. Feltesszük, hogy (i) Tetsz leges x, y X esetén x i y vagy y i x (vagy mindkett ) (ii) x i y és y i z esetén x i z. Az (i) feltétel megköveteli, hogy a i félig rendezés teljes legyen, a (ii) feltétel pedig azt, hogy tranzitív legyen deníció. Egy csoportos döntéshozatali leképezés tetsz leges ( 1, 2,..., I ) egyéni félig rendezéseket egyetlen félig rendezéssé s rít, amelyet a csoport közös preferencia-struktúrájának is nevezünk. Néhány egyszer példán illusztráljuk a csoportos döntéshozatali leképezés fogalmát.

179 39.4. Csoportos döntéshozatal példa. Legyen x, y X tetsz leges, és az összes i esetén legyen 1, ha x i y, α i = 0, ha x i y, 1, ha x i y. Legyen β i, β 2,..., β I adott pozitív konstans, és α = I β i α i. i=1 A csoportos döntéshozatali leképezést a következ jelenti: x y α > 0 x y α = 0 x y α < 0. A többségi szavazati szabály ennek az a speciális esete, amikor β 1 = β 2 = = β I = példa. Egy i 0 döntéshozót diktátornak hívunk, ha a csoportos döntéshozatalban az akarata érvényesül: x y x i0 y x y x i0 y x y x i0 y. Ezt a fajta csoportos preferenciát diktatúrának is hívjuk példa. A Borda-mérték esetén feltesszük, hogy α véges halmaz és az összes döntéshozó valamennyi x X esetén egy c i (x) mértékkel fejezi ki preferenciáját. Például c i (x) = 1, ha x a legjobb, c i (x) = 2, ha x a második legkedvez bb alternatíva az i-edik döntéshozó számára, és így tovább, c i (x) = I, ha x a legrosszabbnak feltüntetett. Ekkor I I x y c i (x) > c i (y) x y x y i=1 I c i (x) = i=1 I c i (x) < i=1 i=1 I c i (y) i=1 I c i (y). Egy csoportos döntéshozatali leképezést Paretonak vagy Paretoleképezésnek hívunk, ha valamilyen x, y X és x i y (i = 1, 2,..., I) i=1

180 Koniktushelyzetek kezelése esetén szükségképpen x y. Azaz, ha az összes döntéshozó x-et preferálja y- nal szemben, akkor ez ugyanígy kell legyen a csoport közös preferenciájában is. Egy csoportos döntéshozatali leképezésr l azt mondjuk, hogy eleget tesz a páronkénti függetlenségi feltételnek, ha tetsz leges két ( 1,..., I ) és ( 1,..., I ) preferencia-struktúra kielégíti a következ ket. Legyen x, y X olyan, hogy tetsz leges i mellett x i y akkor és csak akkor teljesül, ha x i y, és y i x akkor és csak akkor teljesül, ha y i x. Ekkor a csoport közös preferenciájában is x y akkor és csak akkor, ha x y, és y x akkor és csak akkor, ha y x példa. Könnyen látható, hogy a Borda-mérték Pareto, azonban nem elégíti ki a páronkénti függetlenségi feltételt. Az els állítás nyilvánvaló, a másodikat pedig egy egyszer példával illusztrálhatjuk. Legyen I = 2, α = {x, y, z}. tegyük fel, hogy és x 1 z 1 y y 2 x 2 z x 1 y 1 z y 2 z 2 x. Ekkor c(x) = = 3, c(y) = = 4, így y x. Azonban c (x) = = 4, c (y) = 2+1 = 3, következésképpen x y. Mint látjuk az egyes döntéshozók x és y közötti preferencia rendezése ugyanaz a két esetben, de a csoport közös preferenciája különböz. Jelölje R I az I-elem teljes és tranzitív ( 1,..., I ) félig rendezések halmazát egy legalább három elem X halmazon, és legyen a csoport együttes preferenciája, amely Pareto és eleget tesz a páronkénti függetlenségi feltételnek. Ekkor szükségképpen diktatórikus. Ez az Arrow-tól származó eredmény mutatja, hogy nincs olyan csoportos döntéshozatali leképezés, amely eleget tenne a fenti két természetes és alapvet követelménynek példa. A páronkénti összehasonlítás módszere a következ. Legyen x, y X tetsz leges, és jelöljük P (x, y)-nal azon döntéshozók számát, amelyekre x i y. A csoport együttes preferenciája ezek után a következ : x y P (x, y) > P (y, x) x y P (x, y) = P (y, x) x y P (x, y) < P (y, x), azaz x y akkor és csak akkor, ha több döntéshozó tartja x-et jobbnak, mint az y alternatívát a kett jük összehasonlításában. Tegyük fel ismét, hogy X három elemb l

181 39.4. Csoportos döntéshozatal 1765 Döntéshozók Alternatívák Súlyok N 1 a 11 a a 1N α 1 a 21 a a 2N α 2 2. I.... a I1. a I2. a IN ábra. Csoportos döntéshozatali táblázat.. α I áll, x = {x, y, z} és az egyéni preferenciák I = 3 esetén x 1 y 1 z z 2 x 2 y y 3 z 3 x. Az együttes preferenciában tehát x y, mert P (x, y) = 2 és P (y, x) = 1. Hasonlóan y z, mert P (y, z) = 2 és P (z, y) = 1, valamint z x, hiszen P (z, x) = 2 és P (x, z) = 1. Tehát x y z x, ami ellentmond a tranzitivitási követelménynek. Az eddigiekben tárgyalt módszerek nem vették gyelembe azt a fontos körülményt, hogy a döntéshozók nem feltétlenül azonos pozíciókban vannak, azaz különböz fontosságúak is lehetnek. Ezt a fontosságot súlyokkal tudjuk például jellemezni. Ebben az általánosabb esetben a csoportos döntéshozatali módszereket kell képpen módosítanunk kell. Tegyük fel, hogy X véges halmaz, jelölje N az alternatívák számát. Az összes döntéshozó preferenciáját az 1-t l N-ig terjed számokkal jelöljük, ahol 1 a legkedvez bb, N pedig a legkedvez tlenebb alternatívához van rendelve. Elképzelhet, hogy két alternatíva egyformán fontos, akkor törtszámot is használhatunk. Például, ha 2. és 3. fontossági sorrendjét nem tudjuk megkülönböztetni, akkor 2.5-et rendelünk mindkét alternatívához. Általában a meg nem különböztethet sorszámok átlagértékét rendeljük mindegyikükhöz. Ily módon a csoportos döntéshozatal problémája egy táblázatban adható meg, amely sorai a döntéshozóknak, oszlopai pedig a döntési alternatíváknak felel meg. A táblázat minden sora az 1, 2,..., N számok valamilyen permutációja, esetleg néhány elemet átlagértékekkel helyettesítünk azonosan preferált esetekben. A ábra mutatja az így adódó döntési táblázatot, ahol az utolsó oszlopban feltüntettük a döntéshozók súlyait is. A többségi szavazati szabályt ebben az általánosabb esetben a következ képpen fogalmazhatjuk meg. Az összes j alternatívához határozzuk meg el ször azoknak a döntéshozóknak az együttes súlyát, akiknek a j-edik alternatíva a legjobb lehet ség, majd válasszuk ki azt az alternatívát a közösen

182 Koniktushelyzetek kezelése elfogadott legjobbnak, amelyik esetén ez az összeg a legnagyobb. Ha célunk az összes alternatíva rangsorolása, és nemcsak a legjobb kiválasztása, akkor ezen összeg szerinti csökken sorrendet kell tekintenünk az alternatívák rangsorolásához, ahol a legnagyobb összeg választja ki a legjobbat, és a legkisebb összeg adja a legkedvez tlenebb alternatívát. Matematikailag legyen f(a ij ) = { 1, ha aij = 1, 0 különben (39.38) és A j = I f(a ij )α i (39.39) i=1 j = 1, 2,..., I esetén. A j 0 -adik alternatíva a csoport által tekintett legjobb, ha A j0 = max{a j }. (39.40) j A formális algoritmus a következ : Többségi-szavazati-szabály(A) 1 A 1 0, A 2 0,..., A N 0, max 0 2 for i 1 to N 3 do for j 1 to I 4 do if a ji = 1 5 then A i A i + α j 6 if A i > max 7 then max A i 8 ind i 9 return ind A Borda-mérték alkalmazásakor legyen B j = I a ij α i, (39.41) i=1 és a j 0 alternatíva a csoportos döntés eredménye, ha B j0 = min j {B j }. (39.42) A Borda-mérték a következ algoritmussal írható le:

183 39.4. Csoportos döntéshozatal 1767 Borda-mérték-módszer(A, α) 1 B 1 0, B 2 0,..., B N 0, max 0 2 for j 1 to N 3 do for i 1 to I 4 do B j B j + a ij α i 5 if B j > max 6 then max B j 7 ind j 8 return ind A páronkénti összehasonlítás módszerének alkalmazásakor legyen tetsz leges j, j X esetén P (j, j ) = α i (39.43) {i a ij <a ij } mely megadja mindazoknak a döntéshozóknak az együttes súlyát, akik a j- edik alternatívát tartják jobbnak, mint a j -dik alternatívát. Az együttes döntésben j j P (j, j ) > P (j, j). Számos esetben az így nyert együttes félig rendezés nem ad egyértelm en legjobb alternatívát. Ilyen esetekben S = {j j X és nincs olyan j X, amelyre j j} nem-dominált alternatíva-halmazon további analízis (például egy másik módszer alkalmazása) szükséges. Az algoritmussal egy {0, 1} elem mátrixot konstruálunk, ahol a jl = 1 akkor és csak akkor, ha a j alternatíva összeségében jobb, mint az l alternatíva. Döntetlen esetben a jl = 1 2 lesz.

184 Koniktushelyzetek kezelése Bizottsági Alternatívák Súlyok Tagok ábra. A példa adatbázisa. Páronkénti-összehasonlítás(A) 1 for j 1 to N 1 2 do for l j to N 3 do z 0 4 for i 1 to I 5 do if a ij > a il 6 then z z if z > N 2 8 then a jl 1 9 if z = N 2 10 then a jl if z < N 2 12 then a jl 0 13 a lj a jl 14 return A példa. Egy vegyileg szennyezett terület tisztítására négy javaslat érkezett a környezetvédelmi hatósághoz. Egy hat emberb l álló bizottságnak kell a legjobb javaslatot kiválasztani és ezután a hatóság szerz dést köthet annak konkrét megvalósítására. A táblázat tartalmazza az egyes bizottsági tagok relatív súlyát és az egyéni preferenciákat. A többségi szavazati szabály alkalmazásakor A 1 = = 0.6 A 2 = = 0.3 A 3 = 0.1 A 4 = 0, így az els alternatíva adódik a legjobbnak.

185 39.4. Csoportos döntéshozatal 1769 A Borda-mérték alkalmazásakor B 1 = = 1.5 B 2 = = 2.5 B 3 = = 2.5 B 4 = = 3.5. Az els alternatíva adódik ismét a legjobbnak, de ez a módszer egyformán jónak mutatja a második és harmadik alternatívát. Vegyük észre, hogy az el z módszer esetében a második alternatíva jobbnak adódott, mint a harmadik. A páronkénti összehasonlítás módszere esetében P (1, 2) = = 0.7 P (2, 1) = = 0.3 P (1, 3) = = 0.9 P (3, 1) = 0.1 P (1, 4) = = 0.9 P (4, 1) = 0.1 P (2, 3) = = 0.4 P (3, 2) = = 0.6 P (2, 4) = = 0.9 P (4, 2) = 0.1 P (3, 4) = = 0.7 P (4, 3) = = 0.3. Tehát 1 2, 1 3, 1 4, 3 2, 2 4 és 3 4. Ezeket a preferenciákat a ábrán ábrázoljuk. Az els alternatívát jobbnak találtuk, mint az összes többit, ezért ez a nyilvánvaló választás. A fenti példában mindhárom módszer ugyanazt az eredményt szolgáltatta. Számos gyakorlati esetben azonban különböz eredmény is adódhat, ilyenkor a döntéshozóknak kell kiválasztaniuk valamilyen egyéb kritériumok alapján a közösen elfogadott megoldást. Gyakorlatok Tekintsük a következ csoportos döntéshozatali táblázatot: Alkalmazzuk a többségi szavazati szabályt Alkalmazzuk a Borda-mértéket az el z gyakorlatra Alkalmazzuk a páronkénti összehasonlítás módszerét a gyakorlatra Tekintsük most a következ csoportos döntéshozatali táblázatot:

186 Koniktushelyzetek kezelése ábra. A példa referencia gráfja. Döntéshozók Alternatívák Súlyok ábra. Döntéshozók Alternatívák Súlyok ábra. Csoportos döntéshozatali táblázat Ismételjük meg a gyakorlatot erre a problémára Alkalmazzuk a Borda-mértéket az el z gyakorlatra Alkalmazzuk a páronkénti összehasonlítás módszerét a gyakorlatra Pareto-játékok alkalmazása Jelölje ismét I a döntéshozók számát és tegyük most fel, hogy a döntéshozók külön-külön több célfüggvénnyel rendelkeznek. Az ilyen típusú problémák

187 39.5. Pareto-játékok alkalmazása 1771 kezelésére többféle lehet ség kínálkozik. (A) Többcélú programozás alkalmazásakor jelölje α i az i-edik döntéshozó súlyát, és legyenek β i1, β i2,..., β ic(i) ugyanezen döntéshozó célfüggvényének a súlyai. Itt c(i) jelöli az i-edik döntéshozó célfüggvényeinek a számát. Így egy I i=1 c(i) célfüggvénnyel rendelkez optimalizációs problémát kaphatunk, ahol az összes döntéshozó valamennyi célfüggvénye jelenti a feladat célfüggvényeit, és az egyes célfüggvények súlyai az α i β ij sorozatok. Az így adódó probléma megoldására az alfejezet bármely módszerét választhatjuk. (B) Egy másik módszercsaládot nyerhetünk a következ képpen. Mindegyik döntéshozó esetére határozzunk meg egy hasznossági függvényt (a szakaszban leírtak szerint), amely egyetlen függvénybe s ríti a döntéshozó preferenciáját. Ezzel a módszerrel elérjük, hogy minden döntéshozó egyetlen (új) célfüggvénnyel rendelkezik csak, így az el z alfejezetek bármelyik megoldási koncepcióját és módszerét közvetlenül alkalmazni tudjuk. (C) Egy harmadik megoldási módszert kaphatunk oly módon, hogy az egyes döntéshozók esetén hasznossági függvények konstrukciója helyett csak a döntéshozók alternatív halmazon deniált félig rendezését határozzuk meg valamilyen módszerrel. Ezután pedig a alfejezet bármelyik módszerét közvetlenül alkalmazni tudjuk példa. Módosítsuk az el z példát a következ képpen. tegyük fel ismét, hogy négy alternatívából választunk, azonban tegyük fel most, hogy háromtagú a bizottság és mindegyik bizottsági tag két célfüggvénnyel rendelkezik. Az els célfüggvényt a javasolt megoldás technikai színvonala jelenti egy szubjektív skálán. A második célfüggvény pedig a pontos megvalósítás valószín ségét jelenti, ez utóbbit szubjektív alapon külön-külön becslik meg a döntéshozók a javaslattev cég korábbi megbízásai alapján. Az adatokat a táblázat mutatja, ahol feltesszük, hogy az els célfüggvény egy 0-tól 100-ig terjed szubjektív skálán becsült, így a normalizált célfüggvényértékeket 100-al való osztással kapjuk meg. A súlyozásos módszert alkalmazva külön-külön az egyes döntéshozók esetére a következ összevont célfüggvényértékek adódnak: 1. Döntéshozó Els alternatíva: 0.9(0.5) + 0.9(0.5) = 0.9 Második alternatíva: 0.75(0.5) + 0.8(0.5) = Harmadik alternatíva: 0.8(0.5) + 0.7(0.5) = 0.75 Negyedik alternatíva: 0.85(0.5) + 0.8(0.5) = 0.825

188 Koniktushelyzetek kezelése Döntéshozó Célfüggvény Alternatívák Célfüggvény Döntéshozó súlya súlya ábra. A példa adatbázisa. 2. Döntéshozó 3. Döntéshozó Els alternatíva: 0.85(0.6) + 0.8(0.4) = 0.83 Második alternatíva: 0.8(0.6) + 0.9(0.4) = 0.84 Harmadik alternatíva: 0.7(0.6) + 0.8(0.4) = 0.74 Negyedik alternatíva: 0.9(0.6) (0.4) = 0.88 Els alternatíva: 0.8(0.7) (0.3) = Második alternatíva: 0.9(0.7) + 0.8(0.3) = 0.87 Harmadik alternatíva: 0.75(0.7) + 0.9(0.3) = Negyedik alternatíva: 0.7(0.7) + 0.8(0.3) = 0.73 Az egyedi preferenciák tehát a következ k: , , és Például a Borda-mértéket alkalmazva B 1 = 1(0.4) + 3(0.3) + 2(0.3) = 1.9 B 2 = 3(0.4) + 2(0.3) + 1(0.3) = 2.1 B 3 = 4(0.4) + 4(0.3) + 3(0.3) = 3.7 B 4 = 2(0.4) + 1(0.3) + 4(0.3) = 2.3 adódik, így a négy alternatíva csoport-rendezése Gyakorlatok Tekintsük a következ táblázatot:

189 39.6. Axiomatikus módszerek 1773 Döntéshozó Célfüggvény Alternatívák Célfüggvény Döntéshozó súlya súlya ábra. Tegyük fel, hogy a célfüggvények már normalizáltak. Alkalmazzuk az (A) módszert a gyakorlat megoldására Az el z gyakorlat esetére alkalmazzuk a (B) módszert, ahol az egyes döntéshozók hasznossági függvényeit a súlyozásos módszerrel kapjuk meg, és a csoportos döntéshozatalt pedig a Borda-mérték adja meg A gyakorlatban alkalmazzuk a páronkénti összehasonlítás módszerét a Borda-mérték helyett Axiomatikus módszerek Az egyszer ség érdekében tegyük fel, hogy I = 2, azaz két döntéshozó közötti koniktust kívánunk feloldani. Feltesszük, hogy a H következménytér konvex, korlátos, és zárt R 2 -ben, és adott egy olyan f = (f 1, f 2 ) pont, amely a döntéshozók célfüggvényértékeit adja meg abban az estben, ha nem tudnak megállapodni. Feltesszük, hogy létezik olyan f H, amelyre f > f. A (H, f ) pár matematikailag jellemzi a koniktust. A megoldás nyilvánvalóan mind H-tól és mind f -tól kell függjön, így ezeknek valamilyen függvénye: φ(h, f ). A különféle megoldási koncepciók esetén megköveteljük, hogy a megoldásfüggvény eleget tegyen bizonyos követelményeknek, amelyeket axiómaként kezelünk. Ezek az axiómák a megoldás korrektségét követelik meg, különböz axiómák más-más módon jellemzik ezt a korrektséget. A klasszikus Nash-féle megoldás esetén a következ ket tesszük fel: (i) φ(h, f ) H (lehetségesség) (ii) φ(h, f ) f (racionalitás) (iii) φ(h, f ) Pareto-megoldás H-ban (Pareto-optimalitás)

190 Koniktushelyzetek kezelése (iv) Ha H 1 H és φ(h, f ) H 1, akkor szükségképpen φ(h 1, f ) = φ(h, f ) (kedvez tlen alternatíváktól való függetlenség) (v) Legyen T : R 2 R 2 olyan lineáris transzformáció, amelyre T (f 1, f 2 ) = (α 1 f 1 + β 1, α 2 f 2 + β 2 ) pozitív α 1 és α 2 esetén. Ekkor φ(t (H), T (f )) = T (φ(h, f )) (növekv lineáris transzformációtól való függetlenség) (vi) Ha H és f szimmetrikusak, azaz f 1 = f 2 és (f 1, f 2 ) H (f 2, f 1 ) H, akkor φ(h, f ) komponensei is azonosak legyenek (szimmetria). Az (i) feltétel a megoldás lehetségességét követeli meg. A (ii) feltétel azt írja el, hogy egy racionális döntéshozó sem egyezik bele olyan megoldásba amely rosszabb, mint amit megegyezés nélkül amúgy is elérne. A (iii) feltétel alapján nincs jobb, mint a megegyezéssel elért megoldás. A (iv) követelmény szerint ha a megegyezés után bizonyos alternatívák elvesztik lehetségességüket, de a megoldás lehetséges marad, akkor a lesz kített következménytér mellett is ugyanaz a megoldás marad. Ha bármely célfüggvény dimenzióját megváltoztatjuk, a megoldás nem változhat. Ezt a követelményt fogalmazza meg (v), és az utolsó feltétel azt jelenti, hogy ha két döntéshozó teljesen azonos helyzetben van a koniktus megfogalmazásában, akkor a megoldás esetén is azonosan kell kezeljük ket. A következ, Nash-tól származó eredmény alapvet fontosságú tétel. Az (i)-(vi) feltételeket pontosan egy megoldás függvény elégíti ki, és φ(h, f ) az (39.44) (f 1 f 1 )(f 2 f 2 ) max ((f 1, f 2 ) H) f 1 f 1 f 2 f 2 optimumfeladat egyértelm megoldásaként kapható meg példa. Tekintsük ismét a??. ábrán korábban bemutatott következményteret és tegyük fel, hogy (f 1, f 2 ) = (0, 1), azaz a legrosszabb értékeket tartalmazza komponenseiben. Ekkor a (39.44) feladat a következ alakú: f 1 (f 2 + 1) max f 2 f 1 f 2 3 2f 1 f f 1. Könnyen látható, hogy az optimális megoldás f 1 = f 2 = 1.

191 39.6. Axiomatikus módszerek 1775 Vegyük észre, hogy a (39.44) probléma egy távolságfügg módszer, amikor a geometriai távolságot maximalizáljuk az (f 1, f 2 ) ponttól. Az algoritmus a (39.44) optimumfeladat megoldását jelenti. A (vi) feltétel megköveteli, hogy a két döntéshozó azonosan legyen kezelve. Számos gyakorlati esetben azonban ez nem valós követelmény, ha valamelyik döntéshozó er sebb helyzetben van, mint a másik tétel. Az (i)-(v) követelményeknek végtelen sok megoldás függvény tesz eleget, de valamennyi megoldás függvényben található olyan 0 α 1, hogy a megoldás az (39.45) (f 1 f 1 ) α (f 2 f 2 ) 1 α max ((f 1, f 2 ) H) f 1 f 1 f 2 f 2 optimumfeladat egyértelm megoldásaként kapható meg. Vegyük észre, hogy az α = 1 2 esetben a (39.45) probléma a (39.44) feladatra redukálódik. Az algoritmus a (39.45) optimumfeladat megoldását jelenti. Számos szerz kritizálta Nash eredeti axiómáit, és az axiómarendszer bizonyos módosításai mellett újabb és újabb megoldási koncepciókat és módszereket vezettek be. A konkrét axiómák ismertetése nélkül magukat a módszereket ismertetjük az irodalomban legfontosabbnak tartott esetekben. A KalaiSmorodinsky-megoldás esetén el ször az ideális pontot határozzuk meg, amely koordinátái: f i = max{f i (f 1, f 2 ) H, (f 1, f 2 ) f }, majd az f -ból az ideális pontba vezet félegyenes H-val való utolsó közös pontját fogadjuk el, mint a megoldást. A ábra mutatja a módszert. Vegyük észre, hogy a módszer egy irányfügg módszer, ahol a félegyenes mutatja a növekedési irányt és f a választott kiindulópont. Az algoritmus a következ optimumfeladat megoldását igényli: t max feltéve, hogy f + t(f f ) H példa. Az el z példa esetén f = (0, 1) és f = (2, 1). A ábrán láthatjuk, hogy az f -ból f -ba vezet félegyenes utolsó H-beli pontja a félegyenes és az (1, 1) és (2, 1) pontokat összeköt szakasz metszéspontja.

192 Koniktushelyzetek kezelése ábra. KalaiSmorodinsky-megoldás ábra. A példa megoldása. A félegyenes egyenlete míg az összeköt szakasz egyenlete f 2 = f 1 1 így a metszéspont: f 1 = 4 3, f 2 = 1 3. f 2 = 2f 1 + 3, Az egyenl veszteség módszerénél feltesszük, hogy az ideális pontból kiindulva a két döntéshozó azonos sebességgel csökkenti a célfüggvényértékeit egészen addig, míg lehetséges megoldás nem adódik. Ez a koncepció ekvivalens a t min ((f 1 t, f 2 t) H) (39.46) optimumfeladat megoldásával. Jelölje t a minimális t értéket, ekkor az (f 1 t, f 2 t ) pont jelenti a koniktus megoldását. Az algoritmust a (39.46) optimumfeladat megoldása jelenti példa. Az el z példa esetében f = (2, 1), így ebb l a pontból kiindulva a 45 -os egyenes mentén haladva az els lehetséges megoldás ismét az f 1 = 4 3, f 2 = 1 3 pont. A monoton terület módszere esetében az (f 1, f 2 ) megoldást a következ képpen kapjuk. Az (f 1, f 2 ) és (f 1, f 2 ) pontokat összeköt lineáris

193 39. Megjegyzések a fejezethez ábra. A monoton terület módszere. szakasz a H halmazt két részre bontja, ha (f 1, f 2 ) egy Pareto-optimális megoldás. Ennek a koncepciónak az alkalmazása esetén megköveteljük, hogy a két terület azonos legyen. A ábra mutatja a koncepciót. A két terület a következ képpen adódik: f1 f 1 (g(t) f 2 )dt 1 2 (f 1 f 1 )(g(f 1 ) f 2 ) és 1 2 (f 1 f 1 )(g(f 1 ) f 2 ) + f 1 f 1 (g(t) f 2 )dt ahol feltesszük, hogy f 2 = g(f 1 ) írja le a Pareto-optimális megoldások görbéjét. Ily módon egy egyszer egyenletet kapunk az ismeretlen f 1 érték meghatározására. Az algoritmust a következ nemlineáris, egyváltozós egyenlet megoldása jelenti: f1 f1 (g(t) f 2 )dt (g(t) f2 )dt (f 1 f 1 )(g(f 1 ) f 2 ) = 0. f 1 f 1 Bármely közismert módszer (intervallum-felezés, húrmódszer, szel módszer, Newton módszer stb.) alkalmazható a feladat megoldására. Gyakorlatok Tegyük fel, hogy H = {(f 1, f 2 ) f 1, f 2 0, f 1 + 2f 2 4}. Legyen f 1 = f 2 = 0. Alkalmazzuk a (39.44) optimumfeladatot Az el z gyakorlatban tegyük fel, hogy a két döntéshozó nem azonosan fontos. α = 1 3, 1 α = 2 3. Oldjuk meg a (39.45) optimumfeladatot Alkalmazzuk a KalaiSmorodinsky-megoldást a gyakorlatra Alkalmazzuk az egyenl veszteség módszerét a gyakorlatra Alkalmazzuk a monoton terület módszerét a gyakorlatra. Feladatok

194 Koniktushelyzetek kezelése 39-1 Távolságfügg módszerek Bizonyítsuk be, hogy a távolságfügg módszerek a ϱ 1 távolsággal mindig Pareto-optimális megoldást szolgáltatnak. Igaz ugyanez, ha a ϱ távolságot alkalmazzuk? 39-2 irányfügg módszerek Mutassuk meg egy egyszer példával, hogy irányfügg módszerek olyan eredményt is adhatnak, melyek nem Pareto-optimálisak Több egyensúly A tétel feltételein kívül tegyük még fel, hogy az összes f i függvény szigorúan konkáv x i -ben. Adjunk meg olyan példát, amelyben több egyensúlypont is létezik Shapley-egyensúly Bizonyítsuk be, hogy a Shapley-értékek imputációt adnak és kielégítik a (39.35)(39.36) feltételeket Csoportos döntéshozatali táblázat Adjunk meg olyan csoportos döntéshozatali táblázatot, ahol a páronkénti összehasonlítás módszere nem elégíti ki a tranzitivitás követelményét. Azaz van olyan i, j, k alternatíva, amelyekre i j, j k, de k i Borda-mérték alkalmazása Konstruáljunk olyan feladatot, ahol a Borda-mérték alkalmazása azonosan jónak min síti az összes alternatívát KalaiSmorodinsky-megoldá Mutassuk meg, hogyha a KalaiSmorodinsky-megoldást alkalmazzuk nem konvex H esetére, akkor a megoldás nem feltétlenül Pareto-optimális Egyenl veszteség módszer Mutassuk meg, hogy nem konvex H esetén sem az egyenl veszteség, sem a monoton terület módszere nem garantál Pareto-optimális megoldást Pareto-optimalitás Bizonyítsuk be, hogy a (39.9) feladat megoldása pozitív α 1, α 2,..., α I értékek mellett mindig Pareto-optimális megoldást ad. Megjegyzések a fejezethez A többcélú programozás iránt érdekl d Olvasó további részleteket és módszereket találhat a témával kapcsolatban a [108] könyvben. Az egyensúlypontok módszerér l valamint a kooperatív játékok megoldási koncepcióiról és módszereir l b vebben a [44] monográában olvashatnak. A [115] monográa további módszereket és képleteket tartalmaz a csoportos döntéshozás

195 39. fejezet megjegyzései 1779 módszertanából. A Nasht l származó tétel részletesebben [83]-ben található meg. A tételben szerepl feltételek gyengítésével kapcsolatban [51]-ben olvashatnak. A KalaiSmorodinsky-megoldás, az egyenl veszteség-, valamint a monoton terület módszere részletesen rendre [60]-ben, [24]-ben és [2]-ben található meg. Megjegyezzük végül, hogy a [116] összefoglaló dolgozat tárgyalja ezeknek és újabb módszereknek az axiomatikus bevezetését és tulajdonságait. A fejezetben szerepl eredmények részletesebben megtalálhatók Molnár Sándor és Szidarovszky Ferenc [82] jegyzetében, valamint Szidarovszky és Domoszlai angol nyelv fejezetében [109].

196 40. A Szemantikus Web lekérdez nyelvei A Szemantikus Web lényege, hogy az Interneten fellelhet információkat a számítógépek is értelmezni tudják, ezáltal a Weben szétszórva tárolt adatok könnyebben összekapcsolhatóvá, hatékonyabban kereshet vé válnak. Az összekapcsolt adatokból következtetések útján új információk nyerhet k ki. A Szemantikus Web ehhez nyújt egy szabványosított adatmodellt és hozzá tartozó lekérdez nyelvet. Az RDF (Resource Description Framework) adatmodell lényege, hogy a rendelkezésünkre álló információt alany-állítmány-tárgy formában megfogalmazott állítások halmazaként adjuk meg. Az ilyen állítások felfoghatók irányított élekként is, amelyek az alannyal címkézett csúcsból vezetnek a tárggyal címkézett csúcsba, az állítmánynak megfelel élcímkével. Az RDF adatok lekérdezésére szolgáló SPARQL lekérdez nyelv ezért az adatokban való keresést gráfminta-illesztési feladatra vezeti vissza. Ahhoz, hogy a gépi feldolgozás kivitelezhet vé váljon, szükséges, hogy az azonos fogalmak ugyanazt jelentsék, ugyanaz az azonosító tartozzon hozzájuk a különböz adatbázisokban. Erre a problémára adnak megoldást a szókészletek és az ontológiák. A szókészletek tartalmazzák a fogalmakat azonosító IRI-k (Internationalized Resource Identier) megfeleltetését a valós világ fogalmaival, míg az ontológiák a szókészleteket, valamint a deniált fogalmak közötti kapcsolatokat, szabályokat, megszorításokat. Számos elméleti és kísérleti eredményeket tartalmazó adatbázis érhet el az Interneten különböz tudományterületekr l, például számítástudomány, biológia, kémia. A LOD (Linked Open Data) felh az ilyen publikus adathalmazokat kapcsolja össze egy nagy összefügg gy jteménnyé. A LOD felh olyan szemantikus formátumú (RDF-ként tárolt) adathalmazokat tartalmaz, melyek legalább ezer sorból állnak, és legalább ötven ponton kapcsolódnak más LOD felh beli adathalmazhoz. Ezek a megkötések lehet vé teszik az információkinyerést a különböz tudományterületeken felhalmozódott tudásbázisokból RDF reprezentáció Szemantikus adatok Tekintsünk három diszjunkt halmazt, a B-t (üres csúcsok, melyekhez nem tartozik IRI), az L-et (literálok), és az I-t (IRI-k), illetve a BLI, BI és

197 40.1. Szemantikus adatok 1781 LI rövidítést, amelyet a B, L és az I uniójának jelölésére használunk. A BLI rövidítést más néven RDF termnek is nevezzük. A megszokott konvenció szerint idéz jeleket használunk a literálok jelölésére (például: János, 25) és az _: prexet az üres csúcsokhoz. Egy (v 1, v 2, v 3 ) BI I BLI RDF hármas összekapcsolja a v 1 alanyt a v 2 tárggyal a v 3 állítmányon keresztül. Egy RDF adatbázis (más néven RDF dokumentum) ilyen hármasok véges halmaza SPARQL lekérdez nyelv Szintaxis Legyen V a BLI-beli különböz változók halmaza. A változókat egy vezet kérd jellel különböztetjük meg, például?x vagy?nev. Els ként a sz r feltételek absztrakt szintaxisát adjuk meg deníció. Legyen?X,?Y V és c, d LI, ekkor a sz r feltételeket rekurzívan a következ képp deniáljuk. A?X = c,?x =?Y, c = d, bound(?x), isiri(?x), isliteral(?x), valamint isblank(?x) atomi sz r feltételek. Ezt követ en, ha R 1, R 2 sz r feltételek, akkor R 1, R 1 R 2 és R 1 R 2 is sz r feltételek. A vars(r) jelöli az R sz r kifejezésben el forduló változók halmazát. A következ ekben bemutatjuk a kifejezések egy absztrakt szintaxisát deníció. Egy SPARQL kifejezés a következ ek szerint épül fel rekurzív módon: 1. a t IV IV LIV hármas egy kifejezés, 2. ha Q 1, Q 2 kifejezések, és R egy sz r feltétel, akkor Q 1 Filter R, Q 1 Union Q 2, Q 1 Opt Q 2, valamint Q 1 And Q 2 is kifejezés. A hivatalos W3C ajánlás négy különböz lekérdezéstípust ad meg, ezek a Select, Ask, Construct és a Describe lekérdezések. A továbbiakban csak a Select és Ask lekérdezésekkel foglalkozunk. A Select lekérdezések megadják a lekérdezés feltételének megfelel változóhelyettesítések halmazát, míg az Ask lekérdezések logikai lekérdezések, amelyek akkor és csak akkor térnek vissza igaz értékkel, ha létezik egy vagy több eredmény, egyébként hamis eredményt adnak vissza. A jelölések egyszer sítése érdekében eltekintünk a kapcsos zárójelek alkalmazásától a Select operátorban megjelen változók halmazánál, például Select?X,?Y (Q)-t írunk Select {?X,?Y } (Q) helyett.

198 A Szemantikus Web lekérdez nyelvei deníció. Legyen Q egy SPARQL kifejezés, és legyen S V változók véges halmaza. Egy SPARQL Select lekérdezés egy Select S (Q) formájú kifejezés. Egy SPARQL Ask lekérdezés egy Ask(Q) formájú kifejezés. Szemantika Kétféle alternatív szemantikát vezetünk be a SPARQL kiértékeléshez, a halmaz és a multihalmaz szemantikát. A halmaz alapú szemantikát a szakirodalom cikkeiben található elméleti vizsgálatokban használják, míg a multihalmaz szemantika a hivatalos W3C ajánlásokat követi. A halmaz alapú SPARQL szemantika. A SPARQL kiértékelési folyamat középpontjában az úgynevezett leképezés áll, amely kifejezi a változók dokumentumra való leképezését a kiértékelés során. Formálisan egy µ : V BLI leképezés egy parciális függvény, amely a V -beli változók részhalmazáról képez az RDF termekre. M-el jelöljük az összes leképezés univerzumát. A µ leképezés értelmezési tartománya a dom(µ), amely a V -nek egy olyan részhalmaza, amelyen µ értelmezett. Két leképezés, µ 1, µ 2 kompatibilisek, jelölés szerint µ 1 µ 2, ha megegyeznek az összes közös változón, azaz µ 1 (?X) = µ 2 (?X) minden?x dom(µ 1 ) dom(µ 2 ). Felüldeniáljuk a vars függvényt (amelyet korábban a sz r feltételeknél vezettünk be), és jelöljük ezután vars(t)-vel (ahol t egy RDF hármas) az összes, t hármasban szerepl változót. Továbbá, jelölje µ(t) az összes olyan hármast, amelyet úgy kapunk, hogy az összes t-beli?x dom(µ) vars(t) változót lecseréljük µ(?x)-re példa. Tekintsünk három leképezést, µ 1 := {?X a}, µ 2 := {?X b,?y c} és µ 3 := {?X a,?z d}. Könny látni, hogy dom(µ 1 ) = {?X}, dom(µ 2 ) = {?X,?Y } és dom(µ 3 ) = {?X,?Z}. Továbbá meggyelhet, hogy µ 1 µ 3, de µ 1 és µ 2, illetve µ 2 és µ 3 nem kompatibilisek, azaz µ 1 µ 2 és µ 2 µ 3. Legyen t 1 := (e,?x,?y ), ekkor var(t 1 ) = {?X,?Y }, és µ 2 (t 1 ) = (e, b, c). A következ ekben deniáljuk a sz r feltételek szemantikáját deníció. Adott µ leképezés, R, R 1, R 2 sz r feltételek,?x,?y változók, illetve c, d LI esetén µ kielégíti R-t, jelölés szerint µ = R akkor és csak akkor, ha a következ feltételek valamelyike teljesül R-re: bound(?x) formában van, és?x dom(µ). c = d formában van, és c megegyezik d-vel.?x = c formában van,?x dom(µ) és µ(?x) = c.?x =?Y formában van, {?X,?Y } dom(µ) és µ(?x) = µ(?y ) fennáll. R 1 formában van, és nem igaz, hogy µ = R 1. R 1 R 2 formában van, és µ = R 1 vagy µ = R 2.

199 40.1. Szemantikus adatok 1783 R 1 R 2 formában van, µ = R 1 és µ = R 2. isiri(?x), isliteral(?x) vagy isblank(?x) formában van, és az?x típusa ennek megfelel en IRI, literál vagy üres csúcs. Egy SPARQL kifejezés vagy lekérdezés D dokumentum feletti megoldása leképezések halmazával írható le, ahol minden egyes leképezés egy lehetséges választ reprezentál. A SPARQL lekérdezés szemantikájának deniálásához a leképezéshalmazok kompakt algebráját hívjuk segítségül deníció. Legyenek Ω, Ω l, Ω r leképezéshalmazok, R jelölje a sz r feltételt és S V legyen a változók véges halmaza. Deniáljuk az összekapcsolás ( ), unió ( ), különbség (\), baloldali küls összekapcsolás ( ), projekció (π) és szelekció (σ) algebrai operátorokat a következ képp: Ω l Ω r := {µ l µ r µ l Ω l, µ r Ω r : µ l µ r } Ω l Ω r := {µ µ Ω l vagy µ Ω r } Ω l \ Ω r := {µ l Ω l µ r Ω r : µ l µ r } Ω l Ω r := (Ω l Ω r ) (Ω l \ Ω r ) π S (Ω) := {µ 1 µ 2 : µ 1 µ 2 Ω dom(µ 1 ) S dom(µ 2 ) S = } σ R (Ω) := {µ Ω µ = R} A továbbiakban ezekre az algebrai operátorokra mint SPARQL halmazalgebrára hivatkozunk. A SPARQL Select és Ask lekérdezések kiértékelésére egy szemantikát vezetünk be, és deniáljuk a [.] D függvényt, amely átfordítja azt halmazalgebrává deníció. (SPARQL halmazszemantika). Legyen D egy RDF dokumentum, t egy hármas, Q, Q 1, Q 2 SPARQL kifejezések, R egy sz r feltétel és S V a változók halmaza. Ekkor: [t] D := {µ dom(µ) = vars(t) and µ(t) D} [Q 1 And Q 2 ] D := [Q 1 ] D [Q 2 ] D [Q 1 Opt Q 2 ] D := [Q 1 ] D [Q 2 ] D [Q 1 Union Q 2 ] D := [Q 1 ] D [Q 2 ] D [Q Filter R] D := σ R ([Q] D ) [Select S (Q)] D := π S ([Q] D ) [Ask(Q)] D := ( = [Q] D )

200 A Szemantikus Web lekérdez nyelvei példa. Tekintsük a következ SPARQL Select lekérdezést: Q 1 := Select?SZ,?E (((?SZ, kor,?k) Opt (?SZ, ,?e)) Filter (?K = 26 )) A lekérdezés kigy jti az összes 26 éves személyt (?SZ), és opcionálisan (amennyiben létezik) a hozzájuk tartozó címeket (?E). Tegyük fel továbbá, hogy az adatbázisunk a következ : D := {(SZ1, kor, 26 ), (SZ2, kor, 25 ), (SZ3, kor, 26 ), (SZ3, , mail@m.com )}. Könny belátni, hogy [Q 1 ] D = {{?SZ SZ1}, {?SZ SZ3,?E mail@m.com }}. Halmazszemantikáról a multihalmaz szemantikára. A továbbiakban áttekintjük a kapcsolódó multihalmaz szemantikát, amit úgy kapunk, hogy a leképezések halmaza helyett a leképezések multihalmazát vesszük. A multihalmaz szemantika így abban különbözik, hogy egy leképezés többször is el fordulhat a kiértékelés során. Formálisan, a multihalmaz szemantikát leképezések multihalmazával reprezentáljuk, amely mindegyik leképezéshez multiplicitást rendel deníció. Egy multihalmaz egy (Ω, m) páros, ahol az Ω egy leképezéshalmaz és m : M N 0 egy totális függvény, m(µ + ) 1 minden µ + Ω-ra és m(µ ) = 0 minden µ / Ω esetén. Legyen adott µ + Ω, ekkor az m(µ + ) a µ + multiplicitása Ω-ban, valamint azt mondjuk, hogy µ + m(µ + )-szor fordul el Ω-ban. A multihalmaz szemantikát könnyen formalizálhatjuk a denícióban leírt algebrai operátorok adaptálásával úgy, hogy multihalmazokkal dolgozunk, és gyelembe vesszük a halmaz elemeinek multiplicitását. Tekintsük példaként a következ unió operátort multihalmazok felett: (Ω l, m l ) (Ω r, m r ), melynek eredménye (Ω l Ω r, m), ahol m(µ) = m l (µ)+m r (µ) minden µ M- re. Ezt az algebrát SPARQL multihalmaz-algebrának nevezzük. A multihalmaz szemantika pontos deníciója közvetlenül megkapható a deníció els szabályának (t hármas esete) módosításával úgy, hogy multihalmazzal tér vissza halmaz helyett. A [.] + D függvényt használjuk azon leképezések multihalmazának jelölésére, amelyek során a SPARQL kifejezést vagy lekérdezést multihalmaz szemantikával értékeltük ki példa. Legyen Q := (?X, c, c) Union (c, c,?x), a dokumentum pedig D := {(c, c, c)}, valamint µ := {?X c}. Ekkor [Q] + D = ({µ}, m), ahol m(µ) := 2, és m(µ ) := 0 minden µ M \ {µ} esetén.

201 40.2. A SPARQL lekérdez nyelv bonyolultsági kérdései A SPARQL lekérdez nyelv bonyolultsági kérdései A következ alfejezetben a SPARQL különböz résznyelveihez tartozó kiértékelési problémák bonyolultságával foglalkozunk. Kiderül, hogy a kérdés gyakorlati szempontból hamar kezelhetetlenné, NP-teljessé válik. Az opcionalitást lehet vé tev Opt m velet bevezetése ráadásul tovább növeli a komplexitást általában PSPACE-teljessé téve a problémát. Az opcionalitás megjelenésének tehát megvan a maga ára, ráadásul a bevezetés mögött meghúzódó intuitív elképzelés sem minden esetben teljesül maradéktalanul. Azt várnánk ugyanis, hogy opcionális részkérdések alkalmazásával úgy szerezhetünk plusz információkat, hogy azokat az adatokat nem kell kihagynunk a megoldásból, ahol ez a többlet nem áll rendelkezésre. Az alfejezet második felében két szintaktikai megszorítás kerül bevezetésre, amelyek egyrészt polinom id ben ellen rizhet ek a lekérdezés méretében, másrészt biztosítják a fenti intuíció teljesülését. Az ily módon kapott ún. jól tervezett lekérdezések kiértékelési bonyolultsága szintén érdekes probléma, ráadásul az SQL lekérdezések optimalizációjánál alkalmazható egyszer átírási technikák megfelel i m ködnek ebben a környezetben is, míg általános esetben ezek nem bizonyulnak használhatónak. Amikor a kiértékelési kérdés bonyolultságáról beszélünk, formálisan a következ problémát szeretnénk megoldani: INPUT: D RDF gráf, P SPARQL lekérdezés és µ leképezés OUTPUT: µ [P ] D Azaz, adott D RDF gráf, P SPARQL lekérdezés és µ leképezés esetén arra vagyunk kíváncsiak, hogy a µ leképezés eleme-e a D fölött végrehajtott P lekérdezés eredményhalmazának. Vegyük észre, hogy itt maga a lekérdezés is eleme a bemenetnek, a probléma ezen változatára a lekérdez nyelv összetett kiértékelési bonyolultságaként szoktak hivatkozni, szemben a kiértékelés adatbonyolultságával, ahol a lekérdezés nem része a bemenetnek. Mindazonáltal a fejezetben egy adatbonyolultságra vonatkozó eredménnyel is találkozunk majd And és Filter m veletek Amikor az iménti kiértékelési bonyolultságra vonatkozó feladatban a P lekérdezés csupán And és Filter m veleteket tartalmaz, a probléma relatíve egyszer. El ször meg kell nézni, hogy a P -ben szerepl t hármasokra teljesüle, hogy ha a t-beli változók helyére behelyettesítjük azok µ által adott értékeit, akkor a D-ben szerepl RDF hármast kapunk-e. Ha valamelyik hármasra ez

202 A Szemantikus Web lekérdez nyelvei a feltétel nem áll fenn, akkor µ egész biztosan nincs benne a P lekérdezés D fölött vett eredményhalmazában. Ellenkez esetben P kifejezésfáján alulról felfelé haladva meg kell néznünk, hogy a változók µ szerint vett helyettesítései mellett a Filter sz rések feltételei teljesülnek-e. Ha igen, µ eleme az el bbi eredményhalmaznak, különben pedig nem. A következ tétel bizonyítható a fenti gondolatmenet formális leírásával, ami az elmondottak alapján már semmiféle nehézséget nem rejt magában: tétel. A csak And és Filter m veleteket tartalmazó SPARQL lekérdezések összetett kiértékelési bonyolultsága O( P D ), ahol a korábbi jelölések alkalmazásával P a SPARQL lekérdezést, D pedig azt az RDF adathalmazt jelöli, amely fölött P-t kiértékeljük And, Filter és Union m veletek Hasonlóan az ítéletlogika kielégíthet ségi problémájához, ahol a diszjunkció megjelenésének köszönhet en a feladat NP-teljessé válik, az Union m velet a SPARQL esetén is NP-teljessé teszi az összetett kiértékelési kérdést tétel. Ha a SPARQL lekérdezésekben csak az And és Union m veleteket engedjük meg, akkor az összetett kiértékelés probléma NP-teljessé válik. Bizonyítás. Csak az NP-nehézséget bizonyítjuk. A kérdésünket a halmazlefedési feladatra vezetjük vissza, amely közismerten NP-teljes. Itt adott U = {u 1,..., u n } alaphalmaz, S 1,..., S k U feletti részhalmazok és l pozitív egész esetén arra vagyunk kíváncsiak, ki lehet-e választani legfeljebb l darabot S 1,..., S k halmazok közül úgy, hogy ezek uniója U-val legyen azonos. A visszavezetéshez a D = {(c, c, c)} egyetlen RDF hármasból álló gráfot használjuk. Az S i = {u 1,..., u m } halmazt a P Si := (c, c,?u 1 ) And... And ((c, c,?u m )) lekérdezés reprezentálja. P Si D fölött nyilvánvalóan azt a leképezést eredményezi, amelyik mindegyik?u j változóhoz a c-t rendeli (1 j m). Az S i részhalmazok S halmazát, S = {S 1,..., S k }, a P s := P S1 Union... Union P Sk lekérdezés szimulálja. Ennek D fölött vett eredményébe értelemszer en azok a leképezések tartoznak, amelyek valamelyik P Si D feletti eredményhalmazába

203 40.2. A SPARQL lekérdez nyelv bonyolultsági kérdései 1787 beletartoznak. Mindennek ismeretében, ha megvizsgáljuk a P = P S And... And P S lekérdezést, ahol P S pontosan l alkalommal jelenik meg, akkor könnyen látható, hogy fenti halmazlefedési feladat akkor és csak akkor ad igaz eredményt, ha a µ := {?U 1 c,...,?u n c, } leképezés eleme a P D fölött vett kiértékelésének. Annak bizonyítását, hogy a kizárólag And és Union m veleteket tartalmazó SPARQL lekérdezések esetén az összetett kiértékelési bonyolultság NPben van, feladatként adjuk fel, hasonlóan az alábbi állítások bizonyításához tétel. (i) A kizárólag Union és Filter m veleteket tartalmazó SPARQL lekérdezések esetén az összetett kiértékelési probléma polinom id ben megoldható. (ii) Emellett az And, Union és Filter m veletek estén az iménti probléma NP-teljes marad, azaz a Filter m velet bevezetése nem növeli már a bonyolultságot. Bizonyítás. Megtalálható a [97] cikkben Az Opt m velet Intuitíve, adott D RDF adathalmaz P := (P 1 Opt P 2 ) lekérdezés esetén egy µ leképezés akkor és csak akkor tartozik a P D fölött vett eredményhalmazába, (i) ha µ a P 1 And P 2 D fölött vett eredményhalmazának eleme, jelöléssel µ [P 1 And P 2 ] D, vagy (ii) ha µ eleme a P 1 D fölötti eredményhalmazának, µ [P 1 ] D, ugyanakkor nem kompatibilis egyetlen olyan µ leképezéssel sem, amely P 2 D fölött vett eredményhalmazához tartozik, µ [P 2 ] D. A témakörben járatosak azonnal érzékelhetik, hogy a deníció a kvantorok alternálásának lehet ségét rejti magában, hiszen az (i) feltétel tulajdonképpen egy egzisztenciális kvantort tartalmaz, míg a (ii) feltétel egy univerzálisat. A változók alternálásának lehet sége pedig azért érdekes, mert a x 1 x 2... Q n x n φ zárt formula igazságértékének eldöntése PSPACE-teljes feladat, ahol φ olyan ítéletlogikai formula, melyben csak az x 1,... x n logikai változók fordulnak el, emellett Q n az egzisztenciális kvantort jelöli, ha n páratlan, és az univerzális kvantort különben. Így az a sejtésünk támadhat, hogy az Opt m velet bevezetése tovább növeli a kiértékelési feladat bonyolultságát és PSPACE nehézzé teszi. A [97] cikkben bebizonyították a feltételezés helyességét, pontosabban a következ lemmát: lemma. Azon SPARQL lekérdezések esetében, melyek kizárólag az Opt m veletet tartalmazzák, az összetett kiértékelési feladat bonyolultsága PSPACE-nehéz.

204 A Szemantikus Web lekérdez nyelvei Eval(µ: lekérdezés, P SPARQL lekérdezés, D RDF gráf) case: P a t hármas: if a µ értelmezési tartománya a t-beli változók halmaza és µ(t) D-nek eleme then return true return f alse P P 1 Filter R alakú: if Eval(µ, P 1, D)= true és µ eleget tesz R feltételeinek then return true return f alse P P 1 Union R alakú: if Eval(µ, P 1, D)= true vagy Eval(µ, P 2, D)= true then return true return f alse P P 1 And R alakú: for each µ 1, µ 2 leképezésre, ahol µ i P i változóihoz D értékeit rendeli hozzá (i = 1, 2) if Eval(µ 1, P 1, D)= true és Eval(µ 2, P 2, D)= true és µ = µ 1 µ 2 then return true return f alse P P 1 Opt R alakú: if Eval(µ, P 1 And P 2, D)= true then return true if Eval(µ, P 1 D)= true then for each µ leképezésre, amely P 2 változóihoz D elemeit rendeli if Eval(µ, P 2 D)= true és µ kompatibilis µ -vel then return false return true return f alse ábra. Az And, Union, Opt és Filter m veleteket tartalmazó SPARQL lekérdezéseket kiértékel algoritmus. A másik oldalról viszont a PSPACE-beliség, azaz annak megmutatása, hogy az el z lemmában szerepl lekérdezések kiértékelése polinom tárat használó Turing-géppel megoldható, már-már triviális. S t, ennél er sebb állítás is bizonyítható lemma. Az And, Union, Opt és Filter m veleteket tartalmazó SPARQL lekérdezések összetett kiértékelési feladata polinom tárban megoldható.

205 40.2. A SPARQL lekérdez nyelv bonyolultsági kérdései 1789 Bizonyítás. Könny belátni hiszen csak a m veletek denícióit kell alkalmazni a megfelel részeknél, hogy a ábrán szerepl algoritmus valóban a kiértékelési problémát válaszolja meg azon P SPARQL lekérdezések esetében, melyek And, Union, Opt és Filter m veleteket tartalmazhatnak. Más szavakkal eldönti, hogy a további bemenetként adott D RDF gráf és µ leképezés esetén µ [P ] D teljesül-e. Emellett, mivel P változóinak halmaza O(log P ), és D O(log D ) nagyságú tárban már elfér, egy olyan leképezés, amely P változóihoz D elemeit rendeli, eltárolható O( P log P log D ) nagyságú helyen, hiszen egy változó és a neki megfelel érték elfér O(log P log D ) nagyságú tárterületen, az ilyen párosok száma pedig P változóinak darabszámával egyezik meg. Így az Eval algoritmus egyszeri meghívásának eredménye polinom méret tárhelyen biztosan kiszámítható. Az viszont ismételten nyilvánvalóan igaz, hogy az Eval algoritmus legfeljebb P alkalommal hívhatja meg önmagát. Összességében tehát a teljes algoritmus eredménye polinom tárhelyen kiszámítható következmény. Az And, Union, Opt és Filter m veleteket tartalmazó SPARQL lekérdezések kiértékelési feladatának adatbonyolultsága LOG-SPACE-beli. Bizonyítás. Emlékezzünk vissza, hogy a kiértékelési feladat esetén a kiértékelend SPARQL lekérdezés méretét konstansnak tekintjük. A lemma bizonyításánál beláttuk, hogy P, D, µ bemenetekkel az Eval algoritmus O( P 2 log( P ) log( D )) tárhelyen megvalósítható, ahol P egy SPARQL lekérdezés And, Union, Opt és Filter m veletekkel, D egy RDF gráfot, míg µ egy leképezést jelöl. Ha P méretét konstansnak vesszük, az iménti képlet szerint az algoritmus O(log( D )) helyen végrehajtható. A és a lemmákból pedig egyszer en adódik a következ tétel tétel. Bármely olyan SPARQL nyelvcsalád esetében, melynél az Opt m velet mellett az And, Union, Filter m veletek közül néhány használata megengedett, az összetett kiértékelési probléma PSPACE-teljes. Bizonyítás. Megtalálható a [97] cikkben Az unió-normálforma A P 1 és P 2 SPARQL lekérdezéseket akkor nevezzük ekvivalensnek, ha minden D RDF gráf és µ leképezés mellett µ [P 1 ] D akkor és csak akkor teljesül, ha µ [P 2 ] D is teljesül. Nem nehéz belátni, a részletek leírása viszont hosszadalmas, hogy minden And, Filter, Union, Opt m veleteket használó SPARQL lekérdezés átalakítható olyan lekérdezéssé, ami olyan

206 A Szemantikus Web lekérdez nyelvei SPARQL lekérdezések uniójából áll, melyekben már nem szerepel a Union m velet. Formálisan: tétel. Legyen P tetsz leges SPARQL lekérdezés, amely And, Filter, Union, Opt m veleteket tartalmazhat. Ekkor létezik P-vel ekvivalens P = P 1 Union... Union P k lekérdezés, ahol P i olyan SPARQL lekérdezés, melyben már nem szerepel a Union m velet (1 i k). P -t P unió normálformájának nevezzük. Bizonyítás. Megtalálható a [97] cikkben tétel. Ha egy And, Union és Filter m veleteket tartalmazó P lekérdezés unió normálformában van, azaz unió normálformája megegyezik P-vel, akkor az összetett kiértékelési feladat O( P D ) id ben megoldható. Bizonyítás. Az állítás a tétel egyszer következménye. A tétel azt sugallja, hogy az unió normálforma akár exponenciális méret vé is duzzadhat az eredeti mérethez képest, hiszen a tétel értelmében az összetett kiértékelési probléma az And, Union és Filter m - veleteket tartalmazó SPARQL lekérdezéseknél általános esetben NP-teljes, míg unió normálformájú lekérdezés esetén polinom id ben megválaszolható a lekérdezés méretében Jól tervezett SPARQL lekérdezések Az Opt (optional) m velet segítségével a SPARQL nyelv megalkotói azt a lehet séget akarták megteremteni, hogy ha egy információ elérhet, kerüljön bele a végeredménybe, ugyanakkor annak hiánya ne jelentse azon adatok elhagyását, ahol nem rendelkezünk az iménti többlet információval. Ez az intuíció azonban bizonyos, speciális lekérdezések esetén nem teljesül példa. Vegyük ugyanis a következ példát: P = ((?X, cím, Tüskevár) Opt ((?Y, cím, Vuk) Opt (?X, kiadó,?z))), ahol D egy könyvek adatait tartalmazó RDF gráf (ebben a szakaszban a literálok a jobb olvashatóság kedvéért nincsenek idéz jelek közé téve): (K 1, cím, Harmonia Caelestis), (K 4, kiadó, Európa) (K 2, cím, Tüskevár), (K 1, szerz, Esterházy Péter) (K 3, cím, Bádogdob), (K 4, szerz, Bodon Ádám) (K 4, cím, Sinistra körzet), (K 3, ár, 3500) (K 2, kiadó, Móra), (K 4, ár, 2600)

207 40.2. A SPARQL lekérdez nyelv bonyolultsági kérdései 1791 Itt [P ] D = {(?X K 2 )}, annak ellenére, hogy a K 2 azonosítójú könyv esetén ismerjük a kiadót is. A (?X, kiadó,?z) opcionális rész azonban a (?Y, cím, Vuk) hármashoz tartozik, aminek viszont üres halmaz az eredménye a D fölött, ily módon az ((?Y, cím, Vuk) Opt (?X, kiadó,?z)) részkérdés eredménye is üres halmaz. Más szavakkal: a plusz információt szolgáltató kérdésrészlet (?X, kiadó,?z) nem a (?X, cím, Tüskevár) hármas után következett közvetlen, aminek eredményéhez a további adatokat szolgáltathatta volna, s így a közbeékel d hármas el tudta rontani a várt eredményt. A példa mögött egy általánosabb jelenség húzódik meg, a problémát az okozhatja, ha a P lekérdezés egy P = (P 1 Opt P 2 ) részkérdésénél az?x változó a P 2 -ben és P -n kívül is el fordul, P 1 -ben azonban nem. A jól tervezettséget az ilyen mintázatok lehet ségeinek megszüntetése jelenti majd. Ám emellett egy másik hibalehet ségre is oda kell gyelni. Egy Q SPARQL lekérdezést biztonságosnak nevezünk, ha minden (P Filter R) részkérdésére teljesül, hogy az R feltételben csak olyan változók fordulnak el, amelyek P -ben is megjelennek deníció. Egy And, Opt, Filter m veteket tartalmazó, azaz unió mentes P SPARQL lekérdezés jól tervezett, ha (i) P biztonságos, (ii) P minden P = (P 1 Opt P 2 ) részkérdése esetében, ha egy változó szerepel P 2 -ben és P -n kívül is, akkor P 1 -ben is el kell fordulnia. Könnyen belátható, hogy a jól tervezettség ellen rzése a lekérdezés méretéhez képest polinom id ben megoldható. A következ meggyelés szintén a jól tervezettség, mint tulajdonság bevezetésének jogosságát indokolja. Intuitíve ugyanis, ha a P SPARQL lekérdezés a P lekérdezésb l néhány opcionális részkérdés törlésével keletkezik, akkor azt várnánk, hogy a P tetsz leges D RDF gráf fölötti vett eredménye nem tartalmaz több adatot, mint a P végeredménye ugyanezen D RDF gráf fölött. Másképpen fogalmazva az opcionális részek csak b víthetik a megoldást. Ez azonban általában nem teljesül. Vegyük például a következ egyszer adatgráfot: és a D := {(1, a, 1), (2, a, 2), (3, a, 3)} P := ((?X, a, 1) Opt ((?Y, a, 2) Opt (?X, a, 3))) lekérdezést. Itt a P D fölötti kiértékelése egyetlen leképezést tartalmaz: [P ] D = {(?X 1)}. Ugyanakkor, a P = ((?X, a, 1) Opt ((?Y, a, 2)) lekérdezés esetén, melyet az (?X, a, 3) opcionális rész törlésével kapunk P - b l, [P ] D = {(?X 1,?Y 2)},

208 A Szemantikus Web lekérdez nyelvei azaz ha P -höz hozzávesszük az imént kidobott opcionális részt, információt veszítünk, ahelyett, hogy n ne az ismeretünk. A jól tervezett lekérdezések esetében az iménti anomáliával egészen biztosan nem találkozhatunk. Formálisan: azt mondjuk, hogy P lekérdezés P SPARQL lekérdezés redukáltja, ha P -b l megkaphatjuk a (P 1 Opt P 2 ) részkérdés P 1 -gyel történ helyettesítésével. Például a P = t 1 And (t 2 Opt t 3 ) lekérdezés a P = t 1 And (t 2 Opt (t 3 Opt t 4 )) lekérdezés redukáltja. A reláció reexív, tranzitív lezártját jelöli. Ennek értelmében például P (t 1 And t 2 ) teljesül tétel. Legyen P jól tervezett SPARQL lekérdezés. Ekkor tetsz leges P SPARQL lekérdezésre, ahol P P fennáll, [P ] D [P ] D is teljesül, azaz az opcionális részek hozzáadása csak b vítheti az eredményt. Bizonyítás. Megtalálható a [97] cikkben. A jól tervezett SPARQL lekérdezések kiértékelési problémájának bonyolultságáról a következ mondható el tétel. (i) Az And és Opt m veleteket tartalmazó, jól tervezett SPARQL lekérdezések összetett kiértékelési problémája conp-teljes. (ii) A Filter m velet alkalmazási lehet sége nem növeli a bonyolultságot következmény. A P = P 1 Union... Union P k unió formában lév SPARQL lekérdezések esetében, ahol minden P i jól tervezett (1 i k), az összetett kiértékelési probléma conp-teljes. Más szavakkal, a jól tervezettség csökkenti a kiértékelési probléma bonyolultságát. A tulajdonság további el nye, hogy nagymérték optimalizációt is lehet vé tesz. Az SQL lekérdezések esetében tudniillik jelent s id t lehet megtakarítani, ha a sz r feltételeket minél hamarabb végrehajtjuk. Például az Autó(id, márka, ár) és Tulaj(id, autó_id, név, kor) táblák esetében a SELECT név FROM Autó a, Tulaj WHERE a.id = autó_id AND ár > ;

209 40.2. A SPARQL lekérdez nyelv bonyolultsági kérdései 1793 lekérdezést, ami a 2 millió forintnál drágább kocsik tulajdonosának nevét adja meg, úgy érdemes végrehajtani, hogy el ször az Autó táblából elhagyjuk a 2 milliónál olcsóbb vagy pontosan ennyibe kerül autókat és csupán a maradékot kapcsoljuk össze a Tulaj táblával ahelyett, hogy rögtön az Autó és Tulaj tábla összekapcsolásával kezdenénk. Hasonló optimalizálási lehet ség a jól tervezett SPARQL lekérdezések esetében is adódik tétel. Legyenek P 1, P 2 és P 3 SPARQL lekérdezések és R egy beépített feltétel. Tekintsük az alábbi átírási szabályokat: 1. ((P 1 Opt P 2 ) Filter R) ((P 1 Filter R) OptP 2 ), 2. ((P 1 And (P 2 Opt P 3 ) ((P 1 And P 2 ) OptP 3 ), 3. ((P 1 Opt P 2 ) And P 3 ) ((P 1 And P 3 ) OptP 2 ). Ekkor P jól tervezett SPARQL lekérdezések esetében, ha P -t az iménti szabályok alkalmazásával kapjuk P-b l, akkor P a P-vel ekvivalens SPARQL lekérdezés, ráadásul jól tervezett. A bizonyítás ismételten csak nem nehéz, de hosszadalmas. Kivéve a 3. szabály esetében, hiszen az a 2. szabályból megkapható az And m velet kommutativitásának felhasználásával. Az átírási szabályok hasznát könny belátni. A (P 1 Opt P 2 ) tetsz leges D RDF gráf fölötti kiértékelésekor a P 1 D fölötti kiértékelésekor kapott leképezések száma biztosan nem csökken. Ugyanakkor az And és Filter m veletek alkalmazása csökkentheti az eredmény méretét. Ebb l az következik, hogy ezeket a m veleteket érdemes minél hamarabb végrehajtani, a tétel szabályai pedig pontosan ezt teszik lehet vé. Érdemes észrevenni, hogy az iménti szabályok általános esetben ismételten csak nem teljesülnek. Tekintsük ugyanis újfent a RDF gráfot és a D := {(1, a, 1), (2, a, 2), (3, a, 3)} P := ((?X, a, 1) And ((?Y, a, 2) Opt (?X, a, 3))) lekérdezést. Itt P a D fölött az üres halmazt eredményezi. A 2. szabály alkalmazásával kapott P := (((?X, a, 1) And (?Y, a, 2)) Opt (?X, a, 3))

210 A Szemantikus Web lekérdez nyelvei lekérdezés esetén az eredmény a (?X 1,?Y 2) leképezést tartalmazó halmaz, ami nyilvánvalóan különbözik az üres halmaztól. Gyakorlatok Lássuk be a tétel (i) állítását, miszerint a Union és Filter m veleteket tartalmazó SPARQL lekérdezéseknél az összetett kiértékelési probléma polinom id ben megoldható Adjunk meg egy olyan algoritmust, ami a bemenetként kapott And, Union, Opt, Filter m veleteket tartalmazó tetsz leges SPARQL lekérdezést unió-normálformára hozza Ellen rizzük, hogy a tétel állításai multihalmaz szemantika mellett teljesülnek-e Adjunk meg egy RDF gráfot és két olyan SPARQL lekérdezést, amelyekre rendre nem teljesülnek a tétel (1) és (3) átírási szabályai A SPARQL optimalizálása A SPARQL az adatbázisok világában jól ismert SQL-hez hasonlóan deklaratív nyelv: a lekérdezések (adott szemantika mellett) pontosan meghatározzák, hogy az adott dokumentumon kiértékelve milyen eredményt kell kapnunk. A kiértékelés módja, a végrehajtás lépései azonban nincsenek a lekérdezésben meghatározva: ezek el állítása az adatbázismotor feladata. Egy lekérdezést általában többféleképpen is meg lehet fogalmazni (a jelentés változtatása nélkül), és minden megfogalmazáshoz is többféle kiértékelés tartozhat, akár nagyságrendben eltér hatékonysággal. Az optimalizálás feladata, hogy a bemenetként kapott lekérdezéshez találjon egy olyan átfogalmazást és/vagy kiértékelési stratégiát, amellyel a feladat minél hatékonyabban oldható meg. A lekérdezés-optimalizálás nem egzakt feladat, nem cél minden esetben a létez legjobb alternatíva megtalálása, hiszen ez bizonyos esetekben költségesebb is lehet, mint maga a lekérdezés végrehajtása. A jelen alfejezetben tárgyalt eredmények a [103] cikkb l származnak. Ennek keretében az optimalizálás két fajtájával foglalkozunk: a szakasz az algebrai optimalizálásról szól, melynek során a halmaz (vagy multihalmaz) szemantika algebrai operátorainak bizonyos tulajdonságait használjuk ki arra, hogy az operátorok átrendezésével, cseréjével, vagy elhagyásával hatékonyabban kiértékelhet kifejezést kapjunk. A szakasz pedig a szemantikus optimalizálásról szól, ahol az adathalmazra (dokumentumra) vonatkozó többlet ismeretet használunk ki a végrehajtás költségeinek javítására.

211 40.3. A SPARQL optimalizálása Algebrai optimalizálás Az algebrai optimalizálás során egy SPARQL algebrai kifejezéshez keresünk olyan kifejezéseket, amelyeket kiértékelve az eredetivel egyez eredményt kapunk, azért, hogy ezek közül kiválaszthassuk azt, amelyik várhatóan a leggyorsabban végrehajtható deníció. Legyen A 1 és A 2 két halmaz (vagy multihalmaz) algebrai kifejezés. Azt mondjuk, hogy A 1 és A 2 kifejezések ekvivalensek (jelölés: A 1 A 2 ), ha minden D dokumentumon ugyanazt az eredményt adják. Az optimalizálandó kifejezéssel ekvivalens kifejezéseket ún. átírási szabályok egymás utáni alkalmazásával keressük. Egy átírási szabály két kifejezés (a szabály bal és jobb oldala) közötti ekvivalenciát mond ki. Mivel az ekvivalencia szimmetrikus, a szabályok bal és jobb oldala felcserélhet, azaz mindkét irányban alkalmazhatóak. A szabályokban szerepl kifejezések általában egyszer felépítés ek, így elég általánosak ahhoz, hogy sok helyzetben alkalmazhatóak legyenek. A halmaz- és multihalmaz szemantika esetén más-más átírási szabályok léteznek. A továbbiakban a halmazszemantika átírási szabályairól beszélünk, azonban a kés bbiekben látni fogjuk, hogy a legtöbb szabály (esetleg kis módosítással) átvihet a multihalmaz szemantikára is. A szabályok tárgyalása el tt szükséges még két függvény bevezetése, amelyek a kifejezésekben szerepl változókat osztályozzák statikusan aszerint, hogy tetsz leges dokumentumon vett eredményben kapnak-e minden esetben értéket, vagy sem. Ezt statikusan csak közelít leg vizsgáljuk: bevezetünk egy alsó- és egy fels korlátot a mindig kötött változók halmazára. Az alsó korlátot a cv ars (certain variables) függvény adja deníció. Legyen A egy SPARQL halmazalgebrai kifejezés. Ekkor a cv ars(a) értéke az alábbi rekurzív módon számítható ki: Ha A = [t] D, akkor cv ars(a) = vars(t). Ha A = A 1 A 2, akkor cv ars(a) = cv ars(a 1 ) cv ars(a 2 ). Ha A = A 1 A 2, akkor cv ars(a) = cv ars(a 1 ) cv ars(a 2 ). Ha A = A 1 \ A 2, akkor cv ars(a) = cv ars(a 1 ). Ha A = π S (A 1 ), akkor cv ars(a) = cv ars(a 1 ) S. Ha A = σ R (A 1 ), akkor cv ars(a) = cv ars(a 1 ). Megjegyzés: a fenti denícióban az A = A 1 A 2 eset nincs követlenül feltüntetve, ugyanis ez a deníció alapján átírható az,, és \ operátorokat használó kifejezéssé.

212 A Szemantikus Web lekérdez nyelvei A cv ars(a) alsó korlát jellegét az adja, hogy az ebben szerepl változók az eredmény minden leképezésében biztosan kötöttek. Ezt fogalmazza meg az alábbi állítás állítás. Legyen A egy halmazalgebrai kifejezés és jelölje Ω A a leképezések halmazát, amiket az A kifejezés D dokumentumon való kiértékelésével kaptunk. Ekkor ha?x cv ars(a), akkor µ Ω A :?X dom(µ). Hasonlóan bevezethetünk a kötött változókra egy fels korlátot is, ezt a pv ars (possible variables) függvény adja meg deníció. Legyen A egy SPARQL halmazalgebrai kifejezés. Ekkor a pv ars(a) értéke az alábbi rekurzív módon számítható ki: Ha A = [t] D, akkor pv ars(a) = vars(t). Ha A = A 1 A 2, akkor pv ars(a) = pv ars(a 1 ) pv ars(a 2 ). Ha A = A 1 A 2, akkor pv ars(a) = pv ars(a 1 ) pv ars(a 2 ). Ha A = A 1 \ A 2, akkor pv ars(a) = pv ars(a 1 ). Ha A = π S (A 1 ), akkor pv ars(a) = pv ars(a 1 ) S. Ha A = σ R (A 1 ), akkor pv ars(a) = pv ars(a 1 ). Megjegyzés: a pv ars deníciója nagyon hasonló a cv ars deníciójához, az egyetlen különbség az, hogy A 1 A 2 esetnél a jobb oldalon helyett szerepel. Hasonlóan az el bbiekhez, itt is egy állítással igazoljuk a fels korlát jelleget állítás. Legyen A egy halmazalgebrai kifejezés, és jelölje Ω A a leképezések halmazát, amelyeket az A kifejezés D dokumentumon való kiértékelésével kaptunk. Ekkor, ha µ Ω A :?X dom(µ), akkor?x pv ars(a). A szükséges fogalmak ismertetése után most nézzük az átírási szabályokat, a legegyszer bbekkel kezdve tétel. Legyenek A, A 1, A 2 és A 3 tetsz leges halmazalgebrai kifejezések. Ekkor az alábbi átírási ekvivalencia szabályok érvényesek. A A A (40.1) A \ A (40.2)

213 40.3. A SPARQL optimalizálása 1797 (A 1 A 2 ) A 3 A 1 (A 2 A 3 ) (40.3) (A 1 A 2 ) A 3 A 1 (A 2 A 3 ) (40.4) A 1 A 2 A 2 A 1 (40.5) A 1 A 2 A 2 A 1 (40.6) (A 1 A 2 ) A 3 (A 1 A 3 ) (A 2 A 3 ) (40.7) A 1 (A 2 A 3 ) (A 1 A 2 ) (A 1 A 3 ) (40.8) (A 1 A 2 ) \ A 3 (A 1 \ A 3 ) (A 2 \ A 3 ) (40.9) (A 1 A 2 ) A 3 (A 1 A 3 ) (A 2 A 3 ) (40.10) (A 1 \ A 2 ) \ A 3 (A 1 \ A 3 ) \ A 2 (40.11) (A 1 \ A 2 ) \ A 3 A 1 \ (A 2 A 3 ) (40.12) A 1 \ A 2 A 1 \ (A 1 A 2 ) (40.13) Bizonyítás. Megtalálható a [103] cikkben. A fenti ekvivalenciák tekinthet ek a SPARQL halmazalgebra alaptörvényeinek is, mivel az operátorok alapvet tulajdonságait (kommutativitás, asszociativitás, disztributivitás) fejezik ki. A következ csoportba a projekció átírásával kapcsolatos szabályok tartoznak tétel. Legyenek A, A 1 és A 2 tetsz leges halmazalgebra kifejezések, S, S 1, S 2 V változók halmazai, és legyen R egy sz r feltétel. Továbbá legyen S = pv ars(a 1 ) pv ars(a 2 ), valamint S = S S. Ekkor az alábbi átírási szabályok teljesülnek. π pv ars(a) S (A) A (40.14) π S (A) π S pv ars(a) (A) (40.15) π S (σ R (A)) π S (σ R (π S vars(r) (A))) (40.16) π S1 (π S2 (A)) π S1 S 2 (A) (40.17) π S (A 1 A 2 ) π S (A 1 ) π S (A 2 ) (40.18) π S (A 1 A 2 ) π S (π S (A 1 ) π S (A 2 )) (40.19) π S (A 1 \ A 2 ) π S (π S (A 1 ) \ π S (A 2 )) (40.20) π S (A 1 A 2 ) π S (π S (A 1 ) π S (A 2 )) (40.21)

214 A Szemantikus Web lekérdez nyelvei Bizonyítás. Megtalálható a [103] cikkben. A projekcióra vonatkozó szabályok jelent ségét az adja, hogy egy jó adatbázismotor az optimalizálás során feltehet en olyan kifejezéseket részesítene el nyben, amelyekben a projekció minél hamarabb történik meg, így már a végrehajtás korai szakaszában csökken az adatmennyiség. A fenti szabályok szemléletes jelentése a következ. A és a szabály azt fejezi ki, hogy a projekció szempontjából érdekes változók a pv ars(a) halmazból kerülnek ki. Az el bbi szabály szerint lényegében nem projektáltunk semmit, ha a projekcióban minden pv ars(a)-beli változót megtartunk, míg az utóbbi szabály szerint a projekcióból a pv ars(a)-n kívül es változókat el is hagyhatjuk. A szabály szerint sz rések esetén beiktathatunk egy el zetes projekciót, ha a sz rés után amúgy is ez következne, mindössze arra kell gyelnünk, hogy a sz r feltétel változóit meghagyjuk. A szabály az ismételt projekció átírását teszi lehet vé egyetlen projekcióvá. A szabályok a projekció és a bináris operátorok kapcsolatáról szólnak. Ezek alapján a projekciók bevihet k az operandusokra egy esetleg b vebb változóhalmazra való vetítésként. A változóhalmaz b vítésére azért van szükség, hogy a bináris m veletek értelmesek maradjanak, azaz ne tüntessük el olyan változók értékeit, amelyek ezáltal megváltoztatnák az összekapcsolás, vagy kivonás eredményét. A sz rések átírását a következ csoportba tartozó szabályok teszik lehet vé tétel. Legyenek A, A 1 és A 2 tetsz leges halmazalgebra kifejezések, R, R 1, R 2 pedig sz r feltételek. Ekkor az alábbi átírási szabályok teljesülnek. σ R1 R 2 (A) σ R1 (σ R2 (A)) (40.22) σ R1 R 2 (A) σ R1 (A) σ R2 (A) (40.23) σ R1 (σ R2 (A)) σ R2 (σ R1 (A)) (40.24) σ bound(?x) (A) A, ha?x cv ars(a) (40.25) σ bound(?x) (A), ha?x / pv ars(a) (40.26) σ bound(?x) (A), ha?x cv ars(a) (40.27) σ bound(?x) (A) A, ha?x / pv ars(a) (40.28) σ R (A 1 A 2 ) σ R (A 1 ) σ R (A 2 ) (40.29) σ R (A 1 \ A 2 ) σ R (A 1 ) \ A 2 (40.30) Ha minden?x vars(r)-re:?x cv ars(a 1 )?X / pv ars(a 2 ), akkor:

215 40.3. A SPARQL optimalizálása 1799 σ R (A 1 A 2 ) σ R (A 1 ) A 2 (40.31) σ R (A 1 A 2 ) σ R (A 1 ) A 2 (40.32) Bizonyítás. Megtalálható a [103] cikkben. A sz résekre vonatkozó szabályok motivációja hasonló a projekciónál említetthez: ha a sz rések felbontásával és átrendezésével elérhetjük, hogy azok a kifejezésben beljebbre kerüljenek, akkor már a végrehajtás korai fázisában csökken az adatmennyiség, amivel a továbbiakban dolgoznunk kell. A szabályok a sz r feltételek felbontását és átrendezését teszik lehet vé. A szabályok a változók kötöttségére vonatkozó sz rések elhagyhatóságát fogalmazzák meg azokban az esetekben, amikor a kérdéses változóról statikusan is eldönthetjük a kötöttséget. A szabályok a sz rés és a bináris operátorok kapcsolatát mutatják meg. Ezek szerint a sz rés is bevihet az operandusokra, csupán az összekapcsolásoknál kell ügyelni arra, hogy a sz r feltétel értelmes maradjon csak az egyik operandusra értve is, és ez ne befolyásolja az összekapcsolás eredményét. Végezetül nézzünk két olyan szabályt, amely bizonyos atomi sz rések elhagyhatóságát mutatja meg. Ezek lényege, hogy a sz rés által megkövetelt egyenl ség teljesülését a sz rés elhagyása után úgy fejezzük ki, hogy az egyenl ségnek megfelel helyettesítéseket elvégezzük az algebrai kifejezés törzsében. Ehhez nézzük el ször a behelyettesítés fogalmát deníció. Legyen A egy halmazalgebrai kifejezés, amely csak az és operátorok, valamint a [t] D formájú hármasok használatával épül fel, továbbá legyenek?x,?y cv ars(a) változók. Ekkor A?Y?X azt a kifejezést jelöli, amit úgy kapunk A-ból, hogy az?x minden el fordulását?y -al helyettesítjük. Hasonlóan, jelölje A c?x egy c konstans behelyettesítését?x helyére A-ban. A sz r feltételek behelyettesíthet ségét az alábbi tétel mondja ki tétel. Legyen A egy a deníció feltételeit teljesít halmazalgebrai kifejezés, és legyenek?x,?y cv ars(a) változók. Ekkor az alábbi átírási szabályok teljesülnek. π S\{?X} (σ?x=?y (A)) π S\{?X} (A?Y?X ) (40.33) π S\{?X} (σ?x=c (A)) π S\{?X} (A c?x ) (40.34) Bizonyítás. Megtalálható a [103] cikkben.

216 A Szemantikus Web lekérdez nyelvei A szabályok megfogalmazásában látható, hogy a behelyettesítés csak akkor végezhet el, ha a behelyettesítéssel eltüntetett változó a következ lépésben egy projekció miatt amúgy is elt nt volna. Ellenkez esetben a változó eltüntetésével a kifejezés többi része értelmetlenné válhat. Ez a gyakorlatban nem jelent túl szigorú megkötést, mivel a tétel átírási szabályaival gyakran a nem szigorúan ilyen alakú kifejezéseket is a megfelel alakra tudjuk hozni. Az eddigiek során a halmazszemantikához tartozó algebrai kifejezések átírásáról volt szó. A következ ekben megmutatjuk, hogyan vihet ek át az átírási szabályok a multihalmaz szemantikára. El ször ki kell terjesztenünk a cv ars és pv ars függvényeket a multihalmaz-algebrai kifejezésekre is. Ehhez mindössze annyit kell tennünk, hogy a rekurzív deníciókban az alapesetet (A = [t] D ) kicseréljük a multihalmaz szemantikánál használt megfelel jére (A = [t] + D ), míg minden más változatlanul marad. Ezek után kimondhatjuk, hogy a fent bevezetett átírási szabályok közül majdnem mindegyik átvihet multihalmaz szemantikára is tétel. A , , és tételekben tárgyalt átírási szabályok a és szabály kivételével mind teljesülnek a multihalmaz szemantikában is. Bizonyítás. Megtalálható a [103] cikkben. A fenti elméleti eredmények már biztos alapot nyújtanak egy SPARQL lekérdezés-optimalizáló motor elkészítéséhez. Egy ilyen motor fejlesztése azonban többet igényel az átírási szabályok beépítésén kívül (például költségbecslés, optimalizálási stratégia, heurisztikák stb.), erre most nem térünk ki Szemantikus optimalizálás Az algebrai optimalizálás során csak a kifejezéseket alkotó operátorok általános tulajdonságait használtuk ki arra, hogy hatékonyabban kiértékelhet formára hozzuk a lekérdezéseket. A szemantikus optimalizálásnál ezzel szemben szükségünk van az adathalmazra vonatkozó többletinformációkra, megszorítások formájában. Ezek birtokában a lekérdezésen olyan átalakításokat tudunk végrehajtani, amelyek általános esetben nem tekinthet k ekvivalens átalakításnak, azonban a megszorításoknak eleget tev adathalmaz felett nem változtatják meg a lekérdezés jelentését. A szemantikus optimalizálás tárgyalásakor er sen építünk a relációs adatbázisok körében ismert alapfogalmakra, mint a konjunktív lekérdezések, megszorítások, és a chase algoritmus. A következ kben ezek rövid összefoglalása, és a szemantikus adatbázisok világára történ átfogalmazása következik.

217 40.3. A SPARQL optimalizálása deníció. Egy konjunktív lekérdezés egy q : ans( x) ϕ( x, ȳ) alakú kifejezés, ahol ϕ relációs atomok konjunkciója, és x minden változója el fordul ϕ-ben is. A q konjunktív lekérdezés szemantikája I adatbázispéldányon: q(i) = {ā I = ȳϕ(ā, ȳ)}. A szemantikus adatbázisoknál az adathalmazunkat egyetlen speciális ternáris relációként fogjuk fel, ezt T -vel jelöljük. A SPARQL-ben a csak And operátort és esetleg egy küls projekciót tartalmazó kifejezések felelnek meg a konjunktív lekérdezéseknek (projekciót nem tartalmazó kifejezés esetén odaképzelhetünk egy pv ars-ra történ projekciót a jelentés megváltoztatása nélkül). Jelölje ezen kifejezések osztályát A π. A SPARQL kifejezések és a konjunktív lekérdezések közötti kapcsolatot az alábbi deníció teremti meg deníció. Legyen S V, és Q A π az alábbi alakú SPARQL kifejezés: Q = Select S ((s 1, p 1, o 1 ) And... And (s n, p n, o n )) Ekkor cq(q) jelölje a Q-nak megfelel konjunktív lekérdezést, amely az alábbi alakú: q : ans( s) T (s 1, p 1, o 1 ),..., T (s n, p n, o n ), ahol s pontosan az S-beli változókat tartalmazza. Az ellenkez irányú fordítást jelölje cq 1 (q) = Q, amely csak akkor van deniálva, ha Q érvényes SPARQL lekérdezés, azaz minden i-re (s i, p i, o i ) UV UV LUV. A szemantikus optimalizálásnál kihasznált többlet információ az adathalmazra vonatkozó megszorítások formájában jelenik meg. Ezen megszorítások forrása többféle is lehet: lehetnek a felhasználó által megadottak, egy ontológiában rögzítettek vagy az adathalmaz alapján automatikusan kivontak. A megszorítások általában tetsz leges els rend logikai mondatok lehetnek. Speciális esetként megkülönböztethetünk sor-generáló függ ségeket, és egyenl ség-generáló függ ségeket, melyek alakja rendre x(ϕ( x) ȳψ( x, ȳ)) és x(ϕ( x) x i = x j ). A chase algoritmus a relációs adatbázisoknál jól ismert módszer a szemantikus optimalizációra. Bemenetként egy q konjunktív lekérdezést, és sor- valamint egyenl ség-generáló függ ségek egy Σ halmazát kapja. A q lekérdezés törzsét adatbázis-el fordulásként értelmezve iteratívan megjavítja a függ ségeket sért törzset (ez jelentheti sor hozzáadását, vagy változók egybeolvasztását). Végül kimenetként olyan lekérdezést kapunk (jelölje ezt q Σ ), amelynek törzse már kielégíti a függ ségeket, és amely ekvivalens q-val minden olyan adathalmazon, ami eleget tesz Σ-nak, azaz q Σ q Σ.

218 A Szemantikus Web lekérdez nyelvei A SPARQL lekérdezések szemantikus optimalizálásához a chase módszeren alapuló C&B (chase and backchase) algoritmust használjuk. A C&B algoritmus bemenetként kap egy q konjunktív lekérdezést, valamint függ ségek egy Σ halmazát, kimenetként pedig q-val (a Σ-nak eleget tev adathalmazokon) ekvivalens, minimális lekérdezéseket ad. Az algoritmus két fázisa a chase és a backchase névre hallgat. Els ként a chase fázisban lefuttatjuk a chase algoritmust q-ra, így kapunk egy másik u konjunktív lekérdezést, amely feltehet en nagyobb, mint q (hiszen a sor-generáló függ ségek kielégítése miatt sorokat adtunk hozzá). A backchase fázisban u-ból kiindulva keressük a minimális megfelel jét úgy, hogy u-ból sorokat elhagyva alkérdéseket képzünk, és az alkérdéseket chase-elve ellen rizzük, hogy ekvivalensek maradtak-e u-val (és így q-val is) Σ felett. Így megkaphatjuk a q-val ekvivalens, és (sorok számát tekintve) minimális konjunktív lekérdezések halmazát, amit cb Σ (q)-val jelölünk. Megjegyzés: a chase algoritmus nem minden esetben terminál, a C&B algoritmus pedig pontosan akkor terminál, ha a mögöttes chase algoritmus is. A fogalmak tisztázása után készen állunk a csak And operátort és projekciót tartalmazó SPARQL résznyelv szemantikus optimalizálásának ismertetésére. Az optimalizálás menete a következ : a lekérdezést a cq függvény segítségével átírjuk konjunktív lekérdezéssé, ezen lefuttatjuk a C&B algoritmust, majd az eredményként kapott minimális lekérdezések visszaírásával megkapjuk az optimalizált SPARQL lekérdezéseket. A m velet helyességét az alábbi tétel mondja ki tétel. Legyen Q egy A π osztálybeli SPARQL lekérdezés, és legyen Σ sor- és egyenl ség-generáló függ ségek egy halmaza. Ekkor ha cb Σ (cq(q)) létezik, továbbá q cb Σ (cq(q)) és cq 1 (q) is létezik, akkor cq 1 (q) Σ Q. Bizonyítás. Megtalálható a [103] cikkben. Feladatok 40-1 Összetett kiértékelési probléma A tétellel kapcsolatban bizonyítsuk be, hogy az And és Union m - veleteket tartalmazó SPARQL lekérdezések esetében az összetett kiértékelési probléma NP-beli Jól tervezettség eldönthet sége M utassuk meg, hogy tetsz leges P SPARQL lekérdezés jól tervezettsége And, Union, Opt, Filter m veletekkel eldönthet O( P 2 ) id ben.

219 40. fejezet megjegyzései Jól tervezettség bonyolultsága P róbáljuk meg bebizonyítani, hogy jól tervezett SPARQL lekérdezések esetén az összetett kiértékelési probléma conp-teljes ( tétel). Megjegyzések a fejezethez A Szemantikus Web vízióját és alapötleteit Tim Berners-Lee, James Hendler és Ora Lassila 2001-es cikke [16] foglalja össze. Az RDF adatmodell [66] 2004 óta, a SPARQL lekérdez nyelv [99] pedig 2008 óta hivatalos W3C ajánlás, azaz szabványosított Web-technológia. A módszertan és az eszközök népszer ségét a LOD-felh be [18] tartozó számos publikusan is elérhet szemantikus adathalmaz mutatja. A fogalmak formális tárgyalásához bevezetett halmazszemantika a [97] és [3] cikkekben található elméleti vizsgálatokon alapszik, míg a multihalmaz szemantika a [99] és [96] cikkekben található hivatalos W3C ajánlásokat követi. A Select és Ask lekérdezések kiértékeléséhez használt kompozíciós szemantika bevezetése követi a [98] cikkben találhatóakat. A SPARQL bonyolultsági kérdéseivel foglalkozó alfejezet a [98] és [103] cikkekre épít; az optimalizálásról szóló alfejezet pedig a [103] cikk eredményeit tárgyalja. A szemantikus optimalizálásnál használt alapfogalmakról b vebben a következ cikkekb l érdemes tájékozódni: chase algoritmus [11], függ ségek (megszorítások) [15], C&B algoritmus [30].

220 41. Szemantikus web alkalmazásai A Szemantikus Web célja, hogy összekapcsolja és a számítógépek által értelmezhet vé tegye az Interneten elérhet adatokat. Ehhez biztosít egy olyan adatmodellt (az RDF-et), amely lehet vé teszi az adatok leírását és integrálását. A??. fejezetben láthattuk, hogyan épül fel formálisan az adatmodell, illetve hogyan lehet az RDF-ben reprezentált adatokat lekérdezni SPARQL segítségével. Ebben a fejezetben megvizsgáljuk, miként lehet elosztott módon kiértékelni azokat a SPARQL lekérdezéseket, melyek WHERE záradékukban csak hármas mintákat tartalmaznak. Erre azért van szükség, mert a leírás mélységét l függ en egy-egy adathalmaz igen nagy méret lehet. Például, ha egy több millió felhasználóból álló közösségi hálót akarunk RDF-ben reprezentálni, akkor ehhez legalább annyi hármast kell felhasználni, ahány él van a hálóban. A közösségi hálózatok reprezentálására két megoldást is megnézünk a alfejezetben, ahol továbbá azt is megvizsgáljuk, hogyan lehet transzformációkat végezni a közösségi hálókon az RDF reprezentációjukat felhasználva. Emellett egy olyan SPARQL kiegészítést mutatunk be, ami lehet vé teszi a felhasználói csoportok kiválasztását, elemzését. Végül megnézzük, hogyan lehet speciálisan a közösségi hálókat lekérdezni a MapReduce módszerrel A SPARQL kiértékelése MapReduce módszerrel A Szemantikus Web adathalmazai sokszor nagy méret ek. Minél pontosabban akarjuk leírni az adatokat, annál több hármasra van szükségünk. A jelenlegi keretrendszerek nehezen tudják kezelni a nagy méret gy jteményeket. Emiatt vált fontossá annak a vizsgálata, hogyan tudnánk gyorsan megválaszolni a SPARQL lekérdezéseket nagy adathalmazokon. Erre egy kézenfekv megoldás a feldolgozás párhuzamosítása, elosztása több gépen. A Google által kifejlesztett MapReduce egy módszer arra, hogy bizonyos feladatokat több, klaszterbe szervezett gépen párhuzamosan oldjunk meg. Ehhez a feladatokat két fázisra kell osztani: a Map kulcs-érték párokká alakítja a bemenetet és továbbítja a Reduce fázisnak, a Reduce feldolgozza az azonos kulcshoz tartozó értékeket és el állítja a végeredményt. A Hadoop egy ingyenesen elérhet implementációja a MapReduce technikának, melyben a fent említett két fázist

221 41.1. A SPARQL kiértékelése MapReduce módszerrel 1805 együtt egy jobnak nevezzük. Ebben az alfejezetben azt vizsgáljuk, hogyan lehet felhasználni a SPARQL lekérdezések kiértékeléséhez a Hadoop jobokat Adatok tárolása A Hadoop job bemenete fájloknak egy halmaza, ezért lehet ség van arra, hogy az adatokat szétvágva több kisebb fájlba szervezzük. Ha az összes adatot egy fájlban tároljuk, akkor a rendszer minden alkalommal végigolvassa a teljes adathalmazt. Ennél hatékonyabb megoldás, ha több kisebb fájlunk van, mert ekkor nem feltétlenül szükséges végigolvasni a teljes adathalmazt, csak a szükséges részeit. Az adatok hatékony particionálásával több cikk foglalkozik, ezek közül kett t mutatunk be. Az els megközelítésben az állítmányuk szerint osztjuk szét a hármasokat, ezt állítmányalapú vágásnak nevezik. Mivel egy RDF adathalmaz jellemz en nem tartalmaz sokféle állítmányt, így az adatok nem aprózódnak el, azonban lekérdezésnél elegend a lekérdezésben szerepl állítmányok fájljait feldolgozni. Ez a módszer éppen ezért akkor használható hatékonyan, ha az állítmány helyén nem szerepelnek változók. A másik megközelítés az els nek egy nomítása, ahol a hármasokat tovább bontjuk a tárgy alapján, ezért ezt állítmány-tárgy alapú vágásnak. Többféle felosztás létezik, az egyik legegyszer bb, ha a tárgy típusa alapján vágunk, tehát az IRI és a literál típusú értékek külön fájlokba kerülnek. Bemeneti fájl kiválasztása A szükséges fájlok meghatározásához meg kell vizsgálnunk a felhasználó által írt lekérdezést. A WHERE záradékban található hármasok alapján választjuk ki a megfelel fájlokat. Ha valamely hármasban az állítmány egy változó, akkor minden fájlt kiválasztunk és befejez dik a futás. Ha nincs olyan hármas, amelyben az állítmány egy változó, akkor a tárgyban szerepl elemeket vizsgáljuk tovább. Ha valamely tárgyban változó szerepel, akkor minden olyan fájlt kiválasztunk, amely az adott állítmányhoz tartozik. Azonban, ha a tárgy nem változó, akkor a tárgy típusa tovább sz kíti a szükséges fájlok halmazát, amennyiben a második megközelítés alapján osztottuk el az adatainkat GenerateBestPlan algoritmus A következ részben bemutatunk egy algoritmust, ami el állítja a lekérdezési terveket egy adott lekérdezéshez. Miel tt rátérnénk a lekérdezés kiértékelésének költségszámítására, bevezetjük a fontosabb deníciókat, melyekre a kés bbiekben hivatkozni fogunk. A deníciók megértéséhez nézzük az alábbi lekérdezést példa. Az alábbi SPARQL lekérdezés a < IRI-

222 Szemantikus web alkalmazásai vel reprezentált egyetem tanszékeit és azok vezet it adja eredményül. Az rdf:type megmondja egy er forrásról, hogy mely osztályba tartozik. 1 SELECT?X,?Y WHERE { 2?X rdf:type ub:chair. 3?Y rdf:type ub:department. 4?X ub:worksfor?y. 5?Y ub:suborganizationof < 6 } deníció. (Hármas-minta, TP) A hármas-minta alany, állítmány és tárgy elemek olyan rendezett hármasa, amelyek a SPARQL lekérdezés WHERE záradékában szerepelnek. Az elemek lehetnek változók vagy konstansok. A példában a 2., 3., 4., és 5. sorok egy-egy TP-t tartalmaznak deníció. (MapReduce join, MRJ) A MapReduce join kett vagy több hármas minta egy változón keresztül történ összekapcsolása. A 2. és a 4. sorban szerepl TP-k az?x változón, a 3. és az 5. sorban szerepl k az?y változón keresztül vannak összekapcsolva, ezek tehát MRJ-k. Ugyanígy a 3. és a 4., valamint a 4. és az 5. sorban szerepl k. Továbbá a 3., 4. és 5. sor TP-i egy három tagú MRJ-t alkotnak deníció. (Konfliktusos MapReduce join, CMRJ) Két MapReduce joint koniktusosnak nevezünk, ha van közös változójuk, de az összekapcsolási feltételben különböz változók szerepelnek deníció. (Nem-konfliktusos MapReduce join, NCMRJ) Ha nincs közös változójuk, vagy a közös változó szerepel az összekapcsolási feltételben, akkor nem-koniktusos MapReduce joinokról beszélünk. Ez alapján a 2. és 4. illetve a 4. és 5. sorban szerepl TP-kb l képzett MapReduce joinok koniktusosak, hiszen a 2. és 4. az?x-en keresztül, míg a 4. és 5. az?y-on keresztül kapcsolódik, de az?y egy közös változó. Ha ugyancsak a 2. és 4. sort nézzük, de most a 3. és 5. sorral, akkor nem-koniktusos MapReduce joint kapunk, hiszen nincs közös változójuk deníció. (job, JB) Azt a folyamatot, amelyben egy vagy több MapReduce join található, jobnak nevezzük. A job bemenetként fájlokat kap és kimenetként fájlokat készít.

223 41.1. A SPARQL kiértékelése MapReduce módszerrel 1807 A jobokat tovább csoportosíthatjuk aszerint, hogy a bennük szerepl MapReduce joinoknak vannak-e közös hármas-mintáik. Ez alapján megkülönböztetünk megvalósítható és nem-megvalósítható jobokat. A közös hármasminták gondot okoznak, mert ilyen esetben nem egyértelm, hogy a Map fázis során milyen kulcsot rendeljünk egy adott hármashoz deníció. (Megvalósítható job, FJ) Egy jobot megvalósíthatónak nevezünk, ha nincs egynél több MapReduce joinban szerepl hármas-mintája deníció. (Nem-megvalósítható job, IFJ) Egy jobot nem-megvalósíthatónak nevezünk, ha van olyan hármas-mintája, amely több MapReduce joinban szerepel. Egy lekérdezés megválaszolásához több Hadoop job egymás utáni végrehajtása szükséges. A jobok sorozatát a lekérdezési terv határozza meg. A lekérdezési terveket szintén csoportosíthatjuk megvalósíthatóság szempontjából, a következ denícióknak megfelel en deníció. (Lekérdezés Terv, QP) Egy SPARQL lekérdezéshez tartozó lekérdezési terv Hadoop jobok olyan sorozata, amely helyesen megválaszolja a SPARQL lekérdezést deníció. (Megvalósítható Lekérdezési Terv, FQP) Egy lekérdezési tervet megvalósíthatónak nevezünk, ha minden benne szerepl job megvalósítható deníció. (Nem-megvalósítható Lekérdezési Terv, IQP) A nem-megvalósítható lekérdezési terv olyan lekérdezési terv, amelyben van legalább egy olyan job, amely nem-megvalósítható. Ahhoz, hogy egy lekérdezéshez el állítsuk az összes lehetséges megvalósítható lekérdezési tervet, olyan jobokat kell képezni, melyek megvalósíthatóak és meg kell határozni azok sorrendjét. Ehhez a következ, hármas mintákból képzett gráfok nyújtanak segítséget deníció. (Hármas-minta Gráf, TPG) A hármas-minta gráf G T P = (V T P, E T P ) egy irányítatlan élcímkézett gráf, amelynek csúcsai a lekérdezésben szerepl hármas-minták. Két csúcs között pontosan akkor vezet él, ha van közös változójuk, és ekkor az adott él a közös változók halmazával címkézett. Azaz egy (u, v, c) E T P él esetén u, v V T P csúcsok és c = var(u) var(v) él, ahol a var a TP-ben szerepl változók halmaza.

224 Szemantikus web alkalmazásai Ez a hármas-minta gráf lesz az alapja a join gráfnak, amely alapján össze tudjuk állítani a megfelel jobokat deníció. (join Gráf, JG) A G T P hármas-minta gráfból készített G J = (V J, E J ) join gráf egy irányítatlan élcímkézett gráf, amelynek minden v V J csúcsa egy (u T P, v T P, c T P ) E T P élt reprezentál, és az u J, v J V J csúcsok között pontosan akkor vezet él, ha a megfelel élek a G T P gráfban szomszédosak, és az élcímkékben szerepl változóhalmazok diszjunktak. A jobok összeállításánál a célunk olyan MapReduce joinok összeválogatása, melyek páronként nem-koniktusosak. Továbbá a lekérdezési tervekben szerepl jobok függhetnek egymástól, az ilyen jobok futtatása sorban történik. A helyes sorrend a join gráf színezésével állítható el a következ módon. Az alábbi algoritmus el állítja a lehetséges színezéseket és a hozzájuk tartozó lekérdezési terveket. A lekérdezési terveknek különböz szempontok alapján lehet értékelni a hatékonyságát, majd kiválasztani közülük a leghatékonyabbat. Ilyen szempontok lehetnek például a jobok száma, a jobok bemenetének vagy kimenetének a mérete. Input. Query q. Output. plan GenerateBestPlan 1 plans = CreateEmptyPriorityQueue() 2 tpg = CreateTriplePatternGraph(q) 3 jg = CreatejoinGraph(tpg) 4 jobs = {} 5 ColorGraph1(tpg,jg,0,jobs) 6 return getheadfrompriorityqueue(plans) A színezés pontonként történik a ColorGraph1 meghívásával, amely kezdetben megvizsgálja, hogy van-e az adott csúcsnak fehér szín szomszédja, ha nincs, akkor a fehérrel meghívja a ColorGraph2 metódust, mely a tényleges színezést végzi. Majd a szomszédok színét l függetlenül ugyanarra a csúcsra meghívja a ColorGraph2-t fekete színnel is. Input. TPG tpg, JG jg, int i, Set jobs. Output. ColorGraph1 1 if!neighborhascolor(jg, i, WHITE) then 2 ColorGraph2(tpg, jg, i, WHITE, jobs) 3 ColorGraph2(tpg, jg, i, BLACK, jobs)

225 41.1. A SPARQL kiértékelése MapReduce módszerrel 1809 A ColorGraph2 algoritmus végzi a tényleges színezést. Az algoritmus meg rzi az adott csúcs régi színét, majd ellen rzi, hogy ez lesz-e az utolsó színezés, ugyanis legfeljebb annyi jobunk lehet, ahány csúcsa van a join gráfnak. Ha nem, akkor rekurzívan meghívjuk a ColorGraph1 algoritmust, különben elkészítjük a jobot. Ezután ellen rizzük, hogy a készül job szerepele már a jobok halmazában. Ha nem, akkor hozzávesszük. Ezután megnézzük, hogy az összes join elvégezhet -e az eltárolt jobok segítségével, ha igen, akkor elkészítjük a lekérdezési tervet, különben újraépítjük a gráfokat a megfelel TP-k összevonása után és rekurzívan meghívjuk a ColorGraph1-et. Az algoritmus végén visszaállítjuk a csúcs eredeti színét. Erre azért van szükség, hogy egy visszalépéses kereséssel az összes lekérdezési tervet el tudjuk állítani. Input. TPG tpg, JG jg, int i, Color color, Set jobs. Output. ColorGraph2 1 v = Vj[i] 2 prev_color = color[v] 3 color[v] = color 4 if i < vertices[jg]-1 then 5 ColorGraph1(tpg,jg,i+1, jobs) 6 else 7 job = createjob(vertices[jg]) 8 if!detectduplicatejob(job, tpg) then 9 jobs = jobs job 10 if joins[job] == vertices[jg] then 11 enqueueplan(plans, createnewplan(jobs)) 12 else 13 tpg_new = mergejoinedtriplepatterns(tpg, job) 14 jg_new = CreatejoinGraph(tpg_new) 15 ColorGraph1(tpg_new, jg_new, 0, jobs) 16 jobs = jobs\{job} 17 color[v] = prev_color tétel. A GenerateBestPlan nem állít el megvalósíthatatlan tervet. Bizonyítás. Tegyük fel, hogy az algoritmus el állít megvalósíthatatlan tervet. A nem-megvalósítható lekérdezési terv deníciójából adódik, hogy ekkor

226 Szemantikus web alkalmazásai lennie kell legalább egy megvalósíthatatlan jobnak, ahol a hármasok úgy vannak kiválasztva, hogy azok közül legalább egy több joinban is szerepel. Legyen v V T P egy csúcs a G T P -ben, amely több joinban is szerepel. Az e 1, e 2 E T P élek legyenek a v-ben szomszédosak úgy, hogy az élcímkén szerepl változók halmaza diszjunkt. Az e 1, e 2 éleknek feleljenek meg a v 1, v 2 V J csúcsok a G J -ben. Ahhoz, hogy ez a két csúcs egyszerre fusson le egy adott jobban, mindkett nek fehérnek kell lennie, ami a színezés miatt nem lehetséges. Ugyanis ha egy csúcsnak van fehér szomszédja, akkor azt már nem színezhetjük fehérre tétel. GenerateBestPlan el állítja az összes megvalósítható lekérdezést. Bizonyítás. Tegyük fel, hogy az algoritmus nem állít el egy megvalósítható lekérdezési tervet. Ez más megfogalmazásban annyit jelent, hogy nem állít el legalább egy megvalósítható jobot, azaz valamely érvényes színezés join gráfot. Legyen C = {c 1, c 2,..., c n } egy ilyen színezés, ahol c i {BLACK, W HIT E} a megfelel v i V J csúcs színe, és n = V J. Tegyük fel, hogy {v i1, v i2,..., v ik } csúcsok színe fehér egy megvalósítható lekérdezési tervben, ahol k n. Ahhoz, hogy az algoritmus ne generálja ezt a tervet, léteznie kell egy (v im, v in ) párnak, amely között van egy él, amely meggátolja, hogy mindkét csúcs egyszerre fehér legyen. De ha a C érvényes színezésben ez a két csúcs fehér, akkor a G T P -ben nem lehet a megfelel éleknek olyan közös csúcsuk, melyek változó listája nem diszjunkt. Vagyis a G J -ben nem lehet köztük él, ami ellentmondás Alkalmazás közösségi hálók elemzésére A Web 2.0 megjelenésével interaktívvá váltak a weblapok. Ekkortól számítva a felhasználók már nem csupán böngészik, hanem k maguk is hozzájárulnak egy-egy oldal tartalmához. Például leírják a véleményüket az oldalon bemutatott termékr l, kommenteket f znek a hírekhez, címkéket rendelnek a tartalomhoz ami segíti azok kategorizálását. S t, mára egyre több olyan szolgáltatás érhet el, amely csak egy keretrendszert ad a felhasználóknak, amivel saját tartalmakat hozhatnak létre, tölthetnek fel, videót, fotót, receptet, személyes bejegyzéseket vagy bármi mást. Emellett megjelentek az úgynevezett közösségi oldalak (például Facebook, Twitter, LinkedIn), ahol a felhasználók ismerkedhetnek, megoszthatják egymással az információkat, tartalmakat, kapcsolatokat alakíthatnak ki. Ezek a kapcsolatok egy nagy közösségi hálót alkotnak.

227 41.2. Alkalmazás közösségi hálók elemzésére 1811 Az ipar és a kutatók is felismerték, hogy mennyire értékesek az ilyen, interaktív oldalakon a felhasználók által létrehozott tartalmak. Ipari szempontból érdekesek lehetnek például egy adott termékre vonatkozó hozzászólások, melyekb l a gyártó visszajelzéseket kap, megismerheti a vásárlók véleményét. A sok pozitív vélemény el segíti a termékek értékesítését. A közösségi hálókon megosztott adatok alapján célzott hirdetések, reklámok hozhatók létre. Tudományos szempontból pedig a kapcsolati hálók segítségével elemezhet vé válik a társadalmi kapcsolatoknak, a közösségeknek a kialakulása és szervez dése. A hálók különböz mér számokkal jellemezhet ek, szokták vizsgálni például a csomópontok fokszámának eloszlását, a háló átmér jét, s r ségét (azaz a lehetséges és a létez kapcsolatok arányát) Közösségi hálózatok reprezentálása RDF segítségével Napjainkban az Interneten egyre több, különböz típusú, eltér témájú közösségi oldalt találunk, mint például a Facebook, Google+ vagy a LinkedIn. Ezek közös jellemz je, hogy a felhasználók különféle kapcsolatokat alakítanak ki egymás (barát, rokon, munkatárs) és a tartalmak (látta a lmet, olvasta a könyvet, megvette a terméket) között. A bevezet ben szó volt róla, hogy ezeknek a hálózatoknak az elemzése milyen el nyökkel jár. Nincsen kidolgozott szabvány azonban a hálók reprezentálására, a különböz oldalak eltér módon, saját formátumokban tárolják azokat, megnehezítve az elemz k dolgát. Egyrészt a kifejlesztett algoritmusokat hozzá kell igazítani az éppen vizsgált háló tárolási módjához, másrészt a különböz forrásból származó hálózatokat nehéz integrálni. A Szemantikus Web megoldást nyújt ezekre a problémákra, hiszen az RDF keretrendszer egyik f célja az adatok integrálásának el segítése. Ehhez egy olyan leíró nyelvet biztosít, ami elég exibilis a különböz témájú és szerkezet közösségi hálók reprezentálásához. Továbbá ontológiák segítségével deniálhatjuk a kapcsolatok lehetséges típusait, a felhasználók, illetve a tartalmak (közösen aktorok) lehetséges osztályait. Ilyen ontológiák már léteznek, a legismertebbek közülük a Friend of a Friend (FOAF) és a Semantically- Interlinked Online Communities (SIOC). A közösségi hálózatokat alapvet en kétféleképpen lehet reprezentálni. Az els a hagyományos megközelítés, amikor a háló csúcsai az aktorok, az élek pedig a köztük lév kapcsolatok. Az aktorokhoz tartozhatnak attribútumok, amik speciális csúcsként jelennek meg deníció. (közösségi háló) A közösségi háló egy G = (V, E, C, cimke()) élcímkézett irányított gráf, ahol 1. V = A M a csúcsok halmaza, az aktorok A és a t le diszjunkt at-

228 Szemantikus web alkalmazásai tribútumok M halmazának az uniója. Az aktorok halmaza tovább van particionálva típusok szerint, vagyis A = t A t, valamint az attribútumok is lehetnek típusosak. 2. E = E AA E AM az élek halmaza, az E AA A A aktorok közötti és E AM A M aktorok és attribútumok közötti élek diszjunkt halmazának uniója, 3. C = C AA C AM az adott éltípushoz tartozó élcímkék halmaza, 4. cimke() az élcímkéz függvény, és cimke(e) az e él címkéjével egyenl. Érdemes felhívni a gyelmet arra, hogy a denícióban az A halmaz particionálása, azaz osztályok szerinti szétosztása, valamint az élek címkéje megadható ontológiák segítségével. A fent deniált gráfot ezután a következ képpen reprezentáljuk RDF hármasok segítségével deníció. (RDF reprezentáció) Legyen G = (V, E, C, cimke()) egy közösségi hálózat adatmodellje. Ekkor 1. minden a aktorhoz rendelünk egy egyértelm id a azonosítót. 2. Minden a aktorhoz hozzárendeljük a típusát, vagyis egy (id a, tipusa, tipus a ) hármast. H T = {(id a, 'tipusa', tipus a ) a A}. 3. Minden e = (a, b) E AA élhez, ahol a, b A, hozzárendelünk egy (id a, cimke(e), id b ) hármast. H R = {(id a, cimke(e), id b ) a, b A, (a, b) = e E AA }. 4. Minden e = (a, m) E AM élhez, ahol a A, m M, hozzárendelünk egy (id a, cimke(e), m) H M hármast. H M = {(id a, cimke(e), m) a A, m M, (a, m) = e E AM }. Így a G közösségi hálózat RDF reprezentációja a H = H T H R H M halmaz. A fent vázolt megközelítésnek az a hátránya, hogy a kapcsolatokhoz nem rendelhetünk attribútumokat. Ez bizonyos esetekben elengedhetetlen, például hogy mikor jött létre a kapcsolat, vagy ha az er sségét szeretnénk mérni. Egy másik hátrány, hogy ebben a szemléletben csak bináris kapcsolatokat lehet kifejezni. A második megközelítésben éppen ezért a kapcsolatokat is csúcsként reprezentáljuk, így azokhoz is rendelhetünk attribútumokat, illetve több aktor is részt vehet egy kapcsolatban. Az élek ebben az esetben a résztvev k szerepét jelölik.

229 41.2. Alkalmazás közösségi hálók elemzésére ábra. Közösségi hálók els (felül) és második (alul) adatmodell változata deníció. (közösségi háló adatmodellje 2) A közösségi háló egy G = (V, E, C, cimke()) élcímkézett irányított gráf, ahol 1. V = A M R a csúcsok halmaza, az aktorok A, az attribútumok M és a relációk R diszjunkt halmazának az uniója. Az aktorok, attribútumok és relációk halmaza tovább van particionálva típusok szerint, ahogyan az el z denícióban láttuk. 2. E = E AR E AM E RM az élek halmaza, az E AR A R, E AM A M és E RM R M diszjunkt halmazoknak az uniója, 3. C = C AR C AM C MR az adott éltípushoz tartozó élcímkék halmaza, 4. cimke() az élcímkéz függvény, és cimke(e) az e él címkéjével egyenl. A második adatmodell RDF reprezentációja hasonló az els adatmodelléhez. A reprezentáció részleteinek kidolgozását lásd a gyakorlatok között, amihez segítséget nyújt a ábra. A fels az els megközelítést, az alsó a másodikat követi. A négyzetek jelölik az aktorokat az azonosítójukkal, az azonosító után kett sponttal elválasztva pedig a típus szerepel. Az ellipszisek az attribútumok. Az alsó hálóban a rombusz a relációt mint csúcsot jelöli. A hálók mellett az RDF reprezentáció látható. Az el z ekben láthattunk két megoldást arra, hogyan lehet a közösségi hálókat RDF hármasokkal reprezentálni. Az els megoldás, ahol az aktorok a csúcsok és a relációk az élek, egyszer bb és természetesebb, viszont a második

230 Szemantikus web alkalmazásai modell, ahol a relációkat is csúcsokként reprezentáljuk, lehet séget ad n-áris relációk kifejezésére, illetve attribútumok megadására a relációkhoz is. Mivel a különböz közösségi hálók eltér célt szolgálnak, el fordulhat, hogy egyiket az els, míg másikat a második modell szerint érdemes tárolni Közösségi hálók lekérdezése és transzformálása A közösségi hálók gyakorlati felhasználása igen sokrét. Többféle feladatot, lekérdezést szoktak megfogalmazni. A jellemz használati esetek a lekérdezéseket két nagy csoportba sorolják. Az els csoportba tartozó lekérdezések a hálónak, vagy annak egyes részeinek a struktúráját vizsgálják, és általában valamilyen mér számmal jellemzik azt. Ilyen lehet például a bevezet ben már említett fokszám eloszlás, átmér vagy a s r ség. A másik csoportba az adatok kezeléséért, transzformálásáért felel s lekérdezések tartoznak. Ezek közös jellemz je, hogy a kimenetük is egy háló, amit a bemenet transzformálásával kapunk. Ilyen feladatok jellemz en: Csoportok kiválasztása. Talán a leggyakoribb feladat, amikor a hálónak egy adott mintára illeszked részeit kell kiválogatni. Attribútumok aktorrá alakítása. El fordulhat, hogy egy attribútumérték több aktornál is szerepel, esetleg egy attribútumhoz összetett értéket kell rendelni. Ezekben az esetekben szükséges lehet, hogy az attribútum értékét aktorrá alakítsuk, amit új objektumok létrehozásával érhetünk el. Relációk összevonása, csoportosítása. Gyakran szükséges adott típusú relációk összevonása, számlálása, aktoronkéni csoportosítása, vagyis az aggregálása. Adott aktor teljes környezetének lekérdezése. Egy adott felhasználó vizsgálatakor ki kell tudni nyerni a felhasználó összes kapcsolatát, a kapcsolatokhoz tartozó további aktorokkal együtt. Ez a feladat általánosítható olyan módon, hogy az adott felhasználó k-sugarú környezetét kérdezzük le. A következ kben egy olyan nyelvet vizsgálunk meg, mely a fenti feladatok megoldását segíti. A Social Network Query and Transformation Language (röviden: SNQL) a gyakran el forduló lekérdezéshez szükséges kifejez er biztosítása mellett az alacsony adatbonyolultságra törekszik. Az SNQL els sorban az adattranszformációs m veleteket támogatja. Ennek megfelel en a lekérdezések felépítése CONSTRUCT WHERE FROM szerkezetet követ. A FROM záradékban megadott közösségi háló lesz a lekérdezés bemenete, amelyb l a WHERE záradékban megadott kiválasztási minta alapján megsz rt adatokat a CONSTRUCT záradékban megadott konstrukciós minta szerint szervezzük újra.

231 41.2. Alkalmazás közösségi hálók elemzésére 1815 Az alábbi példában a ábrán láthatóhoz hasonló szerkezet hálóból a University típusú csúcsok city attribútumait alakítjuk át aktorokká, és a második adatmodellt alkalmazva összekapcsoljuk a régi és az új aktorokat a megfelel kapcslati csúcsokon keresztül példa. Attribútumok aktorrá alakítása CONSTRUCT { (?U1, rdf:type, ex:university), (?U1, ex:locatedin,?r1), (?C1, ex:contains,?r1), (?R1, rdf:type, ex:city)} IF?R1=f(?U1,?C1) WHERE {(?U1, rdf:type, ex:university), (?U1, ex:city,?c1)} FROM EmploymentNetwork A példán meggyelhetjük a konstrukciós minta és a kiválasztási minta felépítését, valamint a CONSTRUCT záradék IF feltételében szerepl kifejezést. Az IF kulcsszó után új változókat deniálhatunk a kiválasztási mintában deniált változók segítségével. Az f függvény egyedi azonosítót generál az új reláció csúcsoknak a relációban résztvev aktorok alapján. Az aggregációs feladatok megoldásához a nyelv az AGG kulcsszót biztosítja. Megadhatjuk az aggregálni kívánt változók nevét, az aggregáló függvényt és egy mintát, amely meghatározza az aggregálandó értékeket. Az alábbi példa hozzárendeli az emberekhez új attribútumként, hogy hány vállalatnál dolgoznak. (A példában az els adatmodellt követjük.) példa. Csoportosítás és aggregálás CONSTRUCT { (?P1, rdf:type, ex:person), (?P1, ex:worksfor,?u1), (?P1, ex:numberofemployer,?db)} WHERE AGG({?U1}, COUNT AS?DB, {(?P1, rdf:type, ex:person), (?P1, ex:worksfor,?u1)} ) FROM EmploymentNetwork A következ feladat megoldásához, ahol egy adott csúcs környezetét kell lekérdeznünk tetsz leges mélységig, szükségünk van a tranzitív lezárt kiszámítására. A nyelv ehhez a TC függvényt vezeti be, melynek három paramétere van, a kezd pont, a végpont és egy kiválasztási minta, ami tartalmazza ezt a két pontot. Emellett egy kezd feltételt kell megadnunk a WITH kulcsszó után. A példában, az els adatmodellt használva, olyan embereket keresünk, akik worksfor reláción keresztül elérhet k Bencét l indulva, és összekötjük ket Bencével egy ex:canreach címkéj éllel példa. Tranzitív lezárt

232 Szemantikus web alkalmazásai CONSTRUCT { (ex:bence ex:canreach?p2) } WHERE TC(?P1,?P2, {(?P1, rdf:type, ex:person), (?P1, ex:worksfor,?u1), (?P2, rdf:type, ex:person), (?P2, ex:worksfor,?u1)} FILTER (?P1!=?P2)) WITH?P1=ex:Bence FROM EmploymentNetwork Az el z három példa jól szemlélteti a nyelv eszközkészletét, amellyel a fontosabb feladatok egyszer en leírhatók. A pontos szintaktikai szabályok megtalálhatók a függelékben. A szintaktikai elemek megismerése után vizsgáljuk meg a nyelv szemantikáját. Legyen H egy közösségi háló és Q egy SNQL kérdés, jelölje Q(H) a Q lekérdezés eredményét a H hálóra alkalmazva. A lekérdezések kiértékelése két lépésb l áll. El ször az kiválasztási mintát átalakítjuk Datalog szabályokká, majd a konstrukciós minta alapján sorgeneráló függ ségeket képzünk. A kiválasztási minta átalakítása a következ szabályok rekurzív alkalmazásával történik: 1. Minden t = (s, p, o) hármast t(s, p, o)-ra fordítunk. 2. Egy P AT T = {t 1,..., t n } hármasokból álló mintához a p( z) n t i (s i, p i, o i ) szabályt rendeljük, ahol z a P AT T -ban szerepl i=1 változókat jelöli. 3. P AT T 1 AND P AT T 2 : p( z) p 1 ( x), p 2 (ȳ). 4. P AT T 1 OR P AT T 2 : p( z) p 1 ( x) p( z) p 2 (ȳ). 5. P AT T 1 AND-NOT P AT T 2 : p( z) p 1 ( x), p 2 (ȳ). 6. P AT T 1 FILTER C : p( z) p 1 ( x), c( x). 7. T C(u, v, P AT T 1 ) WITH <startcondition> : p(u, v) p 1 (... u... v...), startcond(... u... v...) p(u, v) p 1 (... u... v...), p(w, v) 8. AGG( v, agg, P AT T 1 ) : p( v, agg(ȳ) p 1 ( v, ȳ), ahol x a P AT T 1 változóit jelöli, v x, ȳ = x v és agg egy aggregáló függvény. A második lépésben a konstrukciós minta alapján generálunk szabályokat. Ebben a lépésben felhasználjuk az el z lépés szabályait. Egy

233 41.2. Alkalmazás közösségi hálók elemzésére 1817 CONSTRUCT trlist IF eqlist mintából az eqlist alapján v i = term i és term i = term l alakú kifejezéseket hozunk létre, ahol egy term lehet változó, konstans vagy függvény. Majd a minta és az egyenletek alapján construct(v 1,..., v n ) p( z) j eq j alakú szabályt képzünk. Végül az eredményt a trlist alapján konstruáljuk a következ képpen: H = {t(u 1, u 2, u 3 ) : (..u 1..u 2..u 3..) construct and t in trlist} példa. A példában megadott lekérdezés átírása p(u 1, c 1 ) t(u 1, rdf:type, ex:university), t(u 1, ex:city, c 1 ) construct(u 1, r 1, c 1 ) ep(u 1, c 1 ), r 1 = f(u 1, c 1 ) output(u 1, rdf:type, ex:university) construct(u 1, r 1, c 1 ) output(u 1, ex:locatedin, r 1 ) construct(u 1, r 1, c 1 ) output(c 1, ex:contains, r 1 ) construct(u 1, r 1, c 1 ) output(r 1, rdf:type, ex:city) construct(u 1, r 1, c 1 ) Az SNQL nyelv kidolgozásakor az egyik f szempont az volt, hogy a gyakorlatban legtöbbször el forduló adattranszformációs feladatokat ki lehessen vele fejezni. A nyelv tervezésekor a Graphlog lekérdez nyelvet és a másodrend sorgeneráló függ ségeket vették alapul állítás. Legyen Q egy SNQL kérdés, H egy közösségi háló és t = (s, p, o) egy RDF-hármas. Ekkor t Q(H) eldöntése NLOGSPACE-ben van. A bizonyítás, amit most nem közlünk, a Graphlog és a másodrend sorgeneráló függ ségek vizsgálatán alapul. A fenti példákból látszik, hogy az SNQL nyelv szerkezete és nyelvi elemei hasonlítanak a SPARQL CONSTRUCT típusú lekérdezéséhez. Mindkett egy kiválasztási minta és egy konstrukciós minta alapján épül fel. Az SNQL annyiban tér el, hogy a kiválasztási mintában nem használhatunk bizonyos elemeket, amiket a SPARQL-ben igen, például az OPT és UNION kulcsszavakat. SNQL-ben az IF konstrukcióval új változókat képezhetünk, továbbá lehet ség van a tranzitív lezárt kiszámítására. Ezeket a funkciókat a SPARQL 1.1-ben pótolták, ahol a WHERE záradékban BIND kulcsszóval értéket rendelhetünk változókhoz, hasonlóan mint az IF konstrukcióban. Az 1.1-es verzióban továbbá útvonal kifejezéseket is deniálhatunk, vagyis megadhatunk egy reguláris kifejezést az élcímkék fölött, melyre a két csúcs közötti úton szerepl élek címkéinek illeszkedniük kell.

234 Szemantikus web alkalmazásai Csoportok kiválasztása hatékonyan A közösségi hálók felhasználásának egyik gyakori feladata adott tulajdonságú csoportok kiválasztása, csoportok közötti kapcsolatok keresése. Egy közösségi háló vizsgálatakor kereshetünk például klikkeket, azaz olyan közösségeket, amelyben minden tag ismeri egymást, összeköt ket, melyek összekapcsolnak különböz klikkeket vagy éppen egymástól teljesen független csoportokat is. Az el z ekben láttuk, hogyan lehet a közösségi hálókat RDF hármasokkal reprezentálni és azt, hogy milyen el nyei vannak ennek a rugalmas ábrázolási módnak. Ebben a fejezetben az RDF-hez kidolgozott SPARQL nyelv egy lehetséges kiegészítését vizsgáljuk meg, mely lehet vé teszi a csoportok kezelését. SPARQL-ben alapvet en a gráf csúcsaira és éleire vonatkozó konjunktív lekérdezéseket fogalmazhatunk meg. A javasolt kiegészítésben ezeket a konjunktív lekérdezéseket terjesztjük ki csúcshalmazokra deníció. (Reguláris útvonalkérdés) Legyen H = (V, E) egy irányított élcímkézett gráf. Jelöle a p 1p 2...p n b az a és b csúcs közötti p1,..., p n élcímkékkel címkézett utat. Ekkor Q R R az R reguláris kifejezéssel deniált reguláris útvonalkérdés. Az ans(q R, H) válasz azokat a csúcspárokat tartalmazza, amelyek a reguláris kifejezésre illeszked útvonallal össze vannak kötve, vagyis: { } ans(q R, H) = (a, b) V V a p b, ahol p L(R) L(R) az R reguláris kifejezés által generált nyelvet jelöli deníció. (Konjunktív reguláris útvonalkérdés) A konjunktív reguláris útvonalkérdések a következ alakúak: Q C (x 1,..., x n ) y 1 R 1 y 2... y 2m 1 R m y 2m, ahol x 1,..., x n, y 1,..., y m csúcsváltozók és {x 1,..., x n } {y 1,..., y n }. Az ans(q C, H) válasz azokat a (v 1,... v n ) H-beli csúcsokból képzett n-eseket tartalmazza, amelyekhez létezik olyan σ leképezés, melyre σ(x i ) = v i, és (σ(y i ), σ(y i+1 )) ans(q R, H) minden y i R i y i+1 term által deniált Q R reguláris útvonalkérdésre. Ahhoz, hogy a fenti deníciókat ki lehessen terjeszteni halmazokra, szükséges, hogy a halmazok bizonyos részeit ki tudjuk jelölni. Ehhez megadjuk a és a kvantoroknak a halmazokra vonatkozó kiterjesztését. Univerzális kvantor: M = {M} Egzisztenciális kvantor: M = {A M A }

235 41.2. Alkalmazás közösségi hálók elemzésére 1819 Számossági kvantor: M ( n) = {A M A n}, ahol {>,, =,, <} A továbbiakban a görög Ξ vagy Ψ bet ket úgy használjuk, hogy helyükre a fenti kvantorok valamelyike behelyettesíthet deníció. (Halmaz-csúcs reguláris útvonalkérdések) Q Ξ R egy halmaz és egy csúcs közötti reguláris útvonalkérdés, ahol a Ξ kvantor meghatározza, hogy a halmaz hány elemének kell kapcsolódnia a -al jelölt csúcshoz úgy, hogy az útvonalon szerepl élek címkéje illeszkedjen az R reguláris kifejezésre. A válasz ennek megfelel en rendezett párokból áll, melynek els eleme egy halmaz, a második eleme pedig egy csúcs, vagyis: { } ans(q Ξ, H) = (A, b) 2 V V a p b, ahol a Ξ A, p L(R) A fordított irány, azaz egy csúcs és egy halmaz közötti reguláris útvonalkérdések, illetve a halmaz és halmaz közötti kérdések hasonlóan deniálhatóak deníció. (Halmaz-csúcs reguláris útvonalkérdés lezártja) Legyen Q Ξ egy halmaz-csúcs reguláris útvonalkérdés, ekkor a lezártja, Q Ξ, tovább sz kíti az eredményhalmazt úgy, hogy csak azokat az A és b közötti útvonalakat engedi meg, amelyek A-ban maradnak, tehát ans( Q Ξ, H) = { (A, b) 2 V V a p b, ahol a Ξ A, p 1,..., p n = p L(R) és i {1,..., n 1} a p 1...p i c => c A} deníció. (Halmaz méretét megszorító kérdés) A Q. (from, to) kérdés egy unáris relációt ír le, ahol from, to N, from to a halmaz méretének a minimumát és maximumát deniálja. A válasz azokból a halmazokból áll, melyek mérete megfelel a feltételeknek: ans(q., H) = { A 2 V A {from,..., to} } A fent deniált kérdéstípusokból konjunkcióval összetett kérdéseket lehet alkotni, hasonlóan a konjunktív reguláris útvonalkérdésekhez. A pontos deníció a következ deníció. (Konjunktív reguláris útvonalkérdés halmazokkal) A halmazokat is megenged konjunktív reguláris útvonalkérdés alakja Q S (x 1,..., x n ) ỹ 1 [(R 1 ) Ψ1 1 Ψ1 2 ]y2... ỹ 2m 1 [(R m ) Ψm 1 Ψm 2 ]y2 m Z 1 [f 1, t 1 ]... Z l [f l, t l ],

236 Szemantikus web alkalmazásai ahol x 1,..., x n, y 1,..., y m csúcs- vagy halmazváltozók és {x 1,..., x n } {y 1,..., y m }. Z = {Z 1,..., Z l } az y i -k közötti összes halmazváltozó halmaza. A szimbólum vagy üres, vagy halmazok esetén lehet, ami a lezártat jelenti. A Ψ vagy egy kvantor, vagy a szimbólum, amely egy egyszer csúcsot jelöl. Az R i -k reguláris kifejezések. Az ans(q S, H) azokat a (v 1,..., v n ) H-beli csúcsokból és halmazokból képzett rendezett n-eseket tartalmazza, melyekhez létezik olyan σ totális leképezés, hogy σ(x i ) = v i és (σ(y i ), σ(y i+1 )) szerepel a megfelel részkifejezés eredményhalmazában példa. Konjunktív reguláris útvonalkérdés halmazokkal A példában egy olyan adathalmazt kérdezünk le, ahol a csúcsok knows címkéj élekkel vannak összekötve, és feltesszük, hogy ez a reláció reexív. Ekkor olyan (A, B) halmazpárokat keresünk, melyekre a következ feltételek teljesülnek: 1. Az A halmazban mindenki legfeljebb kett hosszú úttal össze van kötve Bencével, akit az ex:bence azonosító jelöl, és ezek az utak nem vezetnek ki A-ból. 2. A B halmazban mindenki ismer mindenkit. 3. A B halmazból mindenki ismer legalább három A halmazbeli személyt. 4. Az A halmaz hat, a B halmaz legalább négy, de legfeljebb öt elem. Ezeket a feltételeket fejezi ki az alábbi kérdés: Q S (A, B) Ā[(knows.knows?) ]ex:bence B[(knows) ]B B[(knows) ( 3) ]A A[6, 6] B[4, 5] Amit a következ képpen írhatunk át SPARQL lekérdezéssé: SELECT??A??B WHERE{ ALL CLOSURE??A knows\knows? ex:bence. ALL??B knows ALL??B. ALL??B knows SOME( 3)??A. FILTER (??A{6, 6},??B{4, 5})}

237 41.2. Alkalmazás közösségi hálók elemzésére 1821 Az átírt lekérdezésb l látszik, hogy néhány nyelvi elem bevezetésével hogyan fejezhet k ki a halmazokat is megenged konjunktív reguláris útvonalkérdések. A halmaz változókat a?? dupla kérd jel jelzi. A reguláris kifejezésben szerepl, halmazokra vonatkozó kvantorok közül az univerzális kvantort az ALL kulcsszóval, az egzisztenciálisat a SOME-mal, míg a számossági kvantort szintén a SOME kulcsszóval jelöljük, amely után zárójelben feltüntettük a megszorítást. A halmaz lezárását a CLOSURE jelzi. Továbbá, a halmazok elemszámára vonatkozó feltételeket a FILTER után írjuk a fent látható alakban. Az átírás után vizsgáljuk meg a halmazokat is megenged reguláris útvonalkérdések bonyolultságát állítás. Legyen Q egy kérdés, H egy N csúcsú élcímkézett háló, v csúcsváltozók és V halmazváltozók rendezett n-ese. Ekkor ( v, V ) Q(H) eldöntése PTIME-ban van. Az állítás bizonyításhoz elég látni, hogy a csúcs- és halmazváltozók jelöljük ket c-vel és C-vel száma rögzített a kérdésben. Továbbá, minden halmaz alulról és felülr l korlátos a megfelel megszorító kérdés miatt. Legyen K a fels korlátok maximuma. Ekkor a kérdés megválaszolásához legfeljebb N c+k C esetet kell ellen rizni, ami a háló méretében polinomiális. Függelék: az SNQL nyelv szintaxisa <query> ::= CONSTRUCT <construct-pattern> WHERE <ext-patt> FROM <list-of-networks> <construct-pattern> ::= <list-of-pattern-triples>[if <list-of-eqs>] <list-of-eqs> ::= <var>= <expr>[ AND <var>= <expr>]* <ext-patt> ::= <list-of-pattern-triples> (<ext-patt>) AND (<ext-patt>) (<ext-patt>) OR (<ext-patt>) (<ext-patt>) AND-NOT (<ext-patt>) (<ext-patt>) FILTER (<condition>) TC(<var>, <var>, <ext-patt>) WITH <condition> AGG({<var>[, <var>]*}, <agg-func>, <ext-patt>) <list-of-pattern-triples> ::= {<pattern-triple>[, (<pattern-triple>)]*} <pattern-triple> ::= (<term>, <term>, <term>) <list-of-networks> ::= <network>[, <network>]*] <network> ::= <network-id> <list-of-instance-triple>

238 Szemantikus web alkalmazásai <list-of-instance-triple> ::= {<instance-triple>[, <instance-triple>]*} <instance-triple> ::= (<constant>, <constant>, <constant>) <expr> ::= <term> <func> <term> ::= <var> <constant> <func> ::= func(<expr>[, <expr>]*) <agg-func> ::= <literal> <condition> ::= <logical-expression> <var> ::=?<literal> $<literal> <constant> ::= <literal> Gyakorlatok Írjuk fel a denícióban leírt adatmodellhez tartozó RDF reprezentáció formális denícióját A deníció alapján írjuk fel a csúcs-halmaz és halmaz-halmaz reguláris útvonal kérdések és a hozzájuk tartozó válaszok formális denícióját Közösségi hálózatok lekérdezése MapReduce módszerrel A szemantikusan leírt közösségi adatok lekérdezésének legegyszer bb MapReduce szemlélet módszere alaptáblák el állítására épül. A táblák azokat a hármasokat tartalmazzák, amelyek a lekérdezés egy adott feltételére teljesülnek. Ezt a szakaszt nevezzük SELECTION résznek. A SELECTION szakasz végigfut az adatokon, és kiválasztja azokat az értékeket, amelyek megfelelnek egy adott változónak példa. Az alábbi SPARQL lekérdezés a Budapest Bár iránt érdekl d felhasználóknak azokat a barátait adja vissza, akik Budapesten laknak és akikkel egy május 2nál újabb képen mindketten meg vannak jelölve. SELECT?Friend WHERE {?User hasinterest "Budapest Bár".?Friend locatedat "Budapest".?Photo laterthan " ".?User friendof?friend.?photo taggedby?user.?photo taggedby?friend } A példában egy lekérdezés feltételeit láthatjuk. Ez egy tipikus lekérdezése a közösségi hálóknak, ami a célzott reklámok kiválasztására szolgál. A

239 41.2. Alkalmazás közösségi hálók elemzésére 1823 lekérdezésben vesszük azokat a felhasználókat, akik egy bizonyos területr l vannak és egy közeli ismer sük érdekl dik egy bizonyos termék iránt. A kiválasztási szakaszban ekkor hat alaptábla fog elkészülni: hasinterest(?user), locatedat(?friend), laterthan(?photo), friendof(?user?friend), taggedby(?user?photo) és a taggedby(?friend?photo). Ezeket a táblákat egy join szakasz fogja feldolgozni. Ez a megoldás nem hatékony, mivel vannak benne felesleges MapReduce job-ok. Ennek oka, hogy a hagyományos SQL join operátor és a SPARQL lekérdezés kiértékelése különbözik. A join esetében az egyes összekapcsolásoknál az alaptáblák száma korlátozott, emiatt több jobra van szükségünk. SELECTION rész mellett a join rész sem hatékony. A jelenlegi megoldás a kiválasztásokat MapReduce folyamatokkal oldja meg, és az elkészült alaptáblákat használja kés bbiekben az összekapcsolásra. Ennél egy hatékonyabb megoldás, ha kihasználjuk a MapReduce rugalmasságát, és a SELECTION részt beolvasztjuk a join részbe, ezzel csökkentve a felesleges jobok számát. Többszörös összekapcsolás Legyen adott egy SPARQL lekérdezésünk a következ négy alaptáblával: t1(?x?y), t2(?x?y), t3(?x?z), t4(?x?z). Azonos sémájú alaptáblák a különböz kapcsolatok miatt lehetségesek. Az SQL alapú megoldás el bb kiértékeli az?x?y és?x?z táblákat, majd összekapcsolja az eredményeket?x alapján. Minden join m velethez egy MapReduce jobra van szükség. Hatékonyabb, ha összekapcsoljuk az összes alaptáblát?x alapján, és sz rjük párhuzamosan?y és?z változókra. Ehhez a megoldáshoz mindössze csak egy jobra van szükségünk. Ezt a megoldást nevezzük multiple-join-with-lter metódusnak. A m velet szintaxisa a következ : Multiple join [tables] on [join Key] Filter on [Filter Key] Dump Result to [MT] Vegyük a korábbi 41.7-es példánkat. Miután összekapcsoltuk a hasinterest(?user), friendof(?user?friend) és a taggedby(?userphoto) táblákat a?user alapján, a következ lépés az így kapott?user?friend?photo tábla összekapcsolása a?friend és a?friend?photo táblával a?friend változón keresztül. A multiple-join-with-lter m velettel ez a következ képpen néz ki: Multiple join [?Friend,?Friend?Photo,?User?Friend?Photo] on [?Friend] Filter on [?Photo] Dump Result to [?User?Photo]

240 Szemantikus web alkalmazásai Ebben a példában a?friend változót használtuk join kulcsnak. Ezzel egy id ben a?photo-ra kapott különböz értékeket lesz rjük a?user?friend?photo és a?friend?photo alapján. A multiple-join-with-lter a?photo változót használja sz r kulcsnak. Kiválasztó összekapcsolás A rugalmas MapReduce programozás megengedi, hogy egyszerre generáljunk alaptáblákat és végezzünk join m veletet. Ennek eredményeként nem kell annyi job a kiválasztási szakaszban. Ezt a hibrid réteget nevezzük primitív select-join m veletnek, ahol a kiválasztás be lett integrálva az összekapcsolásba. A m velet során két csoportot alkalmazunk, ahol egy csoport hármasokat tartalmazó halmaz. Az els csoport a kiválasztó csoport, mely az alaptáblákat generálja. A másik csoport az összekapcsolási csoport, amely a join m veleteket végzi. A select-join szintaxisa a következ : Select on [triplets A] Multiple join [triplets B] on [join Key] Filter on [Filter Key] Dump Result to [ST] A select-join m ködését az alábbi példa szemlélteti példa. Az alábbi SPARQL lekérdezés olyan hozzászólásokat ad vissza, melyek január 1-nél újabb keltezés ek, és azokat sorba rendezi a rájuk vonatkozó megjelölések száma szerint csökken en. SELECT?Post WHERE {?Post rdf:type Post.?Post laterthan " ".?Post tag?tag. } GROUP BY?Tag ORDER BY DESC (count(?post)) A lekérdezés a legtöbb post-tal rendelkez aktív témákat kérdezi le 2012 óta. Mivel csak egy megosztott változó van (?Post), ezért elég csak egy összekapcsolás ahhoz, hogy megkapjuk az értékét. Ez megoldható egyetlen MapReduce jobbal, ha a kiválasztást az összekapcsolással együtt végezzük el. Az összes feltétel az összekapcsolási csoportba kerül és a kiválasztási csoportba nem kerül semmi, vagyis nincs szükségünk alaptábla generálásra. Kijelenthetjük, hogy minden olyan SPARQL lekérdezés, amelyben egy változó van megosztva, lefuttatható egy MapReduce jobbal,

241 41.2. Alkalmazás közösségi hálók elemzésére 1825 amely teljesen kihagyja a köztes adatokat. Ezek a lekérdezések jellemz ek a közösségi hálók lekérdezésében, ezeket a lekérdezéseket nevezzük csillag alakú lekérdezéseknek. Lekérdezésterv generálás Az algoritmus egymás után dolgozza fel a hármasokban lév változókat. Minden lépésben mindig a leggyakrabban megosztott változó lesz a join kulcs. Az algoritmus indít egy SQL join-t vagy egy multiple-join-with-lter jobot a változóra. A kiválasztási rész mindig benne van az els joinban. A multiplejoin-with-lter függ attól, hogy van-e érvényes sz r kulcs. Ha megszámoljuk a nem join kulcsváltozókat és találunk olyan változót, amely egynél többször szerepel a hármasokban, akkor azt használhatjuk sz r kulcsnak. Ha két változó számossága megegyezik, akkor az algoritmus önkényesen választ a két változó közül. Az utolsó eredmény legenerálása után az algoritmus visszaadja a MapReduce jobokból álló lekérdezési tervet. Input. Egy SPARQL lekérdezés Q (hármasok halmaza). Output. MapReduce folyamat W. MapReduceWorkflowGeneration 1 v = mostfrequentvariable(q) 2 tp1 = triplets in Q not sharing v 3 tp2 = triplets in Q sharing v 4 fk = v-n kívüli változók amelyek egynél több tp2-beli hármasban szerepelnek 5 job =Select on+ tp1 +Multiple join + tp2 +join on + v + Filter on + fk + Dump Result to + ST 6 W.append(job) 7 while ST.size() > 1 do 8 VA = correspondingvariables(st) 9 v = mostfrequentvariable(va) 10 tb = tables in ST sharing v 11 fk = v-n kívüli változók amelyek egynél több tb-beli táblában szerepelnek 12 job = Multiple join + tb + join on + v + Filter on + fk + Dump Result to + MT 13 W.append(job) 14 remove tb from ST 15 add MT to ST 16 return W

242 Szemantikus web alkalmazásai Gyakorlatok Generáljunk lekérdezési tervet a MapReduceWorkflowGeneration algoritmussal az alábbi lekérdezésre. 1 SELECT?X,?Y1,?Y2,?Y3 2 WHERE { 3?X rdf:type ub:professor. 4?X ub:worksfor < 5?X ub:name?y1. 6?X ub: address?y2. 7?X ub:telephone?y3. 8 } Generáljunk lekérdezési tervet a MapReduceWorkflowGeneration algoritmussal az alábbi lekérdezésre. 1 SELECT?X,?Y,?Z 2 WHERE { 3?X rdf:type ub:student. 4?Y rdf:type ub:department. 5?X ub:memberof?y. 6?Y ub:suborganizationof < 7?X ub: address?z 8 } Generáljunk lekérdezési tervet a MapReduceWorkflowGeneration algoritmussal az alábbi lekérdezésre. 1 SELECT?X,?Y,?Z 2 WHERE { 3?X rdf:type ub:student. 4?Y rdf:type ub:faculty. 5?Z rdf:type ub:course. 6?X ub:advisor?y. 7?Y ub:teacherof?z. 8?X ub:takescourse?z 9 } Feladatok 41-1 Költségbecslés Próbáljunk meg aszimptotikus fels becslést adni a GenerateBestPlan algoritmus futási idejére, a hármas-minta gráf csúcsainak és éleinek a függvé-

243 41. fejezet megjegyzései 1827 nyében Lekérdezés bonyolultság Legyen H egy rögzített n csúcsú élcímkézett közösségi háló. Adjuk meg a ( v, (V )) Q(H) döntési probléma bonyolultsági osztályát adott Q, halmazokat is megenged konjunktív reguláris útvonal kérdésre ( deníció), ahol v csúcsváltozók és V halmazváltozók rendezett n-ese. Megjegyzések a fejezethez A Szemantikus Web elméleti és gyakorlati problémáiról az els magyar nyelv tankönyveket Gottdank Tibor [48] és Szeredi Péter [107] írta. A SPARQL lekérdezések MapReduce [28] technikával történ kiértékelésének megoldását írják le Husain és társai [54]. A cikkben szó esik az adatok tárolásáról és a lekérdezéshez szükséges jobok el állításáról. Bemutatnak egy algoritmust, amely elkészíti a lekérdezés kiértékeléséhez szükséges futási tervet. A közösségi hálózatok RDF reprezentálásával f ként a [101] cikk foglalkozik, amely a reprezentálás bevezetése mellett egy lekérdez nyelvet is bemutat, amelyb l a szerz k kés bb megalkották a [102] cikkben bemutatott SNQL nyelvet a hálók lekérdezésére, transzformálására. A nyelv a Graphlog [25] és a másodrend sorgeneráló függ ségek [37] el nyeit egyesíti. A közösségi hálózatok elemzésének egyik alapja a felhasználói csoportok vizsgálata. A SPARQL-ben [49] a lekérdezések alapja a pontokra és a közöttük lév élekre vonatkozó mintaillesztés, amit a [69] cikkben leírt módon kiegészíthetünk felhasználói csoportok és a csoportok közötti összeköttetések megadásával. A fentebb említett MapReduce technika közösségi hálózatok lekérdezésére történ alkalmazását Liu, Yin és Gao [70] mutatták be. Megoldásuk a relációs táblák összekapcsolásán alapszik. A szemantikus web technológiák számos további gyakorlati alkalmazásban kerülnek felhasználásra. Matuszka, Gombos és Kiss [80] cikkükben egy beltéri navigációs rendszert ismertetnek, mely a lehetséges útvonalak kiszámításához RDF reprezentációt és következtetéseket használ fel. Gombos és társai egy általános célú virtuális obszervatóriumot ismertetnek szemantikus adatbázisok felett [47]. Zsigmondi és Kiss a [119]-ben bevezették a szemantikus helyettesít karakter fogalmát, amellyel általánosítható a szöveges keresés. Matuszka a Szemantikus Web kiterjesztett valósággal kapcsolatos alkalmazásáról számolt be a [79] publikációban. Jelen kutatást a FuturICT.hu nev, TÁMOP C-11/1/KONV azonosítószámú projekt támogatta az Európai Unió és az Európai Szociális Alap társnanszírozása mellett.

244 Színes ábrák 36. fejezet színes ábrái ábra. Nem irányított, hurokmentes De Bruijn-gráfok.

2. Visszalépéses stratégia

2. Visszalépéses stratégia 2. Visszalépéses stratégia A visszalépéses keres rendszer olyan KR, amely globális munkaterülete: út a startcsúcsból az aktuális csúcsba (ezen kívül a még ki nem próbált élek nyilvántartása) keresés szabályai:

Részletesebben

2. Visszalépéses keresés

2. Visszalépéses keresés 2. Visszalépéses keresés Visszalépéses keresés A visszalépéses keresés egy olyan KR, amely globális munkaterülete: egy út a startcsúcsból az aktuális csúcsba (az útról leágazó még ki nem próbált élekkel

Részletesebben

Mesterséges Intelligencia. Csató Lehel. Csató Lehel. Matematika-Informatika Tanszék Babeş Bolyai Tudományegyetem, Kolozsvár 2007/2008

Mesterséges Intelligencia. Csató Lehel. Csató Lehel. Matematika-Informatika Tanszék Babeş Bolyai Tudományegyetem, Kolozsvár 2007/2008 Matematika-Informatika Tanszék Babeş Bolyai Tudományegyetem, Kolozsvár 2007/2008 Az Előadások Témái Bevezető: mi a mesterséges intelligencia... Tudás reprezentáció Gráfkeresési stratégiák Szemantikus hálók

Részletesebben

Mesterséges Intelligencia. Csató Lehel. Csató Lehel. Matematika-Informatika Tanszék Babeş Bolyai Tudományegyetem, Kolozsvár 2007/2008

Mesterséges Intelligencia. Csató Lehel. Csató Lehel. Matematika-Informatika Tanszék Babeş Bolyai Tudományegyetem, Kolozsvár 2007/2008 Matematika-Informatika Tanszék Babeş Bolyai Tudományegyetem, Kolozsvár 2007/2008 Az Előadások Témái Bevezető: mi a mesterséges intelligencia... Tudás reprezentáció stratégiák Szemantikus hálók / Keretrendszerek

Részletesebben

Mesterséges intelligencia. Gregorics Tibor people.inf.elte.hu/gt/mi

Mesterséges intelligencia. Gregorics Tibor people.inf.elte.hu/gt/mi people.inf.elte.hu/gt/mi Szakirodalom Könyvek Fekete István - - Nagy Sára: Bevezetés a mesterséges intelligenciába, LSI Kiadó, Budapest, 1990, 1999. ELTE-Eötvös Kiadó, Budapest, 2006. Russel, J. S., Norvig,

Részletesebben

Mesterséges intelligencia 1 előadások

Mesterséges intelligencia 1 előadások VÁRTERÉSZ MAGDA Mesterséges intelligencia 1 előadások 2006/07-es tanév Tartalomjegyzék 1. A problémareprezentáció 4 1.1. Az állapottér-reprezentáció.................................................. 5

Részletesebben

Mesterséges Intelligencia. Csató Lehel. Csató Lehel. Matematika-Informatika Tanszék Babeş Bolyai Tudományegyetem, Kolozsvár 2010/2011 1/363

Mesterséges Intelligencia. Csató Lehel. Csató Lehel. Matematika-Informatika Tanszék Babeş Bolyai Tudományegyetem, Kolozsvár 2010/2011 1/363 1/6 Matematika-Informatika Tanszék Babeş Bolyai Tudományegyetem, Kolozsvár 2010/2011 Az Előadások Témái 46/6 Bevezető: mi a mesterséges intelligencia... Tudás reprezentáció stratégiák Szemantikus hálók

Részletesebben

3. Gráfkeres stratégia

3. Gráfkeres stratégia 3. Gráfkeres stratégia A gráfkeres rendszer olyan KR, amelynek globális munkaterülete a startcsúcsból kiinduló már feltárt utakat (részgráfot) tárolja kiinduló értéke: a startcsúcs, terminálási feltétel:

Részletesebben

Algoritmuselmélet. Legrövidebb utak, Bellmann-Ford, Dijkstra. Katona Gyula Y.

Algoritmuselmélet. Legrövidebb utak, Bellmann-Ford, Dijkstra. Katona Gyula Y. Algoritmuselmélet Legrövidebb utak, Bellmann-Ford, Dijkstra Katona Gyula Y. Számítástudományi és Információelméleti Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem 3. előadás Katona Gyula Y. (BME

Részletesebben

Kereső algoritmusok a diszkrét optimalizálás problémájához

Kereső algoritmusok a diszkrét optimalizálás problémájához Kereső algoritmusok a diszkrét optimalizálás problémájához A. Grama, A. Gupta, G. Karypis és V. Kumar: Introduction to Parallel Computing, Addison Wesley, 2003. könyv anyaga alapján A kereső eljárások

Részletesebben

Mesterséges Intelligencia MI

Mesterséges Intelligencia MI Mesterséges Intelligencia MI Problémamegoldás kereséssel ha sötétben tapogatózunk Dobrowiecki Tadeusz Eredics Péter, és mások BME I.E. 437, 463-28-99 dobrowiecki@mit.bme.hu, http://www.mit.bme.hu/general/staff/tade

Részletesebben

Mesterséges Intelligencia. Csató Lehel. Csató Lehel. Matematika-Informatika Tanszék Babeş Bolyai Tudományegyetem, Kolozsvár 2010/2011 1/363

Mesterséges Intelligencia. Csató Lehel. Csató Lehel. Matematika-Informatika Tanszék Babeş Bolyai Tudományegyetem, Kolozsvár 2010/2011 1/363 1/363 Matematika-Informatika Tanszék Babeş Bolyai Tudományegyetem, Kolozsvár 2010/2011 Az Előadások Témái 69/363 Bevezető: mi a mesterséges intelligencia... Tudás reprezentáció Gráfkeresési stratégiák

Részletesebben

V. Kétszemélyes játékok

V. Kétszemélyes játékok Teljes információjú, véges, zéró összegű kétszemélyes játékok V. Kétszemélyes játékok Két játékos lép felváltva adott szabályok szerint. Mindkét játékos ismeri a maga és az ellenfele összes választási

Részletesebben

Gráfokkal megoldható hétköznapi problémák

Gráfokkal megoldható hétköznapi problémák Eötvös Loránd Tudományegyetem Természettudományi Kar Gráfokkal megoldható hétköznapi problémák Szakdolgozat Készítette Vincze Ágnes Melitta Konzulens Héger Tamás Budapest, 2015 Tartalomjegyzék Bevezetés

Részletesebben

Keresések Gregorics Tibor Mesterséges intelligencia

Keresések Gregorics Tibor Mesterséges intelligencia Keresések ADAT := kezdeti érték while terminálási feltétel(adat) loop SELECT SZ FROM alkalmazható szabályok ADAT := SZ(ADAT) endloop KR vezérlési szintjei vezérlési stratégia általános modellfüggő heurisztikus

Részletesebben

Kereső algoritmusok a diszkrét optimalizálás problémájához

Kereső algoritmusok a diszkrét optimalizálás problémájához Kereső algoritmusok a diszkrét optimalizálás problémájához A. Grama, A. Gupta, G. Karypis és V. Kumar: Introduction to Parallel Computing, Addison Wesley, 2003. könyv anyaga alapján A kereső eljárások

Részletesebben

Gráfok 2. Legrövidebb utak, feszítőfák. Szoftvertervezés és -fejlesztés II. előadás. Szénási Sándor

Gráfok 2. Legrövidebb utak, feszítőfák. Szoftvertervezés és -fejlesztés II. előadás.   Szénási Sándor Gráfok 2. Legrövidebb utak, feszítőfák előadás http://nik.uni-obuda.hu/sztf2 Szénási Sándor Óbudai Egyetem,Neumann János Informatikai Kar Legrövidebb utak keresése Minimális feszítőfa keresése Gráfok 2

Részletesebben

Nagyságrendek. Kiegészítő anyag az Algoritmuselmélet tárgyhoz. Friedl Katalin BME SZIT február 1.

Nagyságrendek. Kiegészítő anyag az Algoritmuselmélet tárgyhoz. Friedl Katalin BME SZIT február 1. Nagyságrendek Kiegészítő anyag az Algoritmuselmélet tárgyhoz (a Rónyai Ivanyos Szabó: Algoritmusok könyv mellé) Friedl Katalin BME SZIT friedl@cs.bme.hu 018. február 1. Az O, Ω, Θ jelölések Az algoritmusok

Részletesebben

5/1. tétel: Optimalis feszítőfák, Prim és Kruskal algorithmusa. Legrövidebb utak graphokban, negatív súlyú élek, Dijkstra és Bellman Ford algorithmus.

5/1. tétel: Optimalis feszítőfák, Prim és Kruskal algorithmusa. Legrövidebb utak graphokban, negatív súlyú élek, Dijkstra és Bellman Ford algorithmus. 5/1. tétel: Optimalis feszítőfák, Prim és Kruskal algorithmusa. Legrövidebb utak graphokban, negatív súlyú élek, Dijkstra és Bellman Ford algorithmus. Optimalis feszítőfák Egy összefüggő, irányítatlan

Részletesebben

22. GRÁFOK ÁBRÁZOLÁSA

22. GRÁFOK ÁBRÁZOLÁSA 22. GRÁFOK ÁBRÁZOLÁSA A megoldandó feladatok, problémák modellezése során sokszor gráfokat alkalmazunk. A gráf fogalmát a matematikából ismertnek vehetjük. A modellezés során a gráfok több változata is

Részletesebben

26. MINIMÁLIS KÖLTSÉGŰ UTAK MINDEN CSÚCSPÁRRA

26. MINIMÁLIS KÖLTSÉGŰ UTAK MINDEN CSÚCSPÁRRA 26. MINIMÁLIS KÖLTSÉGŰ UTAK MINDEN CSÚCSPÁRRA Az előző két fejezetben tárgyalt feladat általánosításaként a gráfban található összes csúcspárra szeretnénk meghatározni a legkisebb költségű utat. A probléma

Részletesebben

Intelligens Rendszerek Elmélete IRE 4/32/1

Intelligens Rendszerek Elmélete IRE 4/32/1 Intelligens Rendszerek Elmélete 4 IRE 4/32/1 Problémamegoldás kereséssel http://nik.uni-obuda.hu/mobil IRE 4/32/2 Egyszerű lények intelligenciája? http://www.youtube.com/watch?v=tlo2n3ymcxw&nr=1 IRE 4/32/3

Részletesebben

1. A k-szerver probléma

1. A k-szerver probléma 1. A k-szerver probléma Az egyik legismertebb on-line probléma a k-szerver probléma. A probléma általános deníciójának megadásához szükség van a metrikus tér fogalmára. Egy (M, d) párost, ahol M a metrikus

Részletesebben

Diszkrét matematika 2.C szakirány

Diszkrét matematika 2.C szakirány Diszkrét matematika 2.C szakirány 2015. ősz 1. Diszkrét matematika 2.C szakirány 3. előadás Nagy Gábor nagygabr@gmail.com nagy@compalg.inf.elte.hu compalg.inf.elte.hu/ nagy Komputeralgebra Tanszék 2015.

Részletesebben

24. MINIMÁLIS KÖLTSÉGŰ UTAK I.

24. MINIMÁLIS KÖLTSÉGŰ UTAK I. 24. MINIMÁLIS KÖLTSÉGŰ UTAK I. Az útvonaltervezés az egyik leggyakrabban végrehajtott eljárása a gráfok alkalmazásai körében. A feladat például a közlekedésben jelentkezik. A gráfot itt az a térkép jelenti,

Részletesebben

Kétszemélyes játékok Gregorics Tibor Mesterséges intelligencia

Kétszemélyes játékok Gregorics Tibor Mesterséges intelligencia Kétszemélyes játékok Kétszemélyes, teljes információjú, véges, determinisztikus,zéró összegű játékok Két játékos lép felváltva adott szabályok szerint, amíg a játszma véget nem ér. Mindkét játékos ismeri

Részletesebben

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

GRÁFELMÉLET. 7. előadás. Javító utak, javító utak keresése, Edmonds-algoritmus GRÁFELMÉLET 7. előadás Javító utak, javító utak keresése, Edmonds-algoritmus Definíció: egy P utat javító útnak nevezünk egy M párosításra nézve, ha az út páratlan hosszú, kezdő- és végpontjai nem párosítottak,

Részletesebben

Diszkrét matematika 2. estis képzés

Diszkrét matematika 2. estis képzés Diszkrét matematika 2. estis képzés 2018. tavasz 1. Diszkrét matematika 2. estis képzés 11. előadás Nagy Gábor nagygabr@gmail.com nagy@compalg.inf.elte.hu compalg.inf.elte.hu/ nagy Komputeralgebra Tanszék

Részletesebben

Problémamegoldás kereséssel. Mesterséges intelligencia március 7.

Problémamegoldás kereséssel. Mesterséges intelligencia március 7. Problémamegoldás kereséssel Mesterséges intelligencia 2014. március 7. Bevezetés Problémamegoldó ágens Kívánt állapotba vezető cselekvéseket keres Probléma megfogalmazása Megoldás megfogalmazása Keresési

Részletesebben

Algoritmusok bonyolultsága

Algoritmusok bonyolultsága Algoritmusok bonyolultsága 5. előadás http://www.ms.sapientia.ro/~kasa/komplex.htm 1 / 27 Gazdaságos faváz Kruskal-algoritmus Joseph Kruskal (1928 2010) Legyen V = {v 1, v 2,..., v n }, E = {e 1, e 2,...,

Részletesebben

Mesterséges intelligencia 2. laborgyakorlat

Mesterséges intelligencia 2. laborgyakorlat Mesterséges intelligencia 2. laborgyakorlat Keresési módszerek A legtöbb feladatot meg lehet határozni keresési feladatként: egy ún. állapottérben, amely tartalmazza az összes lehetséges állapotot fogjuk

Részletesebben

Programozási módszertan. Mohó algoritmusok

Programozási módszertan. Mohó algoritmusok PM-08 p. 1/17 Programozási módszertan Mohó algoritmusok Werner Ágnes Villamosmérnöki és Információs Rendszerek Tanszék e-mail: werner.agnes@virt.uni-pannon.hu PM-08 p. 2/17 Bevezetés Dinamikus programozás

Részletesebben

Mesterséges Intelligencia. Csató Lehel. Csató Lehel. Matematika-Informatika Tanszék Babeş Bolyai Tudományegyetem, Kolozsvár 2007/2008

Mesterséges Intelligencia. Csató Lehel. Csató Lehel. Matematika-Informatika Tanszék Babeş Bolyai Tudományegyetem, Kolozsvár 2007/2008 Matematika-Informatika Tanszék Babeş Bolyai Tudományegyetem, Kolozsvár 007/008 Az Előadások Témái Bevezető: mi a mesterséges intelligencia... Tudás reprezentáció i stratégiák Szemantikus hálók / Keretrendszerek

Részletesebben

Haladók III. kategória 2. (dönt ) forduló

Haladók III. kategória 2. (dönt ) forduló Haladók III. kategória 2. (dönt ) forduló 1. Tetsz leges n pozitív egész számra jelölje f (n) az olyan 2n-jegy számok számát, amelyek megegyeznek az utolsó n számjegyükb l alkotott szám négyzetével. Határozzuk

Részletesebben

Dijkstra algoritmusa

Dijkstra algoritmusa Budapesti Fazekas és ELTE Operációkutatási Tanszék 201. július 1. Legrövidebb utak súlyozatlan esetben v 4 v 3 Feladat Hány élből áll a legrövidebb út ezen a gráfon az s és t csúcsok között? v v 6 v 7

Részletesebben

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

Online algoritmusok. Algoritmusok és bonyolultságuk. Horváth Bálint március 30. Horváth Bálint Online algoritmusok március 30. Online algoritmusok Algoritmusok és bonyolultságuk Horváth Bálint 2018. március 30. Horváth Bálint Online algoritmusok 2018. március 30. 1 / 28 Motiváció Gyakran el fordul, hogy a bemenetet csak részenként

Részletesebben

23. SZÉLESSÉGI BEJÁRÁS

23. SZÉLESSÉGI BEJÁRÁS 23. SZÉLESSÉGI BEJÁRÁS A bejárási algoritmusok feladata általában a gráf csúcsainak végiglátogatása valamilyen stratégia szerint. A bejárás gyakran azért hajtjuk végre, mert adott tulajdonságú csúcsot

Részletesebben

Diszkrét matematika 2.C szakirány

Diszkrét matematika 2.C szakirány Diszkrét matematika 2.C szakirány 2017. tavasz 1. Diszkrét matematika 2.C szakirány 3. előadás Nagy Gábor nagygabr@gmail.com nagy@compalg.inf.elte.hu compalg.inf.elte.hu/ nagy Komputeralgebra Tanszék 2017.

Részletesebben

Mátrixjátékok tiszta nyeregponttal

Mátrixjátékok tiszta nyeregponttal 1 Mátrixjátékok tiszta nyeregponttal 1. Példa. Két játékos Aladár és Bendegúz rendelkeznek egy-egy tetraéderrel, melyek lapjaira rendre az 1, 2, 3, 4 számokat írták. Egy megadott jelre egyszerre felmutatják

Részletesebben

Chomsky-féle hierarchia

Chomsky-féle hierarchia http://www.cs.ubbcluj.ro/~kasa/formalis.html Chomsky-féle hierarchia G = (N, T, P, S) nyelvtan: 0-s típusú (általános vagy mondatszerkezet ), ha semmilyen megkötést nem teszünk a helyettesítési szabályaira.

Részletesebben

értékel függvény: rátermettségi függvény (tness function)

értékel függvény: rátermettségi függvény (tness function) Genetikus algoritmusok globális optimalizálás sok lehetséges megoldás közül keressük a legjobbat értékel függvény: rátermettségi függvény (tness function) populáció kiválasztjuk a legrátermettebb egyedeket

Részletesebben

Diszkrét matematika 2. estis képzés

Diszkrét matematika 2. estis képzés Diszkrét matematika 2. estis képzés 2018. tavasz 1. Diszkrét matematika 2. estis képzés 10. előadás Nagy Gábor nagygabr@gmail.com nagy@compalg.inf.elte.hu compalg.inf.elte.hu/ nagy Komputeralgebra Tanszék

Részletesebben

Általános statisztika II. Kriszt, Éva Varga, Edit Kenyeres, Erika Korpás, Attiláné Csernyák, László

Általános statisztika II. Kriszt, Éva Varga, Edit Kenyeres, Erika Korpás, Attiláné Csernyák, László Általános statisztika II Kriszt, Éva Varga, Edit Kenyeres, Erika Korpás, Attiláné Csernyák, László Általános statisztika II Kriszt, Éva Varga, Edit Kenyeres, Erika Korpás, Attiláné Csernyák, László Publication

Részletesebben

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

Függvények növekedési korlátainak jellemzése 17 Függvények növekedési korlátainak jellemzése A jellemzés jól bevált eszközei az Ω, O, Θ, o és ω jelölések. Mivel az igények általában nemnegatívak, ezért az alábbi meghatározásokban mindenütt feltesszük,

Részletesebben

értékel függvény: rátermettségi függvény (tness function)

értékel függvény: rátermettségi függvény (tness function) Genetikus algoritmusok globális optimalizálás sok lehetséges megoldás közül keressük a legjobbat értékel függvény: rátermettségi függvény (tness function) populáció kiválasztjuk a legrátermettebb egyedeket

Részletesebben

ú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.

ú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. 1 Az utazó ügynök problémája Utazó ügynök feladat Adott n számú város és a városokat összekötő utak, amelyeknek ismert a hossza. Adott továbbá egy ügynök, akinek adott városból kiindulva, minden várost

Részletesebben

Diszkrét matematika 2.C szakirány

Diszkrét matematika 2.C szakirány Diszkrét matematika 2.C szakirány 2017. tavasz 1. Diszkrét matematika 2.C szakirány 4. előadás Nagy Gábor nagygabr@gmail.com nagy@compalg.inf.elte.hu compalg.inf.elte.hu/ nagy Komputeralgebra Tanszék 2017.

Részletesebben

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

Amortizációs költségelemzés Amortizációs költségelemzés Amennyiben műveleteknek egy M 1,...,M m sorozatának a futási idejét akarjuk meghatározni, akkor egy lehetőség, hogy külön-külön minden egyes művelet futási idejét kifejezzük

Részletesebben

7. gyakorlat. Lineáris algebrai egyenletrendszerek megoldhatósága

7. gyakorlat. Lineáris algebrai egyenletrendszerek megoldhatósága 7. gyakorlat Lineáris algebrai egyenletrendszerek megoldhatósága Egy lineáris algebrai egyenletrendszerrel kapcsolatban a következ kérdések merülnek fel: 1. Létezik-e megoldása? 2. Ha igen, hány megoldása

Részletesebben

Chomsky-féle hierarchia

Chomsky-féle hierarchia http://www.ms.sapientia.ro/ kasa/formalis.htm Chomsky-féle hierarchia G = (N, T, P, S) nyelvtan: 0-s típusú (általános vagy mondatszerkezetű), ha semmilyen megkötést nem teszünk a helyettesítési szabályaira.

Részletesebben

1/50. Teljes indukció 1. Back Close

1/50. Teljes indukció 1. Back Close 1/50 Teljes indukció 1 A teljes indukció talán a legfontosabb bizonyítási módszer a számítástudományban. Teljes indukció elve. Legyen P (n) egy állítás. Tegyük fel, hogy (1) P (0) igaz, (2) minden n N

Részletesebben

Bevezetés. 1. fejezet. Algebrai feladatok. Feladatok

Bevezetés. 1. fejezet. Algebrai feladatok. Feladatok . fejezet Bevezetés Algebrai feladatok J. A számok gyakran használt halmazaira a következ jelöléseket vezetjük be: N a nemnegatív egész számok, N + a pozitív egész számok, Z az egész számok, Q a racionális

Részletesebben

Ellenőrző kérdések. 36. Ha t szintű indexet használunk, mennyi a keresési költség blokkműveletek számában mérve? (1 pont) log 2 (B(I (t) )) + t

Ellenőrző kérdések. 36. Ha t szintű indexet használunk, mennyi a keresési költség blokkműveletek számában mérve? (1 pont) log 2 (B(I (t) )) + t Ellenőrző kérdések 2. Kis dolgozat kérdései 36. Ha t szintű indexet használunk, mennyi a keresési költség blokkműveletek számában mérve? (1 pont) log 2 (B(I (t) )) + t 37. Ha t szintű indexet használunk,

Részletesebben

Taylor-polinomok. 1. Alapfeladatok. 2015. április 11. 1. Feladat: Írjuk fel az f(x) = e 2x függvény másodfokú Maclaurinpolinomját!

Taylor-polinomok. 1. Alapfeladatok. 2015. április 11. 1. Feladat: Írjuk fel az f(x) = e 2x függvény másodfokú Maclaurinpolinomját! Taylor-polinomok 205. április.. Alapfeladatok. Feladat: Írjuk fel az fx) = e 2x függvény másodfokú Maclaurinpolinomját! Megoldás: A feladatot kétféle úton is megoldjuk. Az els megoldásban induljunk el

Részletesebben

i=1 i+3n = n(2n+1). j=1 2 j < 4 2 i+2 16 k, azaz az algoritmus valóban konstans versenyképes.

i=1 i+3n = n(2n+1). j=1 2 j < 4 2 i+2 16 k, azaz az algoritmus valóban konstans versenyképes. 1. Feladat Adott egy parkoló, ahol egy professzor a kocsiját tartja. A parkolóhelyeket egy n és n közötti szám azonosítja, az azonosító szerint helyezkednek el balról jobbra. A professzor kijön az egyetemr

Részletesebben

Diszkrét matematika 2. estis képzés

Diszkrét matematika 2. estis képzés Diszkrét matematika 2. estis képzés 2016. tavasz 1. Diszkrét matematika 2. estis képzés 9. előadás Nagy Gábor nagygabr@gmail.com nagy@compalg.inf.elte.hu compalg.inf.elte.hu/ nagy Komputeralgebra Tanszék

Részletesebben

1. feladat Az egyensúly algoritmus viselkedése: Tekintsük a kétdimenziós Euklideszi teret, mint metrikus teret. A pontok

1. feladat Az egyensúly algoritmus viselkedése: Tekintsük a kétdimenziós Euklideszi teret, mint metrikus teret. A pontok 1. feladat Az egyensúly algoritmus viselkedése: Tekintsük a kétdimenziós Euklideszi teret, mint metrikus teret. A pontok (x, y) valós számpárokból állnak, két (a, b) és (c, d) pontnak a távolsága (a c)

Részletesebben

7. gyakorlat. Lineáris algebrai egyenletrendszerek megoldhatósága

7. gyakorlat. Lineáris algebrai egyenletrendszerek megoldhatósága 7. gyakorlat Lineáris algebrai egyenletrendszerek megoldhatósága Egy lineáris algebrai egyenletrendszerrel kapcsolatban a következ kérdések merülnek fel: 1. Létezik-e megoldása? 2. Ha igen, hány megoldása

Részletesebben

Sapientia - Erdélyi Magyar TudományEgyetem (EMTE) Csíkszereda IRT- 4. kurzus. 3. Előadás: A mohó algoritmus

Sapientia - Erdélyi Magyar TudományEgyetem (EMTE) Csíkszereda IRT- 4. kurzus. 3. Előadás: A mohó algoritmus Csíkszereda IRT-. kurzus 3. Előadás: A mohó algoritmus 1 Csíkszereda IRT. kurzus Bevezetés Az eddig tanult algoritmus tipúsok nem alkalmazhatók: A valós problémák nem tiszta klasszikus problémák A problémák

Részletesebben

ZH feladatok megoldásai

ZH feladatok megoldásai ZH feladatok megoldásai A CSOPORT 5. Írja le, hogy milyen szabályokat tartalmazhatnak az egyes Chomskynyelvosztályok (03 típusú nyelvek)! (4 pont) 3. típusú, vagy reguláris nyelvek szabályai A ab, A a

Részletesebben

DiMat II Végtelen halmazok

DiMat II Végtelen halmazok DiMat II Végtelen halmazok Czirbusz Sándor 2014. február 16. 1. fejezet A kiválasztási axióma. Ismétlés. 1. Deníció (Kiválasztási függvény) Legyen {X i, i I} nemüres halmazok egy indexelt családja. Egy

Részletesebben

24. szakkör (Csoportelméleti alapfogalmak 3.)

24. szakkör (Csoportelméleti alapfogalmak 3.) 24. szakkör (Csoportelméleti alapfogalmak 3.) D) PERMUTÁCIÓK RENDJE Fontos kérdés a csoportelméletben, hogy egy adott elem hanyadik hatványa lesz az egység. DEFINÍCIÓ: A legkisebb olyan pozitív k számot,

Részletesebben

Diszkrét matematika 2. estis képzés

Diszkrét matematika 2. estis képzés Diszkrét matematika 2. estis képzés 2018. tavasz 1. Diszkrét matematika 2. estis képzés 9. előadás Nagy Gábor nagygabr@gmail.com nagy@compalg.inf.elte.hu compalg.inf.elte.hu/ nagy Komputeralgebra Tanszék

Részletesebben

Az R halmazt a valós számok halmazának nevezzük, ha teljesíti az alábbi 3 axiómacsoport axiómáit.

Az R halmazt a valós számok halmazának nevezzük, ha teljesíti az alábbi 3 axiómacsoport axiómáit. 2. A VALÓS SZÁMOK 2.1 A valós számok aximómarendszere Az R halmazt a valós számok halmazának nevezzük, ha teljesíti az alábbi 3 axiómacsoport axiómáit. 1.Testaxiómák R-ben két művelet van értelmezve, az

Részletesebben

Diszkrét matematika 2.

Diszkrét matematika 2. Diszkrét matematika 2. 2018. szeptember 21. 1. Diszkrét matematika 2. 2. előadás Fancsali Szabolcs Levente nudniq@cs.elte.hu www.cs.elte.hu/ nudniq Komputeralgebra Tanszék 2018. szeptember 21. Gráfelmélet

Részletesebben

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

Melykeres(G) for(u in V) {szin(u):=feher Apa(u):=0} for(u in V) {if szin(u)=feher then MBejar(u)} Mélységi keresés Ez az algoritmus a gráf pontjait járja be, eredményképpen egy mélységi feszítőerdőt ad vissza az Apa függvény által. A pontok bejártságát színekkel kezeljük, fehér= érintetlen, szürke=meg-

Részletesebben

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

Algoritmuselmélet. Mélységi keresés és alkalmazásai. Katona Gyula Y. Algoritmuselmélet Mélységi keresés és alkalmazásai Katona Gyula Y. Számítástudományi és Információelméleti Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem 9. előadás Katona Gyula Y. (BME SZIT) Algoritmuselmélet

Részletesebben

Bevezetés az informatikába

Bevezetés az informatikába Bevezetés az informatikába 6. előadás Dr. Istenes Zoltán Eötvös Loránd Tudományegyetem Informatikai Kar Programozáselmélet és Szoftvertechnológiai Tanszék Matematikus BSc - I. félév / 2008 / Budapest Dr.

Részletesebben

KOVÁCS BÉLA, MATEMATIKA I.

KOVÁCS BÉLA, MATEMATIKA I. KOVÁCS BÉLA, MATEmATIkA I. 3 III. MEGFELELTETÉSEk, RELÁCIÓk 1. BEVEZETÉS Emlékeztetünk arra, hogy az rendezett párok halmazát az és halmazok Descartes-féle szorzatának nevezzük. Más szóval az és halmazok

Részletesebben

Skalárszorzat, norma, szög, távolság. Dr. Takách Géza NyME FMK Informatikai Intézet takach@inf.nyme.hu http://inf.nyme.hu/ takach/ 2005.

Skalárszorzat, norma, szög, távolság. Dr. Takách Géza NyME FMK Informatikai Intézet takach@inf.nyme.hu http://inf.nyme.hu/ takach/ 2005. 1 Diszkrét matematika II., 4. el adás Skalárszorzat, norma, szög, távolság Dr. Takách Géza NyME FMK Informatikai Intézet takach@inf.nyme.hu http://inf.nyme.hu/ takach/ 2005. március 1 A téma jelent sége

Részletesebben

Számelméleti alapfogalmak

Számelméleti alapfogalmak 1 Számelméleti alapfogalmak 1 Definíció Az a IN szám osztója a b IN számnak ha létezik c IN melyre a c = b Jelölése: a b 2 Példa a 0 bármely a számra teljesül, mivel c = 0 univerzálisan megfelel: a 0 =

Részletesebben

Permutáció n = 3 esetében: Eredmény: permutációk száma: P n = n! romámul: permutări, angolul: permutation

Permutáció n = 3 esetében: Eredmény: permutációk száma: P n = n! romámul: permutări, angolul: permutation Visszalépéses módszer (Backtracking) folytatás Permutáció n = 3 esetében: 1 2 3 2 3 1 3 1 2 Eredmény: 3 2 3 1 2 1 123 132 213 231 312 321 permutációk száma: P n = n! romámul: permutări, angolul: permutation

Részletesebben

1. Online kiszolgálóelhelyezés

1. Online kiszolgálóelhelyezés 1. Online kiszolgálóelhelyezés A probléma általános deníciójának megadásához szükség van a metrikus tér fogalmára. Egy (M, d) párost, ahol M a metrikus tér pontjait tartalmazza, d pedig az M M halmazon

Részletesebben

0,424 0,576. f) P (X 2 = 3) g) P (X 3 = 1) h) P (X 4 = 1 vagy 2 X 2 = 2) i) P (X 7 = 3, X 4 = 1, X 2 = 2 X 0 = 2) j) P (X 7 = 3, X 4 = 1, X 2 = 2)

0,424 0,576. f) P (X 2 = 3) g) P (X 3 = 1) h) P (X 4 = 1 vagy 2 X 2 = 2) i) P (X 7 = 3, X 4 = 1, X 2 = 2 X 0 = 2) j) P (X 7 = 3, X 4 = 1, X 2 = 2) Legyen adott a P átmenetvalószín ség mátrix és a ϕ 0 kezdeti eloszlás Kérdés, hogy miként lehetne meghatározni az egyes állapotokban való tartózkodás valószín ségét az n-edik lépés múlva Deniáljuk az n-lépéses

Részletesebben

1. Alapfogalmak Algoritmus Számítási probléma Specifikáció Algoritmusok futási ideje

1. Alapfogalmak Algoritmus Számítási probléma Specifikáció Algoritmusok futási ideje 1. Alapfogalmak 1.1. Algoritmus Az algoritmus olyan elemi műveletekből kompozíciós szabályok szerint felépített összetett művelet, amelyet megadott feltételt teljesítő bemeneti adatra végrehajtva, a megkívánt

Részletesebben

30. ERŐSEN ÜSSZEFÜGGŐ KOMPONENSEK

30. ERŐSEN ÜSSZEFÜGGŐ KOMPONENSEK 30. ERŐSEN ÜSSZEFÜGGŐ KOMPONENSEK A gráfos alkalmazások között is találkozunk olyan problémákkal, amelyeket megoldását a részekre bontott gráfon határozzuk meg, majd ezeket alkalmas módon teljes megoldássá

Részletesebben

2. gyakorlat. A polárkoordináta-rendszer

2. gyakorlat. A polárkoordináta-rendszer . gyakorlat A polárkoordináta-rendszer Az 1. gyakorlaton megismerkedtünk a descartesi koordináta-rendszerrel. Síkvektorokat gyakran kényelmes ún. polárkoordinátákkal megadni: az r hosszúsággal és a φ irányszöggel

Részletesebben

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.

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. Algoritmuselmélet NP-teljes problémák Katona Gyula Y. Számítástudományi és Információelméleti Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem 13. előadás Katona Gyula Y. (BME SZIT) Algoritmuselmélet

Részletesebben

Számítógép és programozás 2

Számítógép és programozás 2 Számítógép és programozás 2 11. Előadás Halmazkeresések, dinamikus programozás http://digitus.itk.ppke.hu/~flugi/ A keresési feladat megoldása Legyen a lehetséges megoldások halmaza M ciklus { X legyen

Részletesebben

KOVÁCS BÉLA, MATEMATIKA I.

KOVÁCS BÉLA, MATEMATIKA I. KOVÁCS BÉLA, MATEmATIkA I. 4 IV. FÜGGVÉNYEk 1. LEkÉPEZÉSEk, függvények Definíció Legyen és két halmaz. Egy függvény -ből -ba egy olyan szabály, amely minden elemhez pontosan egy elemet rendel hozzá. Az

Részletesebben

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

Melykeres(G) for(u in V) {szin(u):=feher Apa(u):=0} for(u in V) {if szin(u)=feher then MBejar(u)} Példa Adott egy n n-es sakktábla. Az (1,1) mezőn áll egy huszár. Határozzuk meg eljuthat -e az (u,v) mezőre, ha igen adjunk meg egy legkevesebb lépésből álló utat! Adjunk algoritmust, ami megoldja a feladatot.

Részletesebben

Adatszerkezetek és algoritmusok

Adatszerkezetek és algoritmusok 2009. november 13. Ismétlés El z órai anyagok áttekintése Ismétlés Specikáció Típusok, kifejezések, m veletek, adatok ábrázolása, típusabsztakció Vezérlési szerkezetek Függvények, paraméterátadás, rekurziók

Részletesebben

5 = hiszen és az utóbbi mátrix determinánsa a középs½o oszlop szerint kifejtve: 3 7 ( 2) = (példa vége). 7 5 = 8. det 6.

5 = hiszen és az utóbbi mátrix determinánsa a középs½o oszlop szerint kifejtve: 3 7 ( 2) = (példa vége). 7 5 = 8. det 6. A pivotálás hasznáról és hatékony módjáról Adott M mátrixra pivotálás alatt a következ½ot értjük: Kijelölünk a mátrixban egy nemnulla elemet, melynek neve pivotelem, aztán az egész sort leosztjuk a pivotelemmel.

Részletesebben

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

A félév során előkerülő témakörök A félév során előkerülő témakörök rekurzív algoritmusok rendező algoritmusok alapvető adattípusok, adatszerkezetek, és kapcsolódó algoritmusok dinamikus programozás mohó algoritmusok gráf algoritmusok

Részletesebben

19. AZ ÖSSZEHASONLÍTÁSOS RENDEZÉSEK MŰVELETIGÉNYÉNEK ALSÓ KORLÁTJAI

19. AZ ÖSSZEHASONLÍTÁSOS RENDEZÉSEK MŰVELETIGÉNYÉNEK ALSÓ KORLÁTJAI 19. AZ ÖSSZEHASONLÍTÁSOS RENDEZÉSEK MŰVELETIGÉNYÉNEK ALSÓ KORLÁTJAI Ebben a fejezetben aszimptotikus (nagyságrendi) alsó korlátot adunk az összehasonlításokat használó rendező eljárások lépésszámára. Pontosabban,

Részletesebben

Gráfkeresések A globális munkaterületén a startcsúcsból kiinduló már feltárt utak találhatók (ez az ún. kereső gráf), külön megjelölve az utak azon

Gráfkeresések A globális munkaterületén a startcsúcsból kiinduló már feltárt utak találhatók (ez az ún. kereső gráf), külön megjelölve az utak azon ÖSSZEFOGLALÁS Az MI az intelligens gondolkodás számítógépes reprodukálása szempontjából hasznos elveket, módszereket, technikákat kutatja, fejleszti, rendszerezi. Miről ismerhető fel az MI? Megoldandó

Részletesebben

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

További forgalomirányítási és szervezési játékok. 1. Nematomi forgalomirányítási játék További forgalomirányítási és szervezési játékok 1. Nematomi forgalomirányítási játék A forgalomirányítási játékban adott egy hálózat, ami egy irányított G = (V, E) gráf. A gráfban megengedjük, hogy két

Részletesebben

HALMAZELMÉLET feladatsor 1.

HALMAZELMÉLET feladatsor 1. HALMAZELMÉLET feladatsor 1. Egy (H,, ) algebrai struktúra háló, ha (H, ) és (H, ) kommutatív félcsoport, és teljesül az ún. elnyelési tulajdonság: A, B H: A (A B) = A, A (A B) = A. A (H,, ) háló korlátos,

Részletesebben

1. előadás. Lineáris algebra numerikus módszerei. Hibaszámítás Számábrázolás Kerekítés, levágás Klasszikus hibaanalízis Abszolút hiba Relatív hiba

1. előadás. Lineáris algebra numerikus módszerei. Hibaszámítás Számábrázolás Kerekítés, levágás Klasszikus hibaanalízis Abszolút hiba Relatív hiba Hibaforrások Hiba A feladatok megoldása során különféle hibaforrásokkal találkozunk: Modellhiba, amikor a valóságnak egy közelítését használjuk a feladat matematikai alakjának felírásához. (Pl. egy fizikai

Részletesebben

Hasonlósági keresés molekulagráfokon: legnagyobb közös részgráf keresése

Hasonlósági keresés molekulagráfokon: legnagyobb közös részgráf keresése Hasonlósági keresés molekulagráfokon: legnagyobb közös részgráf keresése Kovács Péter ChemAxon Kft., ELTE IK kpeter@inf.elte.hu Budapest, 2018.11.06. Bevezetés Feladat: két molekulagráf legnagyobb közös

Részletesebben

GAZDASÁGMATEMATIKA KÖZÉPHALADÓ SZINTEN

GAZDASÁGMATEMATIKA KÖZÉPHALADÓ SZINTEN GAZDASÁGMATEMATIKA KÖZÉPHALADÓ SZINTEN Készült a TÁMOP-4.1.-08//a/KMR-009-0041 pályázati projekt keretében Tartalomfejlesztés az ELTE TáTK Közgazdaságtudományi Tanszékén az ELTE Közgazdaságtudományi Tanszék

Részletesebben

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.

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. Programozási tételek Programozási feladatok megoldásakor a top-down (strukturált) programtervezés esetén három vezérlési szerkezetet használunk: - szekvencia - elágazás - ciklus Eddig megismertük az alábbi

Részletesebben

egy szisztolikus példa

egy szisztolikus példa Automatikus párhuzamosítás egy szisztolikus példa Áttekintés Bevezetés Példa konkrét szisztolikus algoritmus Automatikus párhuzamosítási módszer ötlet Áttekintés Bevezetés Példa konkrét szisztolikus algoritmus

Részletesebben

Algoritmuselmélet 7. előadás

Algoritmuselmélet 7. előadás Algoritmuselmélet 7. előadás Katona Gyula Y. Budapesti Műszaki és Gazdaságtudományi Egyetem Számítástudományi Tsz. I. B. 137/b kiskat@cs.bme.hu 2002 Március 11. ALGORITMUSELMÉLET 7. ELŐADÁS 1 Múltkori

Részletesebben

Visszalépéses keresés

Visszalépéses keresés Visszalépéses keresés Backtracking előadás http://nik.uni-obuda.hu/prog2 Szénási Sándor szenasi.sandor@nik.uni-obuda.hu Óbudai Egyetem,Neumann János Informatikai Kar Alapvető működése Továbbfejlesztési

Részletesebben

Sorozatok és Sorozatok és / 18

Sorozatok és Sorozatok és / 18 Sorozatok 2015.11.30. és 2015.12.02. Sorozatok 2015.11.30. és 2015.12.02. 1 / 18 Tartalom 1 Sorozatok alapfogalmai 2 Sorozatok jellemz i 3 Sorozatok határértéke 4 Konvergencia és korlátosság 5 Cauchy-féle

Részletesebben

Matematikai és matematikai statisztikai alapismeretek

Matematikai és matematikai statisztikai alapismeretek Kézirat a Matematikai és matematikai statisztikai alapismeretek című előadáshoz Dr. Győri István NEVELÉSTUDOMÁNYI PH.D. PROGRM 1999/2000 1 1. MTEMTIKI LPOGLMK 1.1. Halmazok Halmazon mindig bizonyos dolgok

Részletesebben

ÖSSZEFOGLALÁS a Bsc záróvizsga mesterséges intelligenciáról szóló témaköréhez

ÖSSZEFOGLALÁS a Bsc záróvizsga mesterséges intelligenciáról szóló témaköréhez ÖSSZEFOGLALÁS a Bsc záróvizsga mesterséges intelligenciáról szóló témaköréhez Az MI az informatikának az a területe, amelyik az intelligens gondolkodás számítógépes reprodukálása szempontjából hasznos

Részletesebben

Diszkrét matematika 1. estis képzés

Diszkrét matematika 1. estis képzés Diszkrét matematika 1. estis képzés 2019. tavasz 1. Diszkrét matematika 1. estis képzés 11. előadás Nagy Gábor nagygabr@gmail.com nagy@compalg.inf.elte.hu compalg.inf.elte.hu/ nagy Mérai László diái alapján

Részletesebben

Függvények határértéke, folytonossága

Függvények határértéke, folytonossága Függvények határértéke, folytonossága 25. február 22.. Alapfeladatok. Feladat: Határozzuk meg az f() = 23 4 5 3 + 9 a végtelenben és a mínusz végtelenben! függvény határértékét Megoldás: Vizsgáljuk el

Részletesebben