Table des matières
1. Qu'est-ce qu'un algorithme génétique ?
2. Bibliothèque d'algorithme génétique GEATPY
2.1 ALGORIHME GÉNÉTIQUE PARAMER GEATPY PARAMET PINDORMADE
3.2 Meilleures pratiques
3.1 Exemple de code | Modèle de paramètres
Maison développement back-end Tutoriel Python Une brève introduction à la boîte à outils Geatpy de l'algorithme génétique Python

Une brève introduction à la boîte à outils Geatpy de l'algorithme génétique Python

Sep 09, 2022 pm 01:38 PM
python

【Recommandation associée : Tutoriel vidéo Python3

1. Qu'est-ce qu'un algorithme génétique ?

L'algorithme génétique est un type d'algorithme de recherche construit artificiellement en simulant le mécanisme de la génétique biologique et de la sélection naturelle. Dans une certaine mesure, l'algorithme génétique est une simulation mathématique du processus d'évolution biologique. Le processus de survie des populations biologiques suit généralement les principes darwiniens de l'évolution. Les individus de la population sont sélectionnés ou éliminés par nature en fonction de leur capacité à s'adapter à l'environnement. Les résultats du processus évolutif se reflètent dans la structure de l'individu. Son chromosome contient plusieurs gènes. La connexion correspondante entre phénotype et génotype reflète la relation logique entre les caractéristiques externes et le mécanisme interne de l'individu. S'adapter à l'environnement naturel par croisement et mutation entre individus. Les chromosomes biologiques sont représentés mathématiquement ou informatiquement comme une suite de nombres, encore appelés chromosomes, parfois aussi appelés individus ; l'adaptabilité se mesure par une valeur numérique correspondant à un chromosome ; la sélection ou l'élimination des chromosomes se fait en fonction du problème rencontré. ou minimum.

2. Bibliothèque d'algorithme génétique GEATPY

2.1 ALGORIHME GÉNÉTIQUE PARAMER GEATPY PARAMET PINDORMADE

API Document de référence officiel

Paramètre de la population [Attributs importants: Chrom, Phen, OBJV, CV, FITNV]

  • sizes : int - taille de la population, c'est-à-dire le nombre d'individus dans la population.
  • ChromNum : int - Le nombre de chromosomes, c'est-à-dire le nombre de chromosomes que possède chaque individu.
  • Encodage : str - méthode d'encodage des chromosomes, 'BG' : encodage binaire/Gray ; 'RI' : encodage d'entiers réels, c'est-à-dire un encodage mixte de nombres réels et d'entiers ; - matrice de décodage
  • Chrom : array - matrice de chromosomes de population, chaque ligne correspond à un chromosome d'un individu.
  • Lind : int - longueur des chromosomes de la population.
  • ObjV : tableau - matrice de valeur de fonction objectif de population, chaque ligne correspond à la valeur de fonction objectif d'un individu, chaque colonne correspond à un objectif
  • FitnV : tableau - vecteur colonne de forme physique individuelle de population, chaque élément correspond à la forme physique d'un individuel, L'aptitude minimale est de 0
  • CV : tableau - CV (Constraint Violation Value) est une matrice utilisée pour décrire quantitativement le degré de violation des conditions de contrainte. Chaque ligne correspond à un individu, et chaque colonne correspond à une contrainte
  • .
  • Phen : array - Matrice de phénotype de population (C'est-à-dire une matrice composée des variables de décision représentées par chaque chromosome de la population après décodage).
  • Si les contraintes sont définies en fonction de la règle de faisabilité via la matrice CV, alors les contraintes d'inégalité doivent être ≤ et les contraintes d'égalité doivent être transmises dans abs() (car cela suit le principe selon lequel plus la valeur est grande, plus plus petite la condition physique)

ea.Problem.
    init
  • () lbin et ubin (matrice de limite de plage variable de décision) représentent l'ouverture et la fermeture de l'intervalle de plage, 1 intervalle fermé et 0 intervalle ouvert
Introduction aux paramètres de résultat Geatpy

success : Vrai ou Faux, indiquant si l'algorithme a été résolu avec succès.

stopMsg : Une chaîne qui stocke la raison de l'arrêt de l'algorithme. success: True or False, 表示算法是否成功求解。

stopMsg: 存储着算法停止原因的字符串。

optPop: 存储着算法求解结果的种群对象。如果无可行解,则optPop.sizes=0。optPop.Phen为决策变量矩阵,optPop.ObjV为目标函数值矩阵。

lastPop: 算法进化结束后的最后一代种群对象。

Vars: 等于optPop.Phen,此处即最优解。若无可行解,则Vars=None。

ObjV: 等于optPop.ObjV,此处即最优解对应的目标函数值。若无可行解,ObjV=None。

CV: 等于optPop.CV,此处即最优解对应的违反约束程度矩阵。若无可行解,CV=None。

startTime: 程序执行开始时间。

endTime: 程序执行结束时间。

executeTime: 算法 所用时间。

nfev: 算法评价次数

gd: (多目标优化且给定了理论最优解时才有) GD指标值。

igd: (多目标优化且给定了理论最优解时才有) IGD指标值。

hv: (多目标优化才有) HV指标值。

spacing

optPop : Objet de population qui stocke les résultats de la solution algorithmique. S'il n'y a pas de solution réalisable, optPop.sizes=0. optPop.Phen est la matrice des variables de décision, optPop.ObjV est la matrice des valeurs de la fonction objectif. 🎜🎜lastPop : L'objet de population de dernière génération une fois l'évolution de l'algorithme terminée. 🎜🎜Vars : égal à optPop.Phen, voici la solution optimale. S'il n'y a pas de solution réalisable, Vars=None. 🎜🎜ObjV : égal à optPop.ObjV, qui est la valeur de la fonction objectif correspondant à la solution optimale. S'il n'y a pas de solution réalisable, ObjV=Aucune. 🎜🎜CV : égal à optPop.CV, voici la matrice des degrés de violation de contrainte correspondant à la solution optimale. S'il n'y a pas de solution réalisable, CV=Aucune. 🎜🎜startTime : heure de début d'exécution du programme. 🎜🎜endTime : L'heure de fin d'exécution du programme. 🎜🎜executeTime : Le temps pris par l'algorithme. 🎜🎜nfev : Nombre d'évaluations de l'algorithme 🎜🎜gd : (disponible uniquement pour l'optimisation multi-objectif et la solution optimale théorique est donnée) Valeur de l'indice GD. 🎜🎜igd : (disponible uniquement pour l'optimisation multi-objectifs et la solution optimale théorique est donnée) Valeur de l'indicateur IGD. 🎜🎜hv : (disponible uniquement pour l'optimisation multi-objectifs) Valeur de l'indicateur HV. 🎜🎜spacing : (disponible uniquement pour l'optimisation multi-objectifs) Valeur de l'indicateur d'espacement. 🎜

3. Meilleures pratiques

3.1 Exemple de code | Modèle de paramètres

Ensemble de solutions :

header_regex = '|'.join(['{}'] * len(headers))
header_str = header_regex.format(*[str(key).center(width) for key, width in zip(headers, widths)])
print("=" * len(header_str))
            print(header_str)
            print("-" * len(header_str))
Copier après la connexion

gen : Algèbre évolutive
eval : Enregistrez le nombre d'évaluations
f_opt : individu optimal contemporain La valeur de fonction objectif de
f_max=valeur de fonction maximale de la population contemporaine
f_min minimum f_avg : niveau moyen
f_std : niveau de contrainte standard

3.2 Meilleures pratiques

Utilisez la bibliothèque geatpy pour résoudre le plus court graphe acyclique dirigé Road

Code [Chemin le plus court] 1 : Utilisez la bibliothèque geatpy

import numpy as np
import geatpy as ea
class MyProblem(ea.Problem):  # 继承Problem父类
    def __init__(self):
        name = 'Shortest_Path'  # 初始化name(函数名称,可以随意设置)
        M = 1  # 初始化M(目标维数)
        maxormins = [1]  # 初始化maxormins(目标最小最大化标记列表,1:最小化该目标;-1:最大化该目标)
        Dim = 10  # 初始化Dim(决策变量维数)
        varTypes = [1] * Dim  # 初始化varTypes(决策变量的类型,元素为0表示对应的变量是连续的;1表示是离散的)
        lb = [0] * Dim  # 决策变量下界
        ub = [9] * Dim  # 决策变量上界
        lbin = [1] * Dim  # 决策变量下边界 1表示闭合区间,0表示开区间
        ubin = [1] * Dim  # 决策变量上边界
        # 调用父类构造方法完成实例化
        ea.Problem.__init__(self, name, M, maxormins, Dim, varTypes, lb, ub, lbin, ubin)
        # 设置每一个结点下一步可达的结点(结点从1开始数,因此列表nodes的第0号元素设为空列表表示无意义)
        self.nodes = [[], [2, 3], [3, 4, 5], [5, 6], [7, 8], [4, 6], [7, 9], [8, 9], [9, 10], [10]]
        # 设置有向图中各条边的权重
        self.weights = {'(1, 2)': 36, '(1, 3)': 27, '(2, 4)': 18, '(2, 5)': 20, '(2, 3)': 13, '(3, 5)': 12,
                        '(3, 6)': 23,
                        '(4, 7)': 11, '(4, 8)': 32, '(5, 4)': 16, '(5, 6)': 30, '(6, 7)': 12, '(6, 9)': 38,
                        '(7, 8)': 20,
                        '(7, 9)': 32, '(8, 9)': 15, '(8, 10)': 24, '(9, 10)': 13}
    def decode(self, priority):  # 将优先级编码的染色体解码得到一条从节点1到节点10的可行路径
        edges = []  # 存储边
        path = [1]  # 结点1是路径起点
        while not path[-1] == 10:  # 开始从起点走到终点
            currentNode = path[-1]  # 得到当前所在的结点编号
            nextNodes = self.nodes[currentNode]  # 获取下一步可达的结点组成的列表
            chooseNode = nextNodes[np.argmax(
                priority[np.array(nextNodes) - 1])]  # 从NextNodes中选择优先级更高的结点作为下一步要访问的结点,因为结点从1数起,而下标从0数起,因此要减去1
            path.append(chooseNode)
            edges.append((currentNode, chooseNode))
        return path, edges
    def aimFunc(self, pop):  # 目标函数
        pop.ObjV = np.zeros((pop.sizes, 1))  # 初始化ObjV
        for i in range(pop.sizes):  # 遍历种群的每个个体,分别计算各个个体的目标函数值
            priority = pop.Phen[i, :]
            path, edges = self.decode(priority)  # 将优先级编码的染色体解码得到访问路径及经过的边
            pathLen = 0
            for edge in edges:
                key = str(edge)  # 根据路径得到键值,以便根据键值找到路径对应的长度
                if not key in self.weights:
                    raise RuntimeError("Error in aimFunc: The path is invalid. (当前路径是无效的。)", path)
                pathLen += self.weights[key]  # 将该段路径长度加入
            pop.ObjV[i] = pathLen  # 计算目标函数值,赋值给pop种群对象的ObjV属性
## 执行脚本
if __name__ == "__main__":
    # 实例化问题对象
    problem = MyProblem()
    # 构建算法
    algorithm = ea.soea_EGA_templet(problem,
                                    ea.Population(Encoding='RI', NIND=4),
                                    MAXGEN=10,  # 最大进化代数
                                    logTras=1)  # 表示每隔多少代记录一次日志信息
    # 求解
    res = ea.optimize(algorithm, verbose=True, drawing=1, outputMsg=False, drawLog=False, saveFlag=True,
                      dirName='result')
    print('最短路程为:%s' % (res['ObjV'][0][0]))
    print('最佳路线为:')
    best_journey, edges = problem.decode(res['Vars'][0])
    for i in range(len(best_journey)):
        print(int(best_journey[i]), end=' ')
    print()
Copier après la connexion

[Recommandations associées : Tutoriel vidéo Python3 ]

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 de ce site Web
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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

PHP et Python: exemples de code et comparaison PHP et Python: exemples de code et comparaison Apr 15, 2025 am 12:07 AM

PHP et Python ont leurs propres avantages et inconvénients, et le choix dépend des besoins du projet et des préférences personnelles. 1.Php convient au développement rapide et à la maintenance des applications Web à grande échelle. 2. Python domine le domaine de la science des données et de l'apprentissage automatique.

Python vs JavaScript: communauté, bibliothèques et ressources Python vs JavaScript: communauté, bibliothèques et ressources Apr 15, 2025 am 12:16 AM

Python et JavaScript ont leurs propres avantages et inconvénients en termes de communauté, de bibliothèques et de ressources. 1) La communauté Python est amicale et adaptée aux débutants, mais les ressources de développement frontal ne sont pas aussi riches que JavaScript. 2) Python est puissant dans les bibliothèques de science des données et d'apprentissage automatique, tandis que JavaScript est meilleur dans les bibliothèques et les cadres de développement frontaux. 3) Les deux ont des ressources d'apprentissage riches, mais Python convient pour commencer par des documents officiels, tandis que JavaScript est meilleur avec MDNWEBDOCS. Le choix doit être basé sur les besoins du projet et les intérêts personnels.

Explication détaillée du principe docker Explication détaillée du principe docker Apr 14, 2025 pm 11:57 PM

Docker utilise les fonctionnalités du noyau Linux pour fournir un environnement de fonctionnement d'application efficace et isolé. Son principe de travail est le suivant: 1. Le miroir est utilisé comme modèle en lecture seule, qui contient tout ce dont vous avez besoin pour exécuter l'application; 2. Le Système de fichiers Union (UnionFS) empile plusieurs systèmes de fichiers, ne stockant que les différences, l'économie d'espace et l'accélération; 3. Le démon gère les miroirs et les conteneurs, et le client les utilise pour l'interaction; 4. Les espaces de noms et les CGROUP implémentent l'isolement des conteneurs et les limitations de ressources; 5. Modes de réseau multiples prennent en charge l'interconnexion du conteneur. Ce n'est qu'en comprenant ces concepts principaux que vous pouvez mieux utiliser Docker.

Python: automatisation, script et gestion des tâches Python: automatisation, script et gestion des tâches Apr 16, 2025 am 12:14 AM

Python excelle dans l'automatisation, les scripts et la gestion des tâches. 1) Automatisation: La sauvegarde du fichier est réalisée via des bibliothèques standard telles que le système d'exploitation et la fermeture. 2) Écriture de script: utilisez la bibliothèque PSUTIL pour surveiller les ressources système. 3) Gestion des tâches: utilisez la bibliothèque de planification pour planifier les tâches. La facilité d'utilisation de Python et la prise en charge de la bibliothèque riche en font l'outil préféré dans ces domaines.

Comment exécuter des programmes dans Terminal Vscode Comment exécuter des programmes dans Terminal Vscode Apr 15, 2025 pm 06:42 PM

Dans VS Code, vous pouvez exécuter le programme dans le terminal via les étapes suivantes: Préparez le code et ouvrez le terminal intégré pour vous assurer que le répertoire de code est cohérent avec le répertoire de travail du terminal. Sélectionnez la commande Run en fonction du langage de programmation (tel que Python de Python your_file_name.py) pour vérifier s'il s'exécute avec succès et résoudre les erreurs. Utilisez le débogueur pour améliorer l'efficacité du débogage.

Qu'est-ce que VScode pour quoi est VScode? Qu'est-ce que VScode pour quoi est VScode? Apr 15, 2025 pm 06:45 PM

VS Code est le code Visual Studio Nom complet, qui est un éditeur de code multiplateforme gratuit et open source et un environnement de développement développé par Microsoft. Il prend en charge un large éventail de langages de programmation et fournit une mise en surbrillance de syntaxe, une complétion automatique du code, des extraits de code et des invites intelligentes pour améliorer l'efficacité de développement. Grâce à un écosystème d'extension riche, les utilisateurs peuvent ajouter des extensions à des besoins et des langues spécifiques, tels que les débogueurs, les outils de mise en forme de code et les intégrations GIT. VS Code comprend également un débogueur intuitif qui aide à trouver et à résoudre rapidement les bogues dans votre code.

Le code Visual Studio peut-il être utilisé dans Python Le code Visual Studio peut-il être utilisé dans Python Apr 15, 2025 pm 08:18 PM

VS Code peut être utilisé pour écrire Python et fournit de nombreuses fonctionnalités qui en font un outil idéal pour développer des applications Python. Il permet aux utilisateurs de: installer des extensions Python pour obtenir des fonctions telles que la réalisation du code, la mise en évidence de la syntaxe et le débogage. Utilisez le débogueur pour suivre le code étape par étape, trouver et corriger les erreurs. Intégrez Git pour le contrôle de version. Utilisez des outils de mise en forme de code pour maintenir la cohérence du code. Utilisez l'outil de liaison pour repérer les problèmes potentiels à l'avance.

L'extension VScode est-elle malveillante? L'extension VScode est-elle malveillante? Apr 15, 2025 pm 07:57 PM

Les extensions de code vs posent des risques malveillants, tels que la cachette de code malveillant, l'exploitation des vulnérabilités et la masturbation comme des extensions légitimes. Les méthodes pour identifier les extensions malveillantes comprennent: la vérification des éditeurs, la lecture des commentaires, la vérification du code et l'installation avec prudence. Les mesures de sécurité comprennent également: la sensibilisation à la sécurité, les bonnes habitudes, les mises à jour régulières et les logiciels antivirus.

See all articles