Játék program írása: Sokoban megoldás optimalizálás
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