2010-10-15 3 views
4

Mon previous question dément mon inexpérience et était basé sur une hypothèse. Maintenant, je suis beaucoup plus sage. (Mettez 1s et 0s dans une chaîne? Pah! Je ris à la suggestion!)Quelle est la manière sensée de représenter un génome binaire pour un algorithme génétique?

Ma question est alors, comment devrais-je encoder mes génomes?

Sur le papier, ils se présentent comme suit:

01010011010110010 

17 bits qui encode (dans certains cas isolés et, dans certains cas, en tant que groupes) les paramètres à tester.

Les exigences sont les suivantes:

  1. a besoin d'être évolutive. Il pourrait y avoir 17 pour le moment, mais cela pourrait augmenter/diminuer au fur et à mesure que les options sont ajoutées, supprimées ou modifiées.
  2. Chaque bit doit être individuellement retournable, pour représenter des mutations ponctuelles.
  3. Idéalement, il devrait être facile de prendre le dernier X% de deux génomes et de les inverser (représentant un croisement).
  4. Il doit y avoir une manière simple de représenter le génome en texte clair. Ici, l'accent est mis sur la commodité plutôt que sur la traductibilité humaine. (Pensez URL raccourcis.)

Quelqu'un a eu d'excellentes idées? (S'il est utile, j'utilise C#.)

+0

Les groupes de codage dans un 'BitArray' peuvent générer des membres non valides lors de la mutation ou du croisement des bits. Jetez un oeil [ici] (http://www.obitko.com/tutorials/genetic-algorithms/encoding.php) pour quelques codages alternatifs. –

Répondre

3

Comme Andrey dit, BitArray est probablement votre meilleure réponse, il répond à tous vos besoins.

1) vous pouvez régler le nombre de bits avec le constructeur

2), il vous permet de définir (ou désactiver), Ou, Et, Xor, pas sur les bits

3) vous pouvez boucle sur votre dernier x% à faire le crossover

4) il y a un ToString qui devrait vous permettre de le sortir.

Questions connexes