59 votes

Génétique de la Programmation en C#

J'ai été la recherche de quelques bonnes génétique des exemples de programmation en C#. Quelqu'un connaît un bon en ligne ou de réserver des ressources? Me demande si il y a un C# bibliothèque pour Évolutif/programmation Génétique?

28voto

Jader Dias Points 23461

Après la création de ma propre Programmation Génétique didactique de l'application, j'ai trouvé Génétique complet de Cadre de Programmation appelé AForge.NET la Génétique. C'est une partie de la Aforge.NET de la bibliothèque. Il est sous licence LGPL.

24voto

Judah Himango Points 27365

MSDN avait un article l'année dernière au sujet de la programmation génétique: les Algorithmes Génétiques: la Survie du Plus fort avec Windows Forms

14voto

Scott Wisniewski Points 14420

Je déconseille effectivement générer des assemblées, sauf si vous devez absolument, surtout si vous êtes juste de commencer avec la mise en œuvre de l'algorithme génétique.

L'algorithme génétique est la plus facile à mettre en œuvre lorsque la langue cible est fonctionnel et typées dynamiquement. C'est généralement pourquoi la plupart des algorithmes génétiques recherche est écrit en LISP. Par conséquent, si vous envisagez d'implémenter en C#, vous êtes probablement mieux de définir votre propre mini "arbre de la langue", ayant l'algorithme de générer des arbres, et qu'interpréter les arbres lorsque vient le temps d'exécution de chaque itération de l'algorithme.

J'ai fait un projet de ce genre quand j'étais au collège (une implémentation de l'algorithme génétique en C#), et que c'était l'approche que j'ai adoptée.

Faire de cette façon vous donnera l'avantage d'avoir seulement 1 représentation à travailler (à l'AST représentation) qui est parfaitement adapté à la fois de l'exécution et de l'algorithme génétique "reproduction".

Alternativement, si vous essayez de générer des assemblées, vous allez probablement finir l'ajout d'une grande quantité de l'inutile complexité de l'application. Actuellement, le CLR ne permet pas à un assemblage à être déchargé à partir d'un domaine d'Application que si l'ensemble du domaine de l'application est détruit. Cela signifierait que vous auriez besoin de faire tourner une application distincte de domaine pour chaque programme généré à chaque itération de l'algorithme pour éviter l'introduction d'un géant de la fuite de mémoire dans votre application. En général, le tout serait juste d'ajouter un tas de une irritation supplémentaire.

Interprété AST, d'autre part, sont des ordures à collectionner comme tout autre objet, et donc vous n'avez pas besoin de singe autour avec de multiples domaines d'application. Si, pour des raisons de performance que vous souhaitez code-gen le résultat final, vous pouvez ajouter le support pour que plus tard. Cependant, je vous vous conseille de le faire en utilisant les DynamicMethod classe. Il vous permettra de convertir un AST dans la compilation d'un délégué dynamiquement à l'exécution. Qui va vous permettre de déployer une seule DLL, tout en conservant la génération de code des trucs aussi simples que possible. Aussi, DynamicMethod les instances sont des ordures de collection, de sorte que vous pourriez finir par employer dans le cadre de l'algorithme génétique pour accélérer les choses.

10voto

Curt Hagenlocher Points 12432

Vous pourriez être en mesure de mettre en œuvre la programmation génétique à l'aide de LINQ des arbres d'expression, il est plus susceptible de générer quelque chose d'utilisable qu'au hasard IL génération.

6voto

denis phillips Points 7349

J'ai vu une bonne discussion de haut niveau sur channel 9 par Mike Swanson à http://channel9.msdn.com/posts/Charles/Algorithms-and-Data-Structures-Mike-Swanson-Genetic-Session-Scheduler/

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X