Python遗传算法Geatpy工具箱怎么用

一、 什么是遗传算法

遗传算法是仿真生物遗传学和自然选择机理,通过人工方式所构造的一类搜索算法,从某种程度上说遗传算法是对生物进化过程进行的数学方式仿真。生物种群的生存过程普遍遵循达尔文进化准则,群体中的个体根据对环境的适应能力而被大自然所选择或淘汰。进化过程的结果反映在个体的结构上,其染色体包含若干基因,相应的表现型和基因型的联系体现了个体的外部特性与内部机理间逻辑关系。通过个体之间的交叉、变异来适应大自然环境。生物染色体用数学方式或计算机方式来体现就是一串数码,仍叫染色体,有时也叫个体;适应能力是对应着一个染色体的一个数值来衡量;染色体的选择或淘汰则按所面对的问题是求最大还是最小来进行。

Python遗传算法Geatpy工具箱怎么用

Python遗传算法Geatpy工具箱怎么用

二、 遗传算法库Geatpy

2.1 遗传算法工具箱Geatpy参数介绍

API官方参考文档

population参数【重要属性:Chrom,Phen,Objv,CV,FitnV】

  • sizes : int – 种群规模,即种群的个体数目。

  • ChromNum : int – 染色体的数目,即每个个体有多少条染色体。

  • Encoding : str – 染色体编码方式, ‘BG’:二进制/格雷编码; ‘RI’:实整数编码,即实数和整数的混合编码; ‘P’:排列编码

  • Field : array – 译码矩阵

  • Chrom : array – 种群染色体矩阵,每一行对应一个个体的一条染色体。

  • Lind : int – 种群染色体长度。

  • ObjV : array – 种群目标函数值矩阵,每一行对应一个个体的目标函数值,每一列对应一个目标

  • FitnV : array – 种群个体适应度列向量,每个元素对应一个个体的适应度,最小适应度为0

  • CV : array – CV(Constraint Violation Value)是用来定量描述违反约束条件程度的矩阵,每行对应一个个体,每列对应一个约束

  • Phen : array – 种群表现型矩阵(即种群各染色体解码后所代表的决策变量所组成的矩阵)。

  • 如果通过CV矩阵基于可行性法则进行约束的设置,那么 不等式约束需要 ≤,等式约束 需要传入abs( ) (因为遵循值越大,适应度越小的原则)

Python遗传算法Geatpy工具箱怎么用

Python遗传算法Geatpy工具箱怎么用

  • ea.Problem.init()中的lbin与ubin(决策变量范围边界矩阵)表示范围区间的开闭,1闭合0开区间

Geatpy 结果参数介绍

success: True or False, 表示算法是否成功求解。

s较好Msg: 存储着算法停止原因的字符串。

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: (多目标优化才有) Spacing指标值。

三、优异实践

3.1 代码示例 | 参数模板

Python遗传算法Geatpy工具箱怎么用

解集:

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))

Python遗传算法Geatpy工具箱怎么用

gen: 进化代数
eval:记录评价次数
f_opt: 当代优异个体的目标函数值
f_max=当代种群最大函数值
f_min 最小 f_avg : 平均水平
f_std: 标准约束水平

Python遗传算法Geatpy工具箱怎么用

Python遗传算法Geatpy工具箱怎么用

3.2 优异实践

使用geatpy库求解有向无环图最短路

代码【最短路】一:使用geatpy库

import numpy as npimport geatpy as eaclass 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()

关于“Python遗传算法Geatpy工具箱怎么用”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“Python遗传算法Geatpy工具箱怎么用”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注亿速云行业资讯频道。

文章标题:Python遗传算法Geatpy工具箱怎么用,发布者:亿速云,转载请注明出处:https://worktile.com/kb/p/24266

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
亿速云的头像亿速云认证作者
上一篇 2022年9月10日 下午11:48
下一篇 2022年9月10日 下午11:49

相关推荐

  • 导入mdf文件损坏如何解决

    解决方法: 1、安装D-RecoveryForMSSQLServer软件。 2、进入主界面。 3、点击“打开数据库文件”。 4、选择损坏文件点击“确定”。 5、左侧为打开文件。 6、点击把所有表导入数据库。 7、将信息填完整即可。 以上就是关于“导入mdf文件损坏如何解决”这篇文章的内容,相信大家都…

    2022年9月8日
    47800
  • coreldraw如何裁剪图片

    coreldraw裁剪图片的方法 1、打开软件,导入一张图片。 2、在页面左侧找到裁剪工具点击。 3、在图片上框选出你要裁剪的区域。 4、框选好之后,双击鼠标左键就成功裁好了。 以上就是关于“coreldraw如何裁剪图片”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若…

    2022年9月26日
    72200
  • 禁止SpringBoot在项目中使用Tomcat容器的原理是什么

    SpringBoot中的Tomcat容器 SpringBoot可以说是目前热门的Java Web框架了。它将开发者从繁重的xml解救了出来,让开发者在几分钟内就可以创建一个完整的Web服务,极大的提高了开发者的工作效率。Web容器技术是Web项目必不可少的组成部分,因为任Web项目都要借助容器技术来…

    2022年9月19日
    74400
  • php字符串如何转为浮点型

    3种转换方法:1、在要转换的字符串之前加上用括号括起来的目标类型“(float)”、“(double)”或“(real)”,语法“(float)字符串”。2、使用floatval()函数,可以获取字符串变量的浮点值,语法“floatval(字符串变量)”。3、使用settype()函数,可以将字符串…

    2022年9月26日
    1.2K00
  • windows edge浏览器缓存位置如何修改

    edge浏览器缓存位置更改方法: 1、进入edge浏览器的路径位置,删除“Cache”缓存文件夹。 2、右击开始,选择“命令提示符(管理员)”。 3、输入命令 mklink /D “C:Users用户名AppDataLocalPackagesMicrosoft.MicrosoftEdge…

    2022年9月8日
    1.5K00
  • 如何进行bee-box LDAP注入的靶场练习

    如果说sql注入的本质是拼接字符串的话,那么一切可以注入的本质都是拼接字符串,LDAP注入作为注入的一种也不例外,更有趣一点的说它是在拼接圆括号(sql注入也拼接圆括号,但是更习惯性的是说它拼接字符串)。 在环境配置篇里面已经很详细的说了bee-box中ldap环境的配置,靶场练习篇更多的是php与…

    2022年9月18日
    83300
  • jquery ajax如何改成同步

    在jquery中,ajax可以将async设置为false使其同步;默认情况下jquery中的ajax为异步请求,即“async:true”,通过设置参数“asycn:false”即可,语法为“$.ajax({async: false})”。 本文操作环境:windows10系统、jquery3.6…

    2022年9月10日
    2.6K00
  • windows你需要权限来执行此操作删除不了怎么解决

    解决方法: 1、首先右键存在问题的文件夹,打开“属性” 2、接着进入上方“安全”并点击“编辑” 3、然后选中我们正在使用的用户。 (如果没有就添加一个) 4、最后在下面全部勾选“允许”并确定保存即可。 关于“windows你需要权限来执行此操作删除不了怎么解决”这篇文章的内容就介绍到这里,感谢各位的…

    2022年8月31日
    1.7K00
  • Vue3项目中如何引入SVG图标

    SVG 图标 既然是页面,肯定离不开一些图标 icon ,所以肯定要去较全的 阿里图标库 来寻找 这里讲解下如何将 阿里图标库 里面的东西,放到我们的页面上 阿里图标库 进入页面,找到 资源管理 下面的 我的项目,并创建项目 设置如下 创建好项目后,我们进入到 阿里的 素材库 里面找一些后续需要的图…

    2022年8月31日
    1.2K00
  • windows deepl如何翻译文档

    deepl翻译文档的方法 1、进入deepl官网。 2、点击这里的翻译文件,里面可以看到能翻译的文档格式。 3、点击后把你要翻译的文档拖到对话框里或者按照提示上传文件。 4、上传后选择目标语言。 5、点击翻译按钮。 6、等翻译好之后点击下载到本地就可以打开查看了。 以上就是关于“windows de…

    2022年9月26日
    59700
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部