| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> 遗传算法GA原理及实现(python实现GA求解TSP代码) -> 正文阅读 |
|
[人工智能]遗传算法GA原理及实现(python实现GA求解TSP代码) |
目录 1.遗传算法描述遗传算法(Genetic Algorithms,GA)是1962年由美国Michigan大学的Holland教授提出的模拟自然界遗传机制和生物进化论而成的一种并行随机搜索最优化方法。 遗传算法将“优胜劣汰,适者生存”的生物进化原理引入优化参数形成的编码串联群体中,按所选择的适应度函数并通过遗传中的复制、交叉及变异对个体进行筛选,使适适应度高的个体被保留下来,组成新的群体,新的群体既继承了上一代的信息,又优于上一代。这样周而复始,群体中个体适应度不断提高,直到满足一定的条件。遗传算法的算法简单,可并行处理,并能到全局最优解。 在遗传算法中,染色体应的是数据或数组,通常是由一维的串结构数据来表示,串上各个位置对应基因的取值。基因组成的串就是染色体,或者称为基因型个体(individuals)。一定数量的个体组成了群体(population)。群体中个体的数目称为群体大小(populationsize),也称为群体规模。而各个个体对环境的适应程度叫做适应度(fitness) 1.1遗传算法构成要素(1)染色体编码 群体中的个体使用固定长度的二进制符号串表示,初始群体中各个个体的基因值用均匀分布的随机数生成,如X:100111001000101101表示一个个体,其染色体长度为18。 (2)个体适应度评价 按与个体适应度成正比的概率来决定当前群体中每个个体遗传到下一代群体中的机会多少。适应度函数是非负的,而目标函数有负有正,因此需要预先确定好由目标函数值到个体适应度之间的转换规则 (3)遗传算子
(4)运行参数 遗传算法可定义为一个元组:
1.2遗传算法流程(1)选择编码策略,把参数集合X和域转换为相应编码空间S (2)定义适应值函数 (3)定义遗传策略,包括选择群体大小、选择、交叉、变异方法以及确定交叉概率、变异概率等遗传参数 (4)随机初始化生成群体P(t) (5)计算群体中个体的适应值? (6)按照遗传策略,运用选择、交叉和变异操作作用于群体,形成下一代群体 (7)判断群体性能是否满足某一指标,或者已完成预定迭代次数,不满足则返回步骤(6),或者修改遗传策略再返回步骤(6) 2.遗传算法设计2.1编码与解码(1)编码 从问题的解(solution)到基因型的映射称为编码,即把一个问题的可行解从其解空间转换到遗传算法的搜索空间的转换方法。遗传算法在进行搜索之前先将解空间的解表示成遗传算法的基因型串(也就是染色体)结构数据,这些串结构数据的不同组合就构成了不同的点。常见的编码方法有二进制编码、实数编码,格雷码编码、 浮点数编码、各参数级联编码、多参数交叉编码等。
?其中为二进制编码精度,公式为:
?(2)解码 假设一个染色体的编码为,对应解码公式为 ?2.2适应度函数适应度值非负。适应度函数表明个体或解的优劣性。对于不同的问题,适应度函数的定义方式不同。根据具体问题,计算群体P(t)中各个个体的适应度。将目标函数值变成个体适应度 (1)目标函数最大值的优化:为一个适当相对比较小的数 ?(2)目标函数最小值的优化:为一个适当相对比较大的数字 ?选取方法:预先指定的一个较小(大)的数;进化到当前代为止的最小(大)目标函数值;当前代或最近几代群体中的最小(大)目标函数值。 适应度尺度变换是指算法迭代的不同阶段,能够通过适当改变个体的适应度大小,进而避免群体间适应度相当而造成的竞争减弱,导致种群收敛于局部最优解。适应度尺度变换包括线性尺度变换、乘幂尺度变换以及指数尺度变换。 (1)线性尺度变换:a为比例系数,b为平移系数,F为变换前适应度尺度,变换后适应度尺度 (2)乘幂尺度变换:将原适应度尺度F取k次幂 (3)指数尺度变换 ?2.3选择算子选择算子:从当前代群体中选择出一些比较优良的个体,并将其复制到下一代群体中。选择原则有适应值比例,排名,局部竞争机制。 常用选择算子:比例选择算子,指个体被选中并遗传到下一代群体中的概率与该个体的适应度大小成正比。 比例选择算子方法:轮盘选择。个体适应度越高,被选中的概率越大 ——个体被选中的概率 ——个体的适应度? ——群体累加适应度 ?2.4交叉算子交叉算子:从种群中随机选择两个个体,通过两个染色体的交换组合,把父串的优秀特征遗传给子串,从而产生新的优秀个体。 常用交叉算子:单点交叉算子 。 单点交叉算子方法:对群体中的个体进行两两随机配对;每一对相互配对的个体,随机设置某一基因座之后的位置为交叉点;对每一对相互配对的个体,依设定的交叉概率 pc 在其交叉点处相互交换两个个体的部分染色体,从而产生出两个新的个体。 其它交叉算子:双点交叉,多点交叉,均匀交叉(每个位置都以等概率进行交叉),算术交叉 ?交叉检测:有时交叉会产生不合法的个体,如何保证所产生的个体合法?一种方法是为参与交换的数增加一个映射,将该映射应用于未交换的等位基因即可。
?2.5变异算子变异算子:对于基本遗传算法中用二进制编码符号串所表示的个体,若需要进行变异操作的某一基因座上的原有基因值为 0 ,则变异操作将该基因值变为 1 ,反之,若原有基因值为 1 ,则变异操作将其变为 0 。 常见变异算子:基本位变异算子 方法:对个体的每一个基因座,依变异概率指定其为变异点;对每一个指定的变异点,对其基因值做取反运算或用其它等位基因值来代替,?从而产生出一个新的个体。 2.6初始化种群初始群体中的个体一般是随机产生的。 我们往往希望在问题解空间均匀采样,随机生成一定数目的个体(为群体规模的2倍,即2n),然后从中挑出较好的个体构成初始群体。 对于二进制编码,染色体位串上的每一位基因在{0,1}上随机均匀选择,所以群体初始化至少需要L×n次随机取值。 2.7算法终止(1)预先规定最大演化代数 (2)连续多代后解的适应值没有明显改进,则终止 (3)达到明确的解目标,则终止。 3.GA求解TSP(python)(1)编码:整数排列编码,对于n个城市的TSP问题,染色体为n段,每一段为对应城市的编号,如10个城市的TSP问题{0,1,2,3,4,5,6,7,8,9),则[1 3 8 2 0 6 4 7 5 9]为一个合法的染色体。 (2)解码:获取每个个体对应城市的横坐标line_x和纵坐标line_y (2)适应度函数:设走遍n个城市的总距离为dis,则设置适应度函数为 (3)按照适应度函数比值选择个体即轮盘选择 (4)交叉:对个体A:[1 3 8 2 0 6 4 7 5 9]随机判断每个点是否交叉:[False ?True ?True False ?True False ?True False False ?True],保留False对应的城市keep:[1 2 6 7 5],选择另一个交叉个体B:[4 8 0 6 5 9 1 2 3 7],判断B中不在keep里的城市:[ True ?True ?True False False ?True False False ?True False],选择True为交换城市swap:[4 8 0 9 3],将keep和swap连接起来成为新的个体:[1 2 6 7 5 4 8 0 9 3] (5)变异:对每个点生成随机概率与变异概率比较判断是否需要变异,随机找到另一个变异点,交换两点的数值,如[7 4 6 0 1 5 9 3 2 8]变异后变成[7 4 0 6 1 5 8 3 2 9],位置3,4和位置7,9变异 (6)进化:依照适应度函数对初始群体进行整体选择,依次对每个个体进行交叉和变异,更新群体 (7)主函数:给定初始种群和城市坐标进行解码获取坐标数据,计算每个个体的总距离和适应度函数,通过适应度函数进化,找到每一次进化适应度函数最高的个体索引,绘图并显示总距离 以下代码来自莫烦python,其中一些numpy用法见numpy笔记(vstack,random.permutation,empty_like,empty,diff,random.choice,random.randint,isin)_bujbujbiu的博客-CSDN博客
? |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 10:14:56- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |