遗传算法(GA)原理以及matlab与python实现_多目标遗传算法matlab程序-程序员宅基地

技术标签: matlab  算法  遗传算法  python  

1.概述

遗传算法,模拟达尔文进化论的自然选择和遗传学机理的生物进化过程的计算模型,一种选择不断选择优良个体的算法。谈到遗传,想想自然界动物遗传是怎么来的,自然主要过程包括染色体的选择,交叉,变异,这些操作后,保证了以后的个体基本上是最优的,那么以后再继续这样下去就可以一直最优了。

解决的问题:
主要还是解决优化类问题,尤其是那种不能直接解出来的很复杂的问题。

2.技术

2.1遗传编码

(1)二进制编码

二进制编码的字符串长度与问题所求解的精度有关。需要保证所求解空间内的每一个个体都可以被编码。

优点:编、解码操作简单,遗传、交叉便于实现

缺点:长度大

(2)序列编码
求解TSP问题时,使用序列编码更为合理。假如有10个城市的TSP问题,城市序号为{1,2,3,…,10},则编码串为1 2 3 … 10。
(3)其他编码方法

格雷码、浮点数编码、符号编码、多参数编码等。

2.2适应函数(评价函数)

适应度函数要有效反映每一个染色体与问题的最优解染色体之间的差距。

适应度函数的选择对优化速度和平滑性都有影响。这也正是适应度函数选择的意义,选的好的话就可以加快优化效果。

对于优化问题,需要通过建立适应函数与目标函数的映射关系,保证映射后的适应值是非负的,而且目标函数的优化方向应对应于适应值的增大方向。

针对进化过程中关于遗传操作的控制的需要,选择函数变换

需要针对进化过程,制定合适的选择策略,使得遗传算法获得最大的进化能力和最佳的搜索效果。

详解与其他的适应度变化方法参考目标函数和适应度函数内容

我们对个体的适应度调整的目的有两个:

一是维持个体之间的合理差距,加速竞争。

二是避免个体之间的差距过大,限制竞争。

对于多目标优化可以参考遗传算法关于多目标优化python(详解)

2.3遗传算子

遗传算子一般包括了复制(reproduction或选择selection)、杂交(crossover或重组recombination)、变异(mutation)三种基本形式。

2.3.1选择算子

通过选择算子模拟“优胜劣汰”,适应度高的个体被遗传到下一代的概率较大,适应度低的算子被遗传到下一代的概率较小。

常用的选择算法:
(1)轮盘赌选择法(适应值比例选择),即令在这里插入图片描述
表示群体的适应度函数值的总和,fi表示群体中第i个染色体的适应度值,则它产生后代的能力刚好为其适应度值所占的份额。在这里插入图片描述
(2)Blotzmann选择
在种群的进化过程中,不同阶段需要不同的选择压力,早期压力较小,后期压力较大。
在这里插入图片描述
其中f(a)表示适应度函数值

(3)联赛规则
从当前种群中随机选择一定数量的个体,将其中适应值最大的个体保存到下一代。
(4)精英选择
如果下一代群体的最佳个体适应值小于当前群体最佳个体的适应值,则将当前群体的最佳个体或者适应值大于下一代最佳个体适应值的多个个体直接复制到下一代,随机替换掉或者替换掉最差的下一代群体中的相应数据的个体。这种遗传算法一般被称为e—GA。

2.3.2交叉算子

交叉运算是指对两个相互配对的染色体按某种方式相互交换其部分基因,从而形成两个新的个体;
交叉运算是遗传算法区别于其他进化算法的重要特征,是产生新个体的主要方法。

在交叉之前需要将群体中的个体进行配对,一般采取随机配对原则。

二进制编码、十进制编码常用:

  • 单点交叉
  • 双点交叉(多点交叉,交叉点数越多,个体的结构被破坏的可能性越大,一般不采用多点交叉的方式)

实数编码常用:

  • 双个体算术交叉:x1’=ax1+(1-a)x2,x2’=ax2+(1-a)x1,其中a∈(0,1)
  • 多个体算术交叉

组合优化常用:

  • 部分映射交叉:随机选取两个点,交换两个点之间的片段,若两点外的基因与换过来的基因重合,则替换
  • 次序交叉
  • 基于位置的交叉

2.3.3变异算子

遗传算法中的变异运算是指将个体染色体编码串中的某些基因座上的基因值用该基因座的其他等位基因来替换,从而形成一个新的个体。

就遗传算法运算过程中产生新个体的能力方面来说,交叉运算是产生新个体的主要方法,它决定了遗传算法的全局搜索能力;而变异运算只是产生新个体的辅助方法,但也是必不可少的一个运算步骤,它决定了遗传算法的局部搜索能力。交叉算子与变异算子的共同配合完成了其对搜索空间的全局搜索和局部搜索,从而使遗传算法能以良好的搜索性能完成最优化问题的寻优过程。

  • 二进制或十进制的编码:单位置或多位置替换式变异
  • 实数编码:扰动式变异:包括互换操作(两随机位置互换)、逆序操作(两随机位置间的数字逆转)、插入操作(讲随机选择的某个点插入到串的不同随机位置)

2.4运行参数

研究参数的选取和控制是GA研究的重要内容之一。

  • 编码长度。编码长度取决于问题解的精度,精度越高,编码越长;
  • 种群规模N。规模小,收敛快但降低了种群的多样性,N=20-200;
  • 交叉概率C。较大的交叉概率容易破坏种群中已形成的优良结构,使搜索具有太大随机性;较小的交叉概率发现新个体的速度太慢,一般取值为P_c=0.6-0.99
  • 变异概率M。变异概率太小,则变异操作产生新个体的能力和抑制早熟现象的能力会较差;变异概率过高随机性过大,一般建议取值范围为0.005~0.01
  • 终止进化代数。算法运行结束的条件之一,一般取100~1000,或者可以判断收敛程度来判断(判断基因位的相似程度)
  • 代沟G。用于控制每代中种群被替换的比例。
  • 尺度窗口W。作出目标值到适配值的调整。
  • 选择策略S。通常为两种,其一为纯选择;其二为保优策略。

3.基本流程

1)种群初始化。通过随机生成的方式来创造一个种群,一般该种群的数量为100~500,采用二进制将一个染色体(解)编码为基因型,随后用进制转化,将二进制的基因型转化成十进制的表现型,或者反之亦可。

2)适应度计算(种群评估)。

3)选择(复制)操作。根据种群中个体的适应度大小,通过轮盘赌等方式将适应度高的个体从当前种群中选择出来。其中轮盘赌即是与适应度成正比的概率来确定各个个体遗传到下一代群体中的数量。

具体步骤如下:

(1)首先计算出所有个体的适应度总和Σfi。

(2)其次计算出每个个体的相对适应度大小fi/Σfi,类似于softmax。

(3)再产生一个0到1之间的随机数,依据随机数出现在上述哪个概率区域内来确定各个个体被选中的次数。

4)交叉(交配)运算。该步骤是遗传算法中产生新的个体的主要操作过程,它用一定的交配概率阈值(pc,一般是0.4到0.99)来控制是否采取单点交叉,多点交叉等方式生成新的交叉个体。

具体步骤如下:

(1)先对群体随机配对。

(2)再随机设定交叉点的位置。

(3)再互换配对染色体间的部分基因。

5)变异运算。该步骤是产生新的个体的另一种操作。一般先随机产生变异点,再根据变异概率阈值(pm,一般是0.0001到0.1)将变异点的原有基因取反。

6)终止判断。如果满足条件(迭代次数,一般是200~500)则终止算法,否则返回step2。
在这里插入图片描述

4.matlab代码

使用matlab求解一个一元函数的最大值的代码链接 点击这里

5.python代码

使用python求解一个二元函数的最大值的代码链接 点击这里

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/a999999123/article/details/109310697

智能推荐

5个超厉害的资源搜索网站,每一款都可以让你的资源满满!_最全资源搜索引擎-程序员宅基地

文章浏览阅读1.6w次,点赞8次,收藏41次。生活中我们无时不刻不都要在网站搜索资源,但就是缺少一个趁手的资源搜索网站,如果有一个比较好的资源搜索网站可以帮助我们节省一大半时间!今天小编在这里为大家分享5款超厉害的资源搜索网站,每一款都可以让你的资源丰富精彩!网盘传奇一款最有效的网盘资源搜索网站你还在为找网站里面的资源而烦恼找不到什么合适的工具而烦恼吗?这款网站传奇网站汇聚了4853w个资源,并且它每一天都会持续更新资源;..._最全资源搜索引擎

Book类的设计(Java)_6-1 book类的设计java-程序员宅基地

文章浏览阅读4.5k次,点赞5次,收藏18次。阅读测试程序,设计一个Book类。函数接口定义:class Book{}该类有 四个私有属性 分别是 书籍名称、 价格、 作者、 出版年份,以及相应的set 与get方法;该类有一个含有四个参数的构造方法,这四个参数依次是 书籍名称、 价格、 作者、 出版年份 。裁判测试程序样例:import java.util.*;public class Main { public static void main(String[] args) { List <Book>_6-1 book类的设计java

基于微信小程序的校园导航小程序设计与实现_校园导航微信小程序系统的设计与实现-程序员宅基地

文章浏览阅读613次,点赞28次,收藏27次。相比于以前的传统手工管理方式,智能化的管理方式可以大幅降低学校的运营人员成本,实现了校园导航的标准化、制度化、程序化的管理,有效地防止了校园导航的随意管理,提高了信息的处理速度和精确度,能够及时、准确地查询和修正建筑速看等信息。课题主要采用微信小程序、SpringBoot架构技术,前端以小程序页面呈现给学生,结合后台java语言使页面更加完善,后台使用MySQL数据库进行数据存储。微信小程序主要包括学生信息、校园简介、建筑速看、系统信息等功能,从而实现智能化的管理方式,提高工作效率。

有状态和无状态登录

传统上用户登陆状态会以 Session 的形式保存在服务器上,而 Session ID 则保存在前端的 Cookie 中;而使用 JWT 以后,用户的认证信息将会以 Token 的形式保存在前端,服务器不需要保存任何的用户状态,这也就是为什么 JWT 被称为无状态登陆的原因,无状态登陆最大的优势就是完美支持分布式部署,可以使用一个 Token 发送给不同的服务器,而所有的服务器都会返回同样的结果。有状态和无状态最大的区别就是服务端会不会保存客户端的信息。

九大角度全方位对比Android、iOS开发_ios 开发角度-程序员宅基地

文章浏览阅读784次。发表于10小时前| 2674次阅读| 来源TechCrunch| 19 条评论| 作者Jon EvansiOSAndroid应用开发产品编程语言JavaObjective-C摘要:即便Android市场份额已经超过80%,对于开发者来说,使用哪一个平台做开发仍然很难选择。本文从开发环境、配置、UX设计、语言、API、网络、分享、碎片化、发布等九个方面把Android和iOS_ios 开发角度

搜索引擎的发展历史

搜索引擎的发展历史可以追溯到20世纪90年代初,随着互联网的快速发展和信息量的急剧增加,人们开始感受到了获取和管理信息的挑战。这些阶段展示了搜索引擎在技术和商业模式上的不断演进,以满足用户对信息获取的不断增长的需求。

随便推点

控制对象的特性_控制对象特性-程序员宅基地

文章浏览阅读990次。对象特性是指控制对象的输出参数和输入参数之间的相互作用规律。放大系数K描述控制对象特性的静态特性参数。它的意义是:输出量的变化量和输入量的变化量之比。时间常数T当输入量发生变化后,所引起输出量变化的快慢。(动态参数) ..._控制对象特性

FRP搭建内网穿透(亲测有效)_locyanfrp-程序员宅基地

文章浏览阅读5.7w次,点赞50次,收藏276次。FRP搭建内网穿透1.概述:frp可以通过有公网IP的的服务器将内网的主机暴露给互联网,从而实现通过外网能直接访问到内网主机;frp有服务端和客户端,服务端需要装在有公网ip的服务器上,客户端装在内网主机上。2.简单的图解:3.准备工作:1.一个域名(www.test.xyz)2.一台有公网IP的服务器(阿里云、腾讯云等都行)3.一台内网主机4.下载frp,选择适合的版本下载解压如下:我这里服务器端和客户端都放在了/usr/local/frp/目录下4.执行命令# 服务器端给执_locyanfrp

UVA 12534 - Binary Matrix 2 (网络流‘最小费用最大流’ZKW)_uva12534-程序员宅基地

文章浏览阅读687次。题目:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=93745#problem/A题意:给出r*c的01矩阵,可以翻转格子使得0表成1,1变成0,求出最小的步数使得每一行中1的个数相等,每一列中1的个数相等。思路:网络流。容量可以保证每一行和每一列的1的个数相等,费用可以算出最小步数。行向列建边,如果该格子是_uva12534

免费SSL证书_csdn alphassl免费申请-程序员宅基地

文章浏览阅读504次。1、Let's Encrypt 90天,支持泛域名2、Buypass:https://www.buypass.com/ssl/resources/go-ssl-technical-specification6个月,单域名3、AlwaysOnSLL:https://alwaysonssl.com/ 1年,单域名 可参考蜗牛(wn789)4、TrustAsia5、Alpha..._csdn alphassl免费申请

测试算法的性能(以选择排序为例)_算法性能测试-程序员宅基地

文章浏览阅读1.6k次。测试算法的性能 很多时候我们需要对算法的性能进行测试,最简单的方式是看算法在特定的数据集上的执行时间,简单的测试算法性能的函数实现见testSort()。【思想】:用clock_t计算某排序算法所需的时间,(endTime - startTime)/ CLOCKS_PER_SEC来表示执行了多少秒。【关于宏CLOCKS_PER_SEC】:以下摘自百度百科,“CLOCKS_PE_算法性能测试

Lane Detection_lanedetectionlite-程序员宅基地

文章浏览阅读1.2k次。fromhttps://towardsdatascience.com/finding-lane-lines-simple-pipeline-for-lane-detection-d02b62e7572bIdentifying lanes of the road is very common task that human driver performs. This is important ..._lanedetectionlite

推荐文章

热门文章

相关标签