<h1>遗传算法求解二元函数最值
<h2>1.解析式分析</h2>
![表达式](https://raw.githubusercontent.com/baiyaoyu/GA/master/img/fun.JPG)
<font size=4>
*特点*
+ 两个自变量
+ 范围[-10,10]
+ 周期函数
<h2>2.遗传算法解析</h2>
>遗传算法(Genetic Algorithm)是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解的方法。(百度百科)
*进化学说的一些观点*
1. 进化以中群为单位
2. 自然选择决定进化的方向
3. 变异具有不确定性
4. 变异为进化提供原材料
遗传算法需要模拟进化中的几个过程
+ 可能发生交叉互换。
+ 可能产生基因突变。
+ 每个个体具有不同的个体差异,产生子代的概率不同,模拟自然选择。
以上几点很重要,前两点产生新的类型,虽然不定向变异,但有机会产生更优的答案。而第三点,隐含了启发式信息。结合进化学说中的观点,可知,应选择一定数量的个体来模拟进化(种群为单位)。
*遗传算法解决问题的一般思路*
![pro](https://raw.githubusercontent.com/baiyaoyu/GA/master/img/pro.jpg)
<h2>3.编程实现</h2>
语言:python
版本:v3.6.0
库:math copy numpy matplotlib
主要函数:
1. 编码函数Encode()
2. 解码函数Decode()
3. 变异函数getChange()
4. 交叉函数getSwap()
5. 产生子代getNextGen()
编码方式分类
1. 二进制编码
2. 格雷码编码
3. 浮点数编码
4. 排列编码
本程序采用二进制编码,将两个自变量的取值精确到0.01(1/1024),用22位二进制编码变量。编码基因型使得交叉和变异变得容易模拟,只需模拟某一位的编码的改变或互换即可模拟表现型的改变。
子代个体产生方法
1. 轮盘赌选择法
2. 随即遍历抽样
3. 锦标赛算法
适应度评估是通过函数的值的大小来评估,然而此函数的值中有负数的存在。轮盘赌算法不适用,本程序采用将适应度统一增加225。当然也有其他的解决思路,可以采用锦标赛方法产生后续个体,这种方法类似于有放回的摸球方法。
<h2>4.结果分析及总结</h2>
![图像](https://raw.githubusercontent.com/baiyaoyu/GA/master/img/Figure.png)
其中绿点表示本次求的的最值。
*结果分析*
+ 量化导致的误差,因为,量化精度为1/1024。分析此函数的连续性和周期性可得出,取得最值的点的位置相对于量化点的位置不一定完全一样,所以导致程序求的不同峰值的最优解不相同。
+ 进化压力偏大可能导致种群进化到某一个较低的极值点位置而不易变异到更高的最值处。所以应控制进化压力的大小在一个合适的范围。
*总结*
使用遗传算法求解函数极值的方法还是比较得心应手的。通过本次作业,了解到算法对于程序的重要意义,也发现自己本身所欠缺的正是这种算法的积累。
在编程中学到的一些python的知识点现总结如下
1. numpy中的数组与python中的列表不是一种数据结构
2. 深复制与浅复制,python直接将该数组中的值赋值添加到其他列表属于浅复制。修改其中一个,另一个仍会修改。
3. matplotlib库,数据可视化,可轻松画出美观的图像,是便于理解数据规律的好工具。
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
python实现的利用遗传算法求二元函数极值_GA.zip (6个子文件)
GA-master
RUN.bat 21B
src
gene.py 3KB
img
pro.jpg 30KB
fun.JPG 12KB
Figure.png 171KB
README.MD 3KB
共 6 条
- 1
资源评论
好家伙VCC
- 粉丝: 2107
- 资源: 9145
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功