**MLAgents Deel III – JumperAgent ** Inleiding
Het doel van dit project is een mlagent succesvol trainen om over obstakels te springen. De applicatie bestaat uit 3 soorten objecten; de agent, de obstakels en de muur achter de agent. Het doel van de agent is ervoor zorgen dat de obstakels de muur aanraken zonder dat ze zichzelf aanraken. Dit is de manier voor hem om punten te scoren.
Opbouw
.yaml configuratie
Dit zijn de settings in de yaml file die ik gebruikt heb voor het trainen van de agent:
Actions
De agent beschikt over twee verschillende acties: springen en niets doen. Als hij kiest voor springen zal een vectorkracht in de y-as richting bovenwaarts uitgeoefend worden op het agentobject.
Rewards system
Voor het rewards systeem heb ik ervoor gekozen enkel punten bij te geven als hij iets goed doet en geen punten af te trekken. Als het obstakel de muur achter de agent aanraakt verdient hij 1.0 punten. Om ervoor te zorgen dat de agent niet constant blijft springen heb ik hem ook punten gegeven wanneer hij stilstaat; 0.1 * Time.deltaTime. Deze puntenverdeling werkte het best tijdens het trainen.
Trainingsproces
Zoals eerder vermeld ging het trainingsproces pas heel vlot wanneer ik niet meer met negatieve puntenverdeling werkte.
De JumperAgent1.0 en 2.0 getuigen van zo’n puntenverdeling. Daarna kreeg ik beter resultaten:
Deze versie heb ik dan ook langer laten trainen waardoor het resultaat er heel goed uitziet.
Code Snippets
Dit zijn snippets van het JumperAgent.cs script, een component van de agent.
Variabelen:
Start van episode:
We resetten het obstakel naar zijn oorspronkelijke positie en geven het een random snelheid.
Observaties:
OnActionsReceived:
Variabelen voor het berekenen van de afstand tussen objecten.
De twee discrete acties die de agent kan uitvoeren zijn springen en niets doen (hij kan enkel springen en punten krijgen door niets te doen als hij op de grond staat).
Als het obstakel de muur aanraakt gaat hij net zoals in het begin van elke episode terug naar zijn oorspronkelijke plaats met een random snelheid. Dit is de manier om de meeste punten te krijgen voor de agent.
Check of de agent terug op de grond staat (het y-niveau van de grond is 0.5).
De episode eindigt enkel als een obstakel de agent raakt.
ResetAgent:
Telkens als de agent de vloer aanraakt gaan we zijn positie en rotatie resetten om te voorkomen dat hij weg van zijn positie springt en op andere plaatsen belandt.
Jump:
Opwaartse kracht op de agent uitoefenen.
Conclusie
De belangrijkste factor die voor het meeste succes heeft gezorgd in dit project is het niet afstraffen van bepaalde acties en slechts goeie punten toewijzen op de juiste momenten. Het resultaat is een agent die het liefst van al niet geraakt wil worden maar ook graag stil wilt blijven staan waardoor hij enkel op de nodige momenten zal springen.
Link naar het filmpje: https://ap.cloud.panopto.eu/Panopto/Pages/Viewer.aspx?id=9153b35f-dae9-4f86-b108-b1d301433d11