Research - Sebelino/Team18v2 GitHub Wiki
- Exjobb om Sokoban
- A* duger nog inte.
- Rapport om Sokoban
- IDA* är bra, enligt många klasskamrater.
Pipeline-arkitektur
Kart-text --1--> GameState --2--> Stig --3--> Textsträng
- Parsning
- AI
- Översättning till strängrepresentation
main.cpp: Läser in en kart-sträng från Kattis. Omvandlar den till ett GameState. Gör nå't i den här stilen:
AI bestFSAI;
Path path = bestFSAI.solve(initialGameState);
Och översätter till sist path-objektet till en strängrepresentation, som den outputtar till Kattis. Man skulle även kunna tänka sig att main har en viss grad av meta-AI: den skulle exempelvis kunna studera kartans storlek för att avgöra vilken AI som är lämpligast att använda.
ai.hpp/ai.cpp: En headerfile/abstrakt klass/interface för ett AI. Varje AI ska åtminstone ha en solve-funktion som ska returnera en Path-instans, givet en inital GameState-instans.
bestFSAI.cpp: Tar ett initialt GameState som argument genom solve-funktionen, söker efter en lämplig stig m.h.a. Best First Search och returnerar en Path-instans.
gamestate.cpp: Beskriver ett GameState, dvs. hur kartan ser ut och var spelaren, alla lådor och alla mål befinner sig.
En långsökt metafor är att det finns tre personer inblandade i processen: Kattis, som är kunden som bara kommunicerar med textsträngar; Main, som är den utåtriktade VD:n för ett företag som både kan kommunicera med kunden via textsträngar och med sina anställda AI:er via GameStates. Slutligen är BestFSAI är en anställd som utför grovjobbet att, med sin egen speciella metod, ta fram en lösning åt sin chef, som i sin tur presenterar lösningen till kunden i form av text. Main skulle kanske också kunna studera inputen för att välja vilken av sina anställda som är mest lämplig att tackla problemet.