Maison >développement back-end >Tutoriel Python >Simulation de points à l'aide d'un algorithme génétique - Partie 2

Simulation de points à l'aide d'un algorithme génétique - Partie 2

Barbara Streisand
Barbara Streisandoriginal
2025-01-16 18:58:11397parcourir

Ce didacticiel améliore une simulation d'algorithme génétique en ajoutant des fonctionnalités telles que la mise en évidence des élites, une complexité accrue des obstacles, un compteur « Atteint » et une sélection croisée. Décomposons les améliorations.

Partie 1 : Améliorations visuelles et complexité des obstacles

La simulation est améliorée pour distinguer visuellement les points d'élite (ceux qui fonctionnent le mieux dans la génération précédente) en les colorant en bleu. Ceci est réalisé en ajoutant un paramètre booléen is_elite à la méthode Dot de la classe draw et en appliquant conditionnellement la couleur bleue. La méthode Population de la classe draw est modifiée pour transmettre ce booléen selon qu'un point se trouve ou non dans la liste elites.

La génération d'obstacles a été refactorisée pour une plus grande flexibilité. Les classes Obstacle et Goal sont déplacées vers un fichier obstacles.py distinct, favorisant une organisation du code plus propre. Un fichier constants.py est introduit pour contenir des variables globales telles que les dimensions de l'écran et la taille de la population, empêchant ainsi la redondance entre les fichiers. Plusieurs configurations d'obstacles (OBSTACLES0, OBSTACLES1, OBSTACLES2, OBSTACLES3, OBSTACLES4, OBSTACLES5) sont définies dans obstacles.py, permettant de basculer facilement entre les différents niveaux de défi. Le script principal importe ces configurations et sélectionne celle souhaitée. Une vérification est ajoutée pour garantir que l'objectif est toujours présent, même lors de l'utilisation de listes d'obstacles générées via des compréhensions de listes (comme OBSTACLES4).

Un compteur « Atteint » est ajouté pour afficher le nombre de points ayant réussi à atteindre l'objectif dans la génération précédente. Ceci est implémenté en modifiant la méthode generate_next_generation dans la classe Population pour compter et renvoyer cette valeur. La boucle principale affiche alors ce décompte à l'écran.

Dots Simulation using Genetic Algorithm - Part 2

Simulation avec élites mises en avant et obstacles

Dots Simulation using Genetic Algorithm - Part 2

Simulation de course à pied OBSTACLES0 obstacles

Partie 2 : Implémentation du croisement à point unique

La simulation passe de la réplication au croisement en un seul point pour la génération de progéniture. Une méthode de classe crossover est ajoutée à la classe Dot. Cette méthode prend deux points parents en entrée, sélectionne un point de croisement aléatoire et crée deux descendants en combinant des parties de la séquence de mouvement de chaque parent (représentée sous la forme d'une liste de vecteurs de direction). La méthode generate_next_generation est mise à jour pour utiliser cette méthode de croisement, générant des paires de progénitures au lieu de clones uniques. La mutation continue de s'appliquer à la progéniture.

Dots Simulation using Genetic Algorithm - Part 2

Crossover en un seul point

La simulation améliorée offre une visualisation améliorée, une difficulté réglable et un mécanisme de reproduction plus sophistiqué, ce qui en fait un exemple plus robuste et plus perspicace d'algorithme génétique. Les améliorations futures mentionnées incluent la fonctionnalité de sauvegarde/chargement et l’optimisation de la vitesse. L'auteur encourage également à rejoindre sa communauté Discord pour une collaboration plus approfondie.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn