Maison >développement back-end >Tutoriel Python >Simulation de points à l'aide d'un algorithme génétique - Partie 2
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.
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.
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!