遗传算法:组合优化算法,按照进化论的方式启发搜索寻优解
liebian365 2024-11-19 06:32 15 浏览 0 评论
遗传算法是由美国密歇根大学的 Holland教授创立于20世纪六七十年代,受达尔文“进化论”思想的启发而设计实现。遗传算法不是通过暴力搜索解的方法,而是通过模拟种群的基因交叉和突变,经过种群一代一代的适者生存的方式寻找问题优解的方法,这在解决组合优化时解空间组合爆炸中应用广泛。
一、如何理解遗传算法
我们可以这样形象地理解遗传算法,假设我们现在需要找到一个最能抵抗寒冷的人类,那么遗传算法是这样设计的:首次创造一个较寒冷生活环境(问题的限制条件),在这个环境中投入一批各种各样的人类(初始种群),让人类在这种寒冷的环境中生存。人类一代一代的生活,周围环境也设置得越来越寒冷,同时人类在产生下一代的时候也伴随着基因的交叉和变异(遗传算法的迭代过程)。正是随着基因交叉和突变,慢慢的产生了极少数可以抵抗寒冷的基因,慢慢的拥有可以抵抗寒冷基因的人更加适应环境而得以发展,慢慢的能够适应寒冷的人类生存了下来,其它不适应环境的被淘汰了,这个过程就是解空间的慢慢趋于优的过程,遗传算法就是模拟这一过程 。
遗传算法很好理解,但是需要说明一下,遗传算法是一种寻优的方案,一种算法思想,所以遗传算法针对具体的问题需要具体的设计。
二、遗传算法
遗传算法按照其进化的思想,将算法的实施分为四个部分,编码、选择、交叉和变异。
2.1编码
编码问题是遗传算法首先要解决的问题,这是一个从基因向表现型的表达过程,是模仿基因表达的过程。如双眼皮\单眼皮由某一段基因控制,那么就说这段基因表达到了眼皮这个表现型上。编码就是建立基因与表现型的映射,编码形式主要有三种:二进制编码、整数编码和浮点数编码,三种编码各有特点。
二进制编码采用0/1数字串代表基因,如果011011中每两个0/1数字串代表一个表现型,那么表现型就是1,2,3,如果用来解决TSP问题的话,就代表选择1->2->3这条路径。
二进制编码使用方便,能够轻松处理基因交叉和变异过程,但是,二进制编码容易造成编码过剩和在交叉与变异过程中产生不稳定的新数据导致搜索结果难以收敛。
整数编码的基因和表现型一致,在TSP问题中,基因串1,2,3的表现型就是1,2,3,就代表了1->2->3这条路径。因此,整数编码很方便处理TSP问题,但是,基因交叉的过程中会带来路线中站点重复的问题。浮点数编码适应于浮点数问题,涉及较少。
2.2选择
选择的作用是将适应环境能力强的个体挑选出来,对于算法来说就是将更加满足优化条件的解挑选出来,并且在下一代中保留更多优解,这就是对搜索的启发。适应环境能力就对应着优化条件,越优的条件越强的适应能力。对于TSP问题的优化条件就是希望路径最短,即:
arg Min(distance(X)),对应arg Max(1/distance(X))
将适应函数取为:f(X)=1/distance(X),X代表一条路径。对于适应度函数,当f(X)越大,适应度越大,distance(X)也越小,这是我们所期望的。
在选择的过程中希望,适应环境能力强能够更多的选择,常常会采用轮盘赌的方式来按照体个的适应能力,按比例的选择下一代的个体。轮盘赌的方式需要求出一下概率矩阵:
轮盘赌的实施过程为:当要进行选择时,随机的产生一个概率,假如概率为0.4,那么这个处于个体1和个体2的累计概率之间,那么个体2将被选中。按照轮盘赌的方式可以按照个体的适应度的比例挑选下一代。
轮盘赌中,适应度高,对应的选择的面积大,被选中的概率高。
2.3交叉和变异
交叉和变异是模拟生物基因行为的方法,是产生新物种的途径,对应到算法中就是跳出局部最优向其它解空间搜索的方式。交叉是指两条染色体的部分片段交叉互换,变异是指染色体中的基因发生了变化,改变了原来的结构。
如果采用二进制编码的基因发生交叉的话,就是如下表中的两端基因的加粗部分的基因串交换,同时,两端基因的表现型也将发生变化。
如果采用整数编码的基因发生交叉的话,还需要考虑是否需要通过映射去重。
同样,如果采用二进制编码的基因发生变异的话,基因串中的某一个0变成1,或者1变成0,其表现型也将发生变化。
三、解决什么问题
在实际的生活中常常会遇到NP难问题,尤其是组合优化问题,随着组合的增加解的空间也指数的增加。因为无法在可接受的时间内搜索得到问题最优解,这时就需要采用启发式搜索优解的方法,在可接受的时间范围内得到较优解甚至最优解。遗传算法可以派上用场了,可以解决组合优化问题,如:排课问题、生产计划规划、旅行商问题等。
本文的版权归算法卡农所有,抄袭等侵权行为必究!
喜欢我的话,加个关注吧,有更加精彩的内容等着大家。
- 上一篇:什么是隔代交叉遗传
- 下一篇:利用遗传算法求解几何问题
相关推荐
- 4万多吨豪华游轮遇险 竟是因为这个原因……
-
(观察者网讯)4.7万吨豪华游轮搁浅,竟是因为油量太低?据观察者网此前报道,挪威游轮“维京天空”号上周六(23日)在挪威近海发生引擎故障搁浅。船上载有1300多人,其中28人受伤住院。经过数天的调...
- “菜鸟黑客”必用兵器之“渗透测试篇二”
-
"菜鸟黑客"必用兵器之"渗透测试篇二"上篇文章主要针对伙伴们对"渗透测试"应该如何学习?"渗透测试"的基本流程?本篇文章继续上次的分享,接着介绍一下黑客们常用的渗透测试工具有哪些?以及用实验环境让大家...
- 科幻春晚丨《震动羽翼说“Hello”》两万年星间飞行,探测器对地球的最终告白
-
作者|藤井太洋译者|祝力新【编者按】2021年科幻春晚的最后一篇小说,来自大家喜爱的日本科幻作家藤井太洋。小说将视角放在一颗太空探测器上,延续了他一贯的浪漫风格。...
- 麦子陪你做作业(二):KEGG通路数据库的正确打开姿势
-
作者:麦子KEGG是通路数据库中最庞大的,涵盖基因组网络信息,主要注释基因的功能和调控关系。当我们选到了合适的候选分子,单变量研究也已做完,接着研究机制的时便可使用到它。你需要了解你的分子目前已有哪些...
- 知存科技王绍迪:突破存储墙瓶颈,详解存算一体架构优势
-
智东西(公众号:zhidxcom)编辑|韦世玮智东西6月5日消息,近日,在落幕不久的GTIC2021嵌入式AI创新峰会上,知存科技CEO王绍迪博士以《存算一体AI芯片:AIoT设备的算力新选择》...
- 每日新闻播报(September 14)_每日新闻播报英文
-
AnOscarstatuestandscoveredwithplasticduringpreparationsleadinguptothe87thAcademyAward...
- 香港新巴城巴开放实时到站数据 供科技界研发使用
-
中新网3月22日电据香港《明报》报道,香港特区政府致力推动智慧城市,鼓励公私营机构开放数据,以便科技界研发使用。香港运输署21日与新巴及城巴(两巴)公司签署谅解备忘录,两巴将于2019年第3季度,开...
- 5款不容错过的APP: Red Bull Alert,Flipagram,WifiMapper
-
本周有不少非常出色的app推出,鸵鸟电台做了一个小合集。亮相本周榜单的有WifiMapper's安卓版的app,其中包含了RedBull的一款新型闹钟,还有一款可爱的怪物主题益智游戏。一起来看看我...
- Qt动画效果展示_qt显示图片
-
今天在这篇博文中,主要实践Qt动画,做一个实例来讲解Qt动画使用,其界面如下图所示(由于没有录制为gif动画图片,所以请各位下载查看效果):该程序使用应用程序单窗口,主窗口继承于QMainWindow...
- 如何从0到1设计实现一门自己的脚本语言
-
作者:dong...
- 三年级语文上册 仿写句子 需要的直接下载打印吧
-
描写秋天的好句好段1.秋天来了,山野变成了美丽的图画。苹果露出红红的脸庞,梨树挂起金黄的灯笼,高粱举起了燃烧的火把。大雁在天空一会儿写“人”字,一会儿写“一”字。2.花园里,菊花争奇斗艳,红的似火,粉...
- C++|那些一看就很简洁、优雅、经典的小代码段
-
目录0等概率随机洗牌:1大小写转换2字符串复制...
- 二年级上册语文必考句子仿写,家长打印,孩子照着练
-
二年级上册语文必考句子仿写,家长打印,孩子照着练。具体如下:...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- wireshark怎么抓包 (75)
- qt sleep (64)
- cs1.6指令代码大全 (55)
- factory-method (60)
- sqlite3_bind_blob (52)
- hibernate update (63)
- c++ base64 (70)
- nc 命令 (52)
- wm_close (51)
- epollin (51)
- sqlca.sqlcode (57)
- lua ipairs (60)
- tv_usec (64)
- 命令行进入文件夹 (53)
- postgresql array (57)
- statfs函数 (57)
- .project文件 (54)
- lua require (56)
- for_each (67)
- c#工厂模式 (57)
- wxsqlite3 (66)
- dmesg -c (58)
- fopen参数 (53)
- tar -zxvf -c (55)
- 速递查询 (52)