Engine StateSearch by za ideálních podmínek jistě zvládal ovládat střelbu, pohyb i radar najednou pomocí správně definovaných akcí.
Vzhledem však k tomu, že v prostředí Robocode nemá bot kompletní informace o vývoji hry, vyžadovala by implementace všech tří částí (střelba, pohyb, radar) dohromady určitou dávku predikce.
Tato predikce je však velmi složitá a navíc pro pohyb vs střelba/radar oddělená. Rozhodnul jsem se tedy ve své BP zaměřit pouze na predikci vhodnou pro náš pohyb.
Pohyb
Predikce pro náš pohyb vyžaduje správné určení budoucího úhlu střelby protivníka. To provádím pomocí vln (vlna je místo, kde se může střela nalézat - střed má v bodě výstřelu a šíří se zároveň se střelou), únikového úhlu (který určuje, kam až můžeme za daný čas s botem zajet) a pravděpodobností zásahu, které jsou rozsety na tomto úhlu.
S každým zásahem přidáme si pamatujeme (pouze do určité hloubky), pod jakým úhlem nás protivník zasáhnul a zvýšíme pravděpodobnost tohoto úhlu. Pak se snažíme jezdit pouze do takových míst, kde je pravděpodobnost zásahu nejnižší.
To poslední řečené, tedy to, že navštivujeme místa s nejnižší pravděpodobností zásahu je už záležitost enginu StateSearch. Predikce vln pouze udává pravděpodobnosti a StateSearch již s pomocí simulace a akcí určí, které místo je pro nás v budoucnu nejvýhodnější. V evaluační funkci jsou zmíněny naše životy, které pak vyústí ve snahu algoritmu vyhýbat se nebezpečným místům.
Střelba
Střelbu jsem bohužel oddělil od algoritmu StateSearch a provádím ji s použitím GuessGun zbraně a přesnou predikcí únikového úhlu.
Radar
Protože je bot navrhnut pouze na boj 1v1, je radar obsluhován několikařádkovým kódem jako PerfectLock Radar. Tedy stále ukazuje na protivníka.
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment