Wat begonnen is als een onschuldig school projectje is inmiddels uit de hand gelopen tot een groots project vanwege mijn ongezonde nieuwsgierigheid
Aanvankelijk was de opdracht om bekend te raken met een 3D omgeving zoals Glut (openGL), waar ik een 4-op-een-rij game in heb gemaakt die 2 spelers kunnen spelen en volledig functioneel is (win conditions e.d. functioneren ook). Nu ben ik zelf wat verder gegaan en leek mij dit een goeie kans om het principe Game Tree's wat beter te gaan begrijpen door een A.I. in deze applicatie te bouwen.
Wat een game tree inhoud is, in het kort gezegd, een boom structuur met x aantal childs per nodes als dat er mogelijke zetten zijn. Bij 4 op een rij is dit dus nooit groter dan 7 (Een 4 op een rij veld is 7 breed en 6 hoog). Naarmate de kolommen vol raken neemt het mogelijk aantal zetten af en zal de tree minder complex worden.
De praktische haalbaarheid daargelaten, wil ik als eerste een volledige game tree (in tegenstelling tot een gedeeltelijke game tree) implementeren. Nu is mijn vraag hoe ik hier, vanuit een praktisch oogpunt het beste mee kan beginnen. Het speelveld bestaat uit een vector van vectoren van het type bool die aangeeft welke speler het betreft. Ik heb ook al een aansluiting naar de 'AI' klasse waar een referentie naar deze matrix gegeven wordt, en er is ook al een functie die kijkt hoe lang de langst mogelijke aaneengesloten reeks is binnen het veld, gezien vanuit de laatst gedane zet.
Nu moet het opbouwen van de tree niet zo heel veel problemen geven met een recursief algorithme, alleen vraag ik me af hoe ik de data op moet slaan. Is het enkel mogelijk door in iedere node het volledige matrix te copieren? En stel dat ik vervolgens een goede boom heb weten te maken met alle mogelijke zetten er in, hoe bepaal ik specifiek voor 4 op een rij de 'beste' zet? Kijk ik naar het percentage van childs die in een win / loss eindigt? Kijk ik naar hoe diep de eerste win / loss zit vanaf mijn huidige positie, etc.
Ik ben dus op zoek naar wat tips met betrekking tot de praktische aanpak. Meeste sites met informatie over dit onderwerp beperken zich alleen tot vrij droge theorie, welke inmiddels wel duidelijk is.
Wat een game tree inhoud is, in het kort gezegd, een boom structuur met x aantal childs per nodes als dat er mogelijke zetten zijn. Bij 4 op een rij is dit dus nooit groter dan 7 (Een 4 op een rij veld is 7 breed en 6 hoog). Naarmate de kolommen vol raken neemt het mogelijk aantal zetten af en zal de tree minder complex worden.
De praktische haalbaarheid daargelaten, wil ik als eerste een volledige game tree (in tegenstelling tot een gedeeltelijke game tree) implementeren. Nu is mijn vraag hoe ik hier, vanuit een praktisch oogpunt het beste mee kan beginnen. Het speelveld bestaat uit een vector van vectoren van het type bool die aangeeft welke speler het betreft. Ik heb ook al een aansluiting naar de 'AI' klasse waar een referentie naar deze matrix gegeven wordt, en er is ook al een functie die kijkt hoe lang de langst mogelijke aaneengesloten reeks is binnen het veld, gezien vanuit de laatst gedane zet.
Nu moet het opbouwen van de tree niet zo heel veel problemen geven met een recursief algorithme, alleen vraag ik me af hoe ik de data op moet slaan. Is het enkel mogelijk door in iedere node het volledige matrix te copieren? En stel dat ik vervolgens een goede boom heb weten te maken met alle mogelijke zetten er in, hoe bepaal ik specifiek voor 4 op een rij de 'beste' zet? Kijk ik naar het percentage van childs die in een win / loss eindigt? Kijk ik naar hoe diep de eerste win / loss zit vanaf mijn huidige positie, etc.
Ik ben dus op zoek naar wat tips met betrekking tot de praktische aanpak. Meeste sites met informatie over dit onderwerp beperken zich alleen tot vrij droge theorie, welke inmiddels wel duidelijk is.