Opis

Jest to program, przewidujący pozycje przeciwnika, uczący się w trakcie walki, wykorzystując w tym celu sieci neuronowe. Był to semestralny projekt na przedmiot Sztuczna inteligencja. Środowisko w którym programdziała to robocode. Sieć neuronowa jest trójwarstwową siecią typu feedforward, która klasyfikuje zbierane dane na 15 kątów o jakie należy obrócić działo.

Wykorzystane technologie:

Java, Robocode, Sieci neuronowe(biblioteka encog)

Opis działania:

Co 100ms zbierane są dane takie jak: odległość między robotami, kąt między nimi, ich prędkości i przyspieszenia. W tym samym momencie rozpoczyna się symulacja wystrzału. Gdy symulowany pocisk dotrze do robota, otrzymujemy kąt o jaki należałoby obrócić działo w momencie startu symulacji, by trafić we wroga. Otrzymany kąt klasyfikujemy na 1 z 15 kątów pośrednich i zostaje on wartością oczekiwaną dla zebranych na początku danych. Na podstawie tego trenowana jest nasza sieć neutronowa.
Podczas rozpoczęcia symulacji także, sieć neuronowa przewiduje kąt do wroga, dzięki temu na bieżąco monitorujemy zdolność naszego przewidywania. Gdy udało nam się przewidzieć dosyć dokładnie pozycje wroga kilka razy z rzędu, wykonujemy strzał.

Zdjęcia (kliknij by powiększyć i zobaczyć opis)

Rozpoczęcie programu Sieć już jest nauczona i celuje dosyć sprawnie

Legenda

Na żółto jest kąt i promień prawidłowy (wzorcowy)
Na zielono jest promień i kąt przewidziany przez sieć
Kropki oznaczają punkty do których sieć klasyfikuje
Kolor czarny kropek oznacza, że sieć jest pewna, że ten kąt będzie zły
Im kolor bardziej czerwony a później niebieski, tym większe jest prawdopodobieństwo wg sieci, że jest to dobry kąt