谢菲尔德大学遗传算法工具介绍-matlab
来源:互联网 发布:php httpclient 类库 编辑:程序博客网 时间:2024/06/10 04:56
1.简介
遗传算法(genetic algorithm,GA)是一种仿效生物学界“物竞天择,适者生存”的演化法则变化而来。遗传算法中,通过八问题参数编码成染色体,利用迭代的方进行选择、交叉以及变异等运算来交换种群中染色体的信息,最终生成符合优化目标的染色体。
染色体对应着数据或者数组,一般是一维的串结构数据表示,串上各个位置对应基因的取值。而基因组成的串就是染色体,或者说是基因型个体。种群中个体数目称为群体大小,也称为种群规模,各个个体对环境的适应程度就是适应度。
二:遗传算法基本步骤
1.编码
2.初始种群的生成
3.适应度评估
4.选择
5.交叉
6.变异
三:matlab工具介绍
1.crtbp
创建种群:[chrom,Lind,BaseV] = crtbp(Nid,Lind,Base)
创建大小为NindXLind大小的种群,个体各位的进制数为base:
[Chrom,Lind,BaseV] = crtbp(5,8,[2 3 4 5 6 7 8 9])
Chrom =
0 1 3 4 5 2 2 2
1 2 1 2 1 1 6 6
1 1 2 0 4 1 4 6
0 1 2 0 1 4 4 3
0 0 3 1 5 3 7 5
Lind =
8
BaseV =
2 3 4 5 6 7 8 9
2.ranking,适应度计算函数
FitnV = ranking(ObjV)
按照个体的目标值ObjV(列向量)由小到大顺序对个体进行排序,并返回个体适应值FitV的列向量
FitnV = ranking(ObjV,RFun)
(1)若RFun是一个在[1,2]区间内的标量,则采用线性顺序排序,这个标量指定选择的压差
(2)若RFun是一个具有两个参数的向量,则
RFun(2):指定排序方法,0为线性排序,1为非线性排序
RFun(1):
对于线性排序,标量指定的选择压差RFun(1)必须为【1,2】之间;对于非线性排序,RFun(1)必须在[1,length(ObjV)-2]之间。如果为NAN,默认为2.
FitnV = ranking(ObjV,RFun,SUBPOP)
前两个参数与上面的一致,不过最后一个参数指定子种群个数,默认为1.
etc:
ObjV=[1;2;3;4;5;6;7;8;9;8;7;6]
FitnV=ranking(ObjV)
RFun = [3;5;7;10;14;18;25;30;40;50;60;70]
等等等很多函数。
四:例子学习
使用遗传算法计算以下函数的最小值:
f(x)= (sin(10πx))/x
选择二进制编码,具体参数设置如下:
代码:
clcclear all,close all%%画出函数图figure(1);hold on;%%函数自变量范围Ib = 1,Ub = 2;ezplot('sin(10*pi*X)/X',[Ib,Ub]);xlabel('自变量/X')ylabel('函数值/Y')%%定义遗传算法参数NIND= 40; %%种群大小MAXGEN = 50; %%最大遗传代数PRECI = 20; %%个体长度GGAP = 0.95; %%代沟px = 0.7; %%交叉概率pm = 0.01; %%变异概率trace = zeros(2,MAXGEN); %%寻找最优结果初始值FieldD = [PRECI;Ib;Ub;1;0;1;1]; %%区域描述器Chrom = crtbp(NIND,PRECI); %%创建任意离散随机种群%%优化gen = 0; %%代计数器X = bs2rv(Chrom,FieldD); %%初始种群的十进制数转换ObjV = sin(10*pi*X)./X; %%计算目标函数值while gen<MAXGEN FitnV = ranking(ObjV); %%分配适应度值 SelCh = select('sus',Chrom,FitnV,GGAP); %%选择 selCh = recombin('xovsp',SelCh,px); %%重组 SelCh = mut(SelCh,pm); %%变异 X = bs2rv(SelCh,FieldD); %%子代个体的十进制转换 ObjVSel = sin(10*pi*X)./X; %%计算子代的目标函数值 [Chrom,ObjV] = reins(Chrom,SelCh,1,1,ObjV,ObjVSel); %%重新插入子代到父代,得到新的种群 X = bs2rv(Chrom,FieldD); gen = gen + 1; %%子代计数器增加 %获取每一代的最优解及其序列号,Y为最优解,I为个体序号 [Y,I] = min(ObjV); trace(1,gen) = X(I); %%记下每一代的最优值 trace(2,gen) = Y; %%记下每一代的最优值endplot(trace(1,:),trace(2,:),'bo'); %%画出每一代的最优点grid on;plot(X,ObjV,'b*'); %%画出最后一代种群hold off;%%画进画图figure(2);plot(1:MAXGEN,trace(2,:));grid on;xlabel('遗传代数')ylabel('解得变化');title('进化过程');bestY = trace(2,end);bestX = trace(1,end);fprintf(['最优解:\nX=',num2str(bestX),'\nY=',num2str(bestY),'\n']);结果:
- 谢菲尔德大学遗传算法工具介绍-matlab
- 第一章谢菲尔德大学的MATLAB遗传算法工具箱(一)
- 第一章谢菲尔德大学的MATLAB遗传算法工具箱(二)
- 使用MATLAB中遗传算法工具
- MATLAB数学建模(9)-遗传算法工具
- 遗传算法计算一元函数最大值,工具:matlab
- MATLAB谢菲尔德遗传算法工具箱使用
- matlab遗传算法
- MATLAB-遗传算法
- Matlab实现遗传算法
- MATLAB遗传算法实例
- 遗传算法MATLAB
- 遗传算法MATLAB
- 遗传算法MATLAB
- 遗传算法简单介绍与MATLAB实现(一)
- 遗传算法简单介绍与MATLAB实现(二)
- 遗传算法简单介绍与MATLAB实现(三)
- 遗传算法工具箱使用2.谢菲尔德大学工具箱函数
- hadoop学习笔记
- Android下的Linux指令集
- org.json
- Spring 定时任务
- Linux函数调用与栈
- 谢菲尔德大学遗传算法工具介绍-matlab
- Android图像处理_浮雕效果
- intel joule 500系列开发板学习笔记
- JAVA导出报表 ExportExcel 1
- pip安装 管理软件
- SparkContext解密
- SpringMVC深度探险(二) —— SpringMVC概览(转)
- java实现生产者和消费者问题的几种方式
- 后缀数组板子