2010-10-10 11 views
8

Muszę zrobić terminowy projekt dotyczący algorytmów genetycznych i miałem pomysł dostrojenia cech (tj. Broni, która ma być użyta, itp.) Bota strzelającego pierwszoosobowego. Na przykład, reprezentowałbym cechy w postaci ciągu, z pierwszymi 10 bitami reprezentującymi prawdopodobieństwo wyboru broni1, kolejnych 10 bitów reprezentujących prawdopodobieństwo wybrania broni2, itd. W ten sposób uzyskałabym optymalny ciąg, dzięki czemu byłaby w stanie wymyślić jaki powinien być optymalny zestaw broni, których powinienem użyć.Algorytmy genetyczne w grach

Oczywistym problemem, przed którym stoję, jest znalezienie wartości przydatności. Mój pomysł polegałby na tym, że jeśli chcę znaleźć kondycję struny, zmuszam bota do użycia odpowiedniej broni i gram przeciwko niej, a jako wynik końcowy wykorzystuję końcowy wynik bota. Problem polega na tym, że musiałbym zagrać w DUŻĄ ilość gier.

Czy istnieje jakiś rodzaj symulacji, który mogę zrobić? Na przykład, czy mogę w jakiś sposób uzyskać funkcję f, w której będę żywił się cechami bota (np. Broń itp.) I zwróci odpowiednie wartości sprawności? Czy otwarte gry FPS zapewniają taką bibliotekę?

Inną opcją będzie przejście do kodu źródłowego gry, a następnie kontynuowanie symulacji różnych scenariuszy i odnotowywanie wyniku w każdym scenariuszu. Wolałbym nie mieć większej złożoności wchodzenia do źródła gry, ponieważ jest to krótki (1 miesiąc) projekt.

Dzięki.

Odpowiedz

4

Myślę, że twój projekt jest bardzo złożony z jednego miesiąca projektu.

To nie jest takie ekscytujące, ale być może warto przyjrzeć się strategiom gry planszowej lub karcianej. Jest to znacznie prostsza sytuacja, a wiele gier można łatwo i szybko symulować, dzięki czemu można użyć algorytmu genetycznego, aby znaleźć dobrą strategię gry. Nauczy Cię zasad algorytmów genetycznych, nie wymagając od ciebie zrozumienia ogromnej ilości kodu źródłowego, która byłaby konieczna do symulacji strzelanki pierwszoosobowej.

+0

Hmm .... punkt wzięty. Ale gdybym tylko mógł wymyślić, jak symulować FPS, myślę, że mógłbym to zrobić za miesiąc. Lub jakiś inny rodzaj gry, na przykład mecz piłki nożnej. Czy są jakieś biblioteki do tego, bez wchodzenia w kod gry? – Karan

+0

Czy są jakieś gry FPS z otwartym dostępem do kodu źródłowego? – Dane

+0

@Dane: Tak, możesz znaleźć wiele na tej stronie: http://en.wikipedia.org/wiki/List_of_freeware_first-person_shooters - Wszystkie z licencją GNU GPL są otwarte, a niektóre z innych są open source także. –

0

Twoją funkcją fitness może być to, ile DPS dany bot ma przeciwko przeciwnikowi siedzącej kaczki. Na przykład. niech bot zaatakuje gracza i nie walcz.

Możesz zapamiętać kondycję, więc duplikaty nie muszą być testowane ponownie.


Alternatywnie, można dokonać przetrwanie najsilniejszych być dosłowne umieszczając 2 osoby po przeciwnych drużyn i widząc, który zabija kto.

Ponieważ technicznie nie potrzebujesz funkcji fitness, po prostu sposób porównywania osób.

W celu zmniejszenia liczby porównań, że osoby z każdego pokolenia mogą być porównywane za pomocą turnieju, jak

A 
    }-> A 
B 
     }-> C 
C 
    }-> C 
D 

co pokazuje, że dwie osoby są górne C, następnie A.

+0

Jeśli zrobię to w ten sposób, nadal będę musiał symulować walkę pomiędzy 2 botami, a ja będę musiał zrobić wiele tych uderzeń, które wymagałyby dużo czasu. Jeśli istnieje funkcja biblioteczna, która robi to dla mnie (tzn. Przyjmuje broń robotów jako wejścia i zwraca, kto wygrał walkę), byłoby to naprawdę niesamowite, ponieważ nie zawsze będę musiała zobaczyć całą walkę, Zaraz dostanę wynik. – Karan

+0

@ user280454: Możesz przyspieszyć rzeczy, przyjmując założenia, że ​​bot z bronią zawsze pokona bota tylko nożem. – AlcubierreDrive

+0

@ user280454: Dodałem nową alternatywę do początku mojej odpowiedzi: pozwól, aby fitness = DPS, który gra przeciwko siedzącej kaczce. – AlcubierreDrive

0

Możesz użyć istniejącego bota do wygenerowania danych, jeśli jest on dostępny i jeśli jest to możliwe.

Można również użyć Autohotkey (wyszukaj google), aby wygenerować sekwencję naciśnięć klawiszy myszy i sprawić, że bot będzie jakoś automatycznie odtwarzany w głupi sposób.

+0

Problem z używaniem już istniejącego bota polega na tym, że aby użyć określonej broni, będę musiał dostać się do kodu bota, prawda? – Karan

+0

oczywiście, nigdy nie zakładałem inaczej – BROCK

2

Zgadzam się z Markiem Byressem, jest nieco zbyt ambitny w przypadku 1-miesięcznego projektu.

W każdym razie możesz wypróbować NERO (Neuro-Evolving Robotic Operatives), czyli grę opartą na algorytmie Ken Stanley'a NEAT (NeuroEvolution of Augmenting Topologies).

Można też rzucić okiem na dokumenty Stanleya:

Kilka implementacje NEAT istnieją dla różnych języków, więc może to być początek.

+0

W porządku. Pomyślałem o innym pomyśle, który nie jest zbyt ambitny. A co powiesz na zaprojektowanie GA, które potrafi samo grać węża? Obawiam się, że może to być zbyt łatwe w przypadku projektu. Co myślisz? – Karan

+0

@ user280454: To byłoby fajne, zawsze możesz zaimplementować "rozszerzoną" wersję węża, gdzie na przykład miałbyś teleporty na ekranie lub bomby lub coś w tym stylu, żeby było nieco bardziej złożone :) W każdym razie, jeśli dobrze pamiętam, jeden z przykładów, które znajdziesz na stronie internetowej NEAT, dotyczy czegoś podobnego (bot trafiający przez labirynt lub coś w tym stylu). – nico