研究算法

研究一个问题的算法(例:遗传算法)

生物类问题求解思维如下!
遗传算法(求解NPC问题)
蚁群算法
蜂群算法

可求解问题与难求解问题与不可计算问题

在这里插入图片描述

P类问题多项式问题,计算机在有限时间可求解问题
NP类问题非确定性多项式问题=难求解问题,只可以判断一个解是否正确
NPC问题完全非确定多项式问题=NP问题的所有可能答案都能在一定时间内进行验证对错的问题
  • NPC=NP-complete
  • 计算复杂性=问题本身复杂性
  • 算法复杂性=代码运行复杂性
NPC问题求解
精确解 >> 穷举法
近似解 >> 例:贪心法

遗传算法的缘起

在这里插入图片描述

生物进化基本观点 ( 优胜劣汰 + 遗传与进化 )
1:遗传信息都包含在染色体中,染色体决定生物性状
2:染色体由基因的规律排列组成,遗传与进化过程发生在染色体上
3:生物的繁殖过程由基因的复制过程完成
4. 通过同源染色体之间的交叉或染色体的变异会产生新的物种,使生物呈现新的性状
5. 对环境适应性好的基因或染色体经常比适应性差的基因或染色体有更好的机会遗传给下一代.
生物学基本概念
种群
个体
染色体
基因
适应度
选择
复制=基因传递
交配=染色体杂交
染色体突变

计算学科的遗传算法

Min F(X)=X2-19X+20 ,其中X=1,…,64之间的整数
生物学概念计算学科概念
种群解>>>>>>>>>>>>>>>>>若干可能解的集合
个体表现解>>一个可能解的表现型,例:十进制的X
染色体编码解>>一个可能解的基因型,例:二进制的X
基因基因>>>>>>>>二进制编解码的某一位0/1数
适应度适应度>>>>>>>>>一个解接近最优解的量度
选择选择>>>>>>>根据适应度选择出来的部分解
复制复制>>>>将一个解从解集复制到另一个解集
交配交叉>>两个可能解的编码通过交换某些编码位形成新的可能解的遗传操作
突变变异>>随机改变一个可能解的编码的某些片段,产生一个新的可能解的遗传操作
遗传算法求解过程的模拟
在这里插入图片描述
在这里插入图片描述

遗传算法为什么能解NPC问题

基于概率论的随机搜索如下!
导向型随机搜索>>>>随机选择的可能解与前一可能解相比,更偏向于满意解(缺点:如果初始解很差,则效率很低)
在这里插入图片描述
导向性群体搜索>>>>多条路径下的最优 在这里插入图片描述

遗传算法的适用条件已知解的表现型与基因型(知道解的10进制范围与2进制描述) + 告知适应度的计算方法(能判断可能解与精确解的适应度关系)

遗传算法解决具体应用问题实例

一维的集覆盖问题(问题的解是由一维的X1~X6组成) + 目标问题函数 在这里插入图片描述 在这里插入图片描述
二维集覆盖问题(问题的解由二维的X1~X6与T1-T6组成)
"会议室"租用问题使T1…T6讲座全部被安排的最低消费组合方式
"航班机组成员"选择问题使T1…T6航班全部被安排的最低费用方式

算法设计要点与解的编码

基础
可能解的形式>>解的表现型与基因型
怎样产生待判定的可能解>>(交叉 + 变异 + 随机)
产生多少个待判定的可能解>>(解集的规模(根据问题而定) + 进化的代数 + 随机)
怎样判断一个解是否为所求解>>(适应度 + 选择标准 + 满意解)

遗传算法设计要点
1:实际问题分析>>>解的形式 + 解的约束范围 + 解的空间
2:问题解的编码规则与解码规则
3:初始种群的规模大小(初始解集规模大小)与生成规则设计
4:遗传规则的设计>>>交叉 + 变异
5:繁衍种群的策略设计>>保留多少个可行解
6:种群个体适应度函数设计
7:优质个体选择方法设计
8:终止条件与最终解>>进化到什么程度结束

以二维集覆盖问题的解的编码为例
可行解在这里插入图片描述
行优先编码在这里插入图片描述
列优先编码在这里插入图片描述

策略选择的多样性=如何产生可能解(以交叉为例)

交叉(交叉起始点随机)
2个解交叉一个二进制位
2个解交叉一段二进制位
2个解交叉多段二进制位=多段交叉的间隔相等 + 多端交叉的间隔距离不等

策略选择的随机性(交叉起点的随机性)

随机(根据概率模型来确定如何进行随机)
个体的配对>>随机
两个染色体交叉点位置的选择>>随机
多段交叉中交叉点之间的距离>>随机
交叉后产生的解选择哪些>>随机

遗传算法总结

在这里插入图片描述

前言: 本人的原创作品经典算法研究系列,自从10年12月末至11年12月,写了近一年。可以这么说,开博头俩个月一直在整理微软等公司的面试题,而后的四个月至今,则断断续续,除了继续微软面试100题系列,和程序员编程艺术系列之外,便在写这经典算法研究系列和相关算法文章。 本经典算法研究系列,涵盖A*.Dijkstra.DP.BFS/DFS.红黑树.KMP.遗传.启发式搜索.图像特征提取SIFT.傅立叶变换.Hash.快速排序.SPFA.快递选择SELECT等15个经典基础算法,共计31篇文章,包括算法理论的研究与阐述,及其编程的具体实现。很多个算法都后续写了续集,如第二个算法:Dijkstra 算法,便写了4篇文章;sift算法包括其编译及实现,写了5篇文章;而红黑树系列,则更是最后写了6篇文章,成为了国内最为经典的红黑树教程。 OK,任何人有任何问题,欢迎随时在blog上留言评论,或来信:zhoulei0907@yahoo.cn批评指正。谢谢。以下是已经写了的15个经典算法集锦,算是一个目录+索引,共计31篇文章: 十五个经典算法研究集锦+目录 一、A*搜索算法 一(续)、A*,Dijkstra,BFS算法性能比较及A*算法的应用 二、Dijkstra 算法初探 二(续)、彻底理解Dijkstra算法 二(再续)、Dijkstra 算法+fibonacci堆的逐步c实现 二(三续)、Dijkstra 算法+Heap堆的完整c实现源码 三、动态规划算法 四、BFS和DFS优先搜索算法 五、教你透彻了解红黑树 (红黑数系列六篇文章之其中两篇) 五(续)、红黑树算法的实现与剖析 六、教你初步了解KMP算法、updated (KMP算法系列三篇文章) 六(续)、从KMP算法一步一步谈到BM算法 六(三续)、KMP算法之总结篇(必懂KMP) 七、遗传算法 透析GA本质 八、再谈启发式搜索算法 九、图像特征提取与匹配之SIFT算法 (SIFT算法系列五篇文章) 九(续)、sift算法的编译与实现 九(再续)、教你一步一步用c语言实现sift算法、上 九(再续)、教你一步一步用c语言实现sift算法、下 九(三续):SIFT算法的应用--目标识别之Bag-of-words模型 十、从头到尾彻底理解傅里叶变换算法、上 十、从头到尾彻底理解傅里叶变换算法、下 十一、从头到尾彻底解析Hash表算法 十一(续)、倒排索引关键词Hash不重复编码实践 十二、快速排序算法 (快速排序算法3篇文章) 十二(续)、快速排序算法的深入分析 十二(再续):快速排序算法之所有版本的c/c++实现 十三、通过浙大上机复试试题学SPFA 算法 十四、快速选择SELECT算法的深入分析与实现 十五、多项式乘法与快速傅里叶变换
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值