Játék program írása: Sokoban megoldás optimalizálás

Dátum
Folyóirat címe
Folyóirat ISSN
Kötet címe (évfolyam száma)
Kiadó
Absztrakt

Az utóbbi években rohamosan fejlődött a mesterséges intelligencia, és ezzel együtt születtek olyan programok amik különböző logikai problémákra képesek megoldást találni, vagy egy már meglévő megoldást képesek optimálisabbá tenni. A tavalyi évben óriási meglepetésként olvashattuk a híreket, miszerint a számítógép képes volt legyőzni az embert az ősi kínai táblajátékban, a GO-ban. A győzelem ereje igazán abban rejlik, hogy nem egy hétköznapi embert sikerült legyőznie a Google mesterséges intelligenciájának, hanem a világ legjobb GO játékosát, Ke Jie-t. Nem ez az egyetlen sikere a mesterséges intelligenciának az ember felett. A számítógépes játékiparban még mindig viszonylag újnak számító műfaj a MOBA, mely az angol Multiplayer Online Battle Arena kifejezés rövidítése. A MOBA játékokat a valós idejű stratégiai játékokhoz lehet hasonlítani, csak itt nem kell építkezni, vagy egységeket menedzselni, hanem csak egy karaktert kell irányítani és fejleszteni. Nagyon fontos a gyors reakció idő és a tökéletes taktika. Az egyik leghíresebb MOBA játék a Dota 2. Folyamatosan megjelenik ebben a játékban is a mesterséges intelligencia, mivel nagyon fontos az útkeresés, hogy az A pontból a B pontba minél jobb utat találjon a karakter. A játék továbbá lehetőséget biztosít, hogy a gép által irányított karakterek ellen játszunk. Idén nyáron egy Dota 2 meccsben, a világ 5 legjobb játékosa ellen 5 számítógép által vezérelt karakter mérkőzött meg, ahol a gép sikeresen le tudta győzni a bajnokokat. Ez azért is nagy szó, mert itt nem csak a megoldást kellett keresni a programnak, hanem az 5 karakternek összedolgozva, csapatként kellett legyőznie a játékosokat. A szakdolgozatom témája is a mesterséges intelligenciához köthető, mivel nagyon kíváncsi vagyok, hogy mire lehet képes a gép, vagy minden téren legyőzheti-e az embert. A sokoban játékot vettem ehhez a kérdéshez alapul, ahol már egy meglévő megoldást szerettem volna optimalizálni. Mit is jelent az optimalizálás? Az optimalizálás jelentheti egy program erőforrás felhasználásának a lehető legkisebb értékig való csökkentését, vagy egy adott problémára a lehető legjobb, már-már a tökéletességhez közelítő megoldást. Mint minden logikai játékban, mindig van egy olyan megoldás, amitől már nem lehet jobbat találni. A sokoban játékban az egy adott pálya megoldásához szükséges lépések számát szerettem volna csökkenteni, a lehető legnagyobb mértékben. Ehhez először próbálkoztam egy olyan algoritmussal, ami a felesleges lépéseket figyeli, és az ilyen felesleges lépéseket eltávolítja a már meglévő megoldásból. Utána tovább gondoltam ezt a megoldást és a mesterséges intelligencia felhasználásán gondolkoztam. Az volt a cél, hogy a minél rövidebb utat megtalálja a program. Az útkereséshez az A* algoritmust használtam fel, ami az első megoldástól eltérően sokkal nagyobb mértékben csökkentette a lépések számát és egy optimálisabb megoldást állított elő. Az első megoldásom, ahol csak a felesleges lépéseket távolítottam el, a könnyebb pályákon nem igazán volt hasznos, mivel, ott még hamar rá lehet jönni a megoldásra. Az A* kereső viszont már itt is képes számottevőbb lépésszám csökkentésre, főleg, ha valaki olyannak a megoldására futtatjuk le, aki még nem vagy nem annyira ismeri a játékot és ezért még nem látja át egyből a megoldást. A nehezebb pályákon már sokkal nagyobb mértékben látszódik mind a két megoldás által elért optimalizálás, mivel itt már sokkal több oda-vissza lépésre van szükség, hogy átlássuk a megoldást, vagy hogy megtaláljuk a legrövidebb utakat, egy nagyobb pályán. A program nem csak az ember által készített megoldás optimalizálására képes, hanem egy probléma megoldó algoritmus megoldását is képes csökkenteni, ha annak elkészítése során nem volt szempont az optimalizálás

Leírás
Kulcsszavak
Sokoban, optimalizálás, A* kereső
Forrás