2011-08-12 3 views
3

Je voudrais coder un algorithme génétique qui apprend à jouer à un jeu similaire à Tetris. Le jeu en lui-même est relativement simple; J'ai écrit le comportement complet de celui-ci ci-dessous.Comment pourrais-je coder cet algorithme génétique?

Le jeu:

  • Grille base, 12x16.
  • Vous devez effacer les blocs de la grille.
  • Une rangée de nouveaux blocs est ajoutée toutes les 5 ticks, vers le bas, en poussant les blocs vers le haut.
  • Vous ne pouvez effacer que les clusters du même type.
  • Le nombre de types de blocs augmente à mesure que le jeu se poursuit.
  • Vous ne pouvez supprimer que les clusters de 3 ou plus.
  • Pour chaque cluster effacé, (CLUSTER_SIZE - 3)^2 est ajouté à BLOCK_SCORE.
  • Une fois qu'une grappe a été retirée de la grille, les blocs ci-dessus glissent pour remplir les espaces, et s'il y a des trous horizontaux (sur la rangée du bas), le côté gauche de l'espace se déplace pour la remplir.
  • Le but de ce jeu est de survivre le plus longtemps possible. Le temps est mesuré en ticks, ou le nombre de coups que vous avez faits.
  • Votre score (ou Condition physique) est déterminé par (TIME_ALIVE * BLOCK_SCORE)
  • Le jeu est terminé une fois qu'un bloc atteint le sommet de la grille.

Le score de ce jeu intègre à la fois la longévité et l'efficacité. Plus les grappes que vous effacez sont grandes, plus la forme physique est élevée.

J'ai codé quelques GA maintenant, mais ils ont été basés sur la concurrence locale, des choses comme les objectifs de collecte et autres, VS d'autres individus. Mon problème est que je ne sais pas comment aborder ce problème. Chaque individu différent de cette nouvelle AG ne devrait avoir que la grille actuelle pour travailler en entrée. (Au moins, c'est ce que je pense serait nécessaire)

Comment puis-je commencer à coder le GA pour cela? Je ne peux pas pour la vie de moi le faire.

.

Merci à tous,

Steffan 'Ruirize James

+0

De votre comportement, chaque individu joue le jeu et obtient un score qui peut être comparé à d'autres personnes - je ne suis pas sûr de savoir quel est le problème? –

+0

Le problème est de configurer ceci en code; De quel type de traits vais-je avoir besoin, etc. –

+0

Qu'est-ce qu'un 'move'? Avez-vous le choix du type de bloc ajouté, ou pouvez-vous déplacer un bloc nouvellement ajouté, ou quoi? –

Répondre

2

Chaque individu dans votre population représenterait un jeu joué à la fin. Les attributs de chaque individu seraient des paramètres nécessaires pour définir une stratégie donnée de placement des blocs. Je suppose que vous avez quelques heuristiques différentes pour placer un bloc. Un exemple d'une stratégie serait de sélectionner une heuristique au hasard parmi les stratégies disponibles afin que vos attributs soient un ensemble de probabilités qu'une heuristique donnée soit choisie. Pouvez-vous fournir plus d'informations sur l'heuristique de placement du bloc k que vous avez?

+0

Les blocs ne sont pas placés, ils sont effacés. Toutes les 5 ticks, une nouvelle ligne aléatoire est ajoutée au bas des blocs déjà existants, poussant le contenu de la grille vers le haut. –

+0

Ok, pouvez-vous fournir plus d'informations sur les heuristiques que vous devez effacer les blocs? Ou attendez-vous que l'AG conçoive les heuristiques? – cordialgerm

+0

Je n'en ai que quelques-uns: La hauteur est mauvaise. Les petites grappes sont plutôt mauvaises. Concentrez-vous sur l'abaissement des piles plus hautes avant de dégager les piles inférieures. –

1

Un codage alternatif peut impliquer:

for each possible move 
    set phenotypeBehavior to 0 
    calculate the post-move position 
    foreach block cleared add a perBlockClearedEmphasis value to phenotypeBehavior 
    foreach column add a perColumnHeightEmphasis value to your phenotypeBehavior 
    foreach cluster of size x, add a clusterSizeXEmphasis value to your phenotypeBehavior 
choose the move that produces the highest phenotypeBehavior 

Encode les différentes valeurs de _foo_Emphasis génétiquement et les faire évoluer.Vraisemblablement, par exemple, perBlockClearedEmphasis conduira vers des valeurs élevées, alors que votre heuristique "height is bad" conduira perColumnHeightEmphasis à être négatif, et clusterSizeXEmphasis sera négatif pour petit X et positif pour plus grand X.

Dans le sens le plus général , ceci suggère que votre structure génétique décrit un programme déclaratif, mais hautement paramétré.

+0

Je vois. Eh bien, je vais essayer et revenir à vous, merci :) –

Questions connexes