Technische uitdaging: AI-beslissingsmotor

Technische uitdaging: AI-beslissingsmotor

Besluitvormings-AIAlgoritmenMulti-agent-systemenPadzoekalgoritmen

Context

Als onderdeel van een sollicitatieprocedure werd mij gevraagd deel te nemen aan een CodinGame-challenge. Het doel was een bot te ontwikkelen die de Gold League kon bereiken in de Soak Overflow-challenge.

In het spel nemen twee teams van agents het tegen elkaar op op een raster. Elke beurt kiest elke agent een verplaatsing en een actie (schieten, een bom gooien of dekking zoeken) om de winstkansen van het team te maximaliseren, rekening houdend met bondgenoten, terreincontrole, dekking en talrijke tactische interacties.

Doelstellingen

Los van de rangschikking wilde ik een beslissingsmotor ontwerpen die:

  • modulair is;
  • uitlegbaar is;
  • eenvoudig verder kan worden verbeterd;
  • gebaseerd is op expliciete domeinregels in plaats van moeilijk interpreteerbare scores en coëfficiënten.

Oplossing

De kern van het project is een individuele beslissingsmotor die onafhankelijk voor elke agent wordt uitgevoerd.

Elke beslissing combineert verschillende analysetrappen:

  • dreigingsanalyse;
  • evaluatie van offensieve kansen;
  • schatting van de effectieve schade op basis van dekking;
  • terreincontrole;
  • BFS-padzoekalgoritme voor verplaatsingen;
  • coördinatie tussen bondgenoten via een simulatie van de huidige speltoestand.

De architectuur scheidt duidelijk de verantwoordelijkheden tussen de kaartrepresentatie, ruimtelijke berekeningen, agents, speltoestand en actieopbouw.

Aanpak

Het project is tijdens de ontwikkeling sterk geëvolueerd.

Een eerste architectuur, voornamelijk gebaseerd op collectieve strategieën, bereikte ondanks vele iteraties al snel haar grenzen.

In plaats van steeds meer uitzonderingen toe te voegen, besloot ik de aanpak volledig te herzien en de logica opnieuw op te bouwen rond een veel krachtigere individuele beslissingsmotor.

Elke wijziging werd experimenteel gevalideerd met behulp van een script dat meerdere challenge-uitvoeringen automatiseerde, zodat de invloed van schommelingen in de ranglijst werd beperkt.

Dankzij deze iteratieve aanpak kon ik de echt nuttige verbeteringen identificeren en uiteindelijk de Gold League bereiken.

Resultaat

rankDe bot bereikte de Gold League van Soak Overflow en eindigde op de 382e plaats tussen enkele duizenden spelers.

Meer dan de uiteindelijke klassering toont dit project vooral mijn manier van werken als ingenieur: begrijpelijke oplossingen bouwen, hun doeltreffendheid objectief meten en mijn ontwerpkeuzes in vraag stellen zodra de resultaten aantonen dat een aanpak haar limieten heeft bereikt.