2 svar
171 visningar
Oskillz 15
Postad: 13 mar 2017 14:28

Fuzzy state machine (Tank AI spel) räkna ut aktiveringsgrader

Jag har en AI med en fuzzy state machine i mitt tank spel. Varje state har en aktiveringsgrad mellan 0-1 och mina states är för tillfället (gå mot fiende/ammo/health). Just nu så räknas aktiveringsgraden ut bara beroende på avstånd, t.ex för gå mot health: aktiveringsgrad = 1 - (distansTillHealth/maxAvståndTillHealth

dvs att ju närmre tanken är health desto större blir aktiveringsgraden. 

aktiveringsgraderna för alla olika states används sen för att bestämma var tanken ska gå genom att summera riktningsvektorerna till alla olika objekt och multiplicera in respektive aktiveringsgrad för varje vektor.

Det jag nu vill försöka få in är att aktiveringsgraden för exempelvis health ska bero på hur mycket health tanken har, alltså om health är väldigt låg -> prioritera health, om health = maxHealth -> gå aldrig mot health.

Det som jag lyckats lösa på ett ganska simpelt sätt för att inte gå mot health om du redan har fullt är att minska aktiveringsgraden med health/maxHealth, vilker ju då blir 1 om man har fullt, men detta löser ju inte problemet på andra hållet. Så om nån har något tips skulle jag va väldigt tacksam :).  

maxHealth/health borde ge samma resultat men bli större när hälsan går ner, och det blir 1 när du har full hälsa.

 

Beroende på hur du räknat kan vektorerna behöva normeras. (1/normen) * vektorn.

Oskillz 15
Postad: 13 mar 2017 15:19

Det låter ju som att det borde stämma, datorn blev dock lite sur när health blev 0. Alla riktningsvektorerna jag har är normaliserade, om det är det du menade?

Svara
Close