2015-08-17 16 views
10

Al momento, ogni libreria genetica di C# (A.Forge, Genetic Algorithm Framework, GeneticSharp) sembra valutare solo un singolo Chromosome e quindi utilizza uno dei vari metodi di selezione per creare una nuova generazione.Valutazione del torneo nell'algoritmo genetico

Dal momento che il mio problema coinvolge due IA per giocare l'uno contro l'altro, è un po 'più difficile valutare da soli la propria forma fisica. Mentre il gioco è abbastanza semplice da creare alcuni ostacoli superficiali (l'intelligenza artificiale non interagisce direttamente, ma gli ostacoli sono inviati a tutti gli altri giochi) che mi permetterebbe di ottenere una forma fisica astratta, ma questo non sarebbe il "vero" affare .

Anche le librerie non sembrano offrire un'altra interfaccia per implementare un tale metodo di valutazione. Ci sono altri framework che consentono questo o devo iniziare da zero?

+1

Quando si parla di GA in C# di solito scrivo il mio. In ogni caso la valutazione del fitness è sempre la parte più difficile da scrivere. – Alkasai

+0

Piuttosto che iniziare da zero, perché non dare uno di questi progetti e aiutarli a implementare le funzionalità di cui hai bisogno. – craftworkgames

+0

Puoi mostrare il codice che hai provato finora usando GeneticSharp? – giacomelli

risposta

5

Ogni libreria di algoritmi genetici dovrebbe avere un modo per definire una funzione di fitness, che è davvero ciò che stai cercando. AForge.NET espone l'interfaccia IFitnessFunction. GeneticSharp espone l'interfaccia IFitness. Sì, dovrai codificare autonomamente la funzione fitness - questa è la parte che è unica per la tua area problematica. Puoi renderlo semplice o complesso come vuoi.

Dopo che ogni cromosoma passa attraverso la funzione fitness e gli viene assegnato un punteggio, il sistema utilizza qualsiasi criterio di selezione (torneo, ruota della roulette, ecc.) Per scegliere quali cromosomi passare alla generazione successiva tramite crossover e/o mutazione.

Quindi, piuttosto che il processo che scorre in questo modo:

  1. Abbinare cromosomi in generazione attuale
  2. Ogni coppia di cromosomi gioca un rotondo
  3. I vincitori creare la prossima generazione

genetica gli algoritmi funzionano così:

  1. Ogni cromosoma gioca un giro e ottiene un punteggio
  2. L'algoritmo di selezione utilizza quel punteggio di scegliere i vincitori assoluti
  3. I vincitori creare la prossima generazione

In sostanza, ogni cromosoma è già in competizione con ogni altro cromosoma, solo un gradino più astratto di te e vorrei giocare un gioco.

Probabilmente potresti impostare la funzione fitness per attirare in modo casuale un altro membro della popolazione attuale come avversario. Meglio sarebbe usare il miglior cromosoma della generazione precedente come avversario per l'intera generazione attuale.

Assegna punti al tuo cromosoma per progredire ulteriormente nel gioco e assegnare punti per generare ostacoli per l'avversario (se si tratta di una distinta azione separata dal normale gameplay nel tuo gioco). Restituisce il punteggio finale del cromosoma come risultato della funzione fitness.