• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

智能算法之Matlab实现(1)——遗传算法(1)

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

遗传算法的过程在这里先不介绍了,可能在接下来的几篇文章会介绍,这里介绍些实用的。

(1)Sheffield遗传算法工具箱的安装

我共享了下修改过文件名和后缀名的原版工具箱,地址为:http://pan.baidu.com/s/1inVKE

安装方法

将整个文件夹复制到matlab安装文件夹中的toolbox文件夹

例如:C:\Program Files\MATLAB\R2013b\toolbox文件夹。

然后在Command Window里面输入:

str = [\'C:\Program Files\MATLAB\R2013b\toolbox\gatbx\']

addpath(str)

可能有些同学出现过这个问题,

Undefined function or method \'crtbp\' for input arguments of type \'double\'

或者是:

Cannot find an exact (case-sensitive) match for \'crtbp.m\'
The closest match is C:\Program Files\MATLAB\R2012a\toolbox\gatbx\CRTBP.M
To change the file extension, cd to the file\'s folder, type:
   movefile CRTBP.M CRTBP.m_bad; movefile CRTBP.m_bad CRTBP.m
and then cd back.

这是因为新旧Matlab版本对于M文件的文件名要求不尽相同,将其全部改为小写文件名和文件后缀名即可。

(2)应用实例(1)——单变量函数求最值

类似模板的东西,求解此函数最大值:

有如下代码:

%% Do Some Cleaning
clc
clear all;
close all;
%% Set the initial parameters
lb = 1; ub = 2;%x belongs to [1,2]
%% Plot
figure(1);
hold on;
ezplot(\'sin(10*pi*X)/X\',[lb,ub]);
xlabel(\'x/X\')
ylabel(\'y/Y\')
%% Define the parameters of GA
NIND = 40;%size of the group
MAXGEN = 20;%max generations
PRECI = 20;%length of a individual
GGAP = 0.95;%gap
px = 0.7;%the possibility of cross production
pm = 0.1;%the possibility of mutation
trace = zeros(2,MAXGEN);%init value of algorithm寻优函数
FieldD = [PRECI;lb;ub;1;0;1;1];%区域描述器
Chrom = crtbp(NIND,PRECI);%creat random discrete group
%% Optimizations
gen = 0;%counter of generations
X = bs2rv(Chrom,FieldD);%bin to dec
ObjV = sin(10 * pi * X) ./ X;%cal the f(x)
while gen < MAXGEN
    FitnV = ranking(ObjV);%allocate the adaptness
    SelCh = select(\'sus\',Chrom,FitnV,GGAP);%select
    SelCh = recombin(\'xovsp\',SelCh,px);%recombine
    SelCh = mut(SelCh, pm);%mutate
    X = bs2rv(SelCh,FieldD);%to dec
    ObjVSel = sin(10 * pi * X)./ X;%cal the next-gen\'s target f(x)
    [Chrom, ObjV] = reins(Chrom, SelCh, 1, 1, ObjV, ObjVSel);%reinsert them to father-gen
    X = bs2rv(Chrom, FieldD);
    gen = gen + 1;%counter+=1
    %get every gen\'s answers and it\'s nums, Y stant for best f(x), I for
    %nums;
    [Y I] = min(ObjV);
    trace(1,gen) = X(I);
    trace(2,gen) = Y;
end
%% Plot
plot(trace(1,:),trace(2,:),\'bo\');%plot every gen\'s answer
grid on;
plot(X,ObjV,\'b*\');
hold off
%% Plot the evolution
figure(2);
plot(1:MAXGEN,trace(2,:));
grid on
xlabel(\'count of generations\')
ylabel(\'answer\')
title(\'procedure\')
bestY = trace(2,end)
bestX = trace(1,end)

运行结果:

(3)应用实例(2)——双变量函数求最值

那么有如下代码:

%% Do Some Cleaning
clc
clear all;
close all;
%% Set the initial parameters
lbx = -2; ubx = 2;%x belongs to [-2,2]
lby = -2; uby = 2;%y belongs to [-2,2]
%% Plot
figure(1);
ezmesh(\'y*sin(2*pi*x) + x*cos(2*pi*y)\',[lbx,ubx,lby,uby],50);
xlabel(\'x/X\')
ylabel(\'y/Y\')
hold on;
%% Define the parameters of GA
NIND = 40;%size of the group
MAXGEN = 20;%max generations
PRECI = 20;%length of a individual
GGAP = 0.95;%gap
px = 0.7;%the possibility of cross production
pm = 0.01;%the possibility of mutation
trace = zeros(3,MAXGEN);%init value of algorithm寻优函数
FieldD = [PRECI PRECI;lbx lby;ubx uby;1 1;0 0;1 1;1 1];%Field discriber
Chrom = crtbp(NIND,PRECI*2);%creat random discrete group
%% Optimizations
gen = 0;%counter of generations
XY = bs2rv(Chrom,FieldD);%bin to dec
X = XY(:,1);
Y = XY(:,2);
ObjV = Y.*sin(2*pi*X) + X.*cos(2*pi*Y);%cal the f(x,y)
while gen < MAXGEN
    FitnV = ranking(-ObjV);%allocate the adaptness
    SelCh = select(\'sus\',Chrom,FitnV,GGAP);%select
    SelCh = recombin(\'xovsp\',SelCh,px);%recombine
    SelCh = mut(SelCh, pm);%mutate
    XY = bs2rv(SelCh,FieldD);%bin to dec
    X = XY(:,1);
    Y = XY(:,2);
    ObjVSel = Y.*sin(2*pi*X) + X.*cos(2*pi*Y);%cal the next-gen\'s target f(x)
    [Chrom, ObjV] = reins(Chrom, SelCh, 1, 1, ObjV, ObjVSel);%reinsert them to father-gen
    XY = bs2rv(Chrom,FieldD);
    gen = gen + 1;%counter+=1
    %get every gen\'s answers and it\'s nums, Y stant for best f(x), I for
    %nums;
    [Y, I] = max(ObjV);
    trace(1:2,gen) = XY(I,:);
    trace(3,gen) = Y;
end
%% Plot
plot3(trace(1,:),trace(2,:),trace(3,:),\'bo\');%plot every gen\'s answer
grid on;
plot3(XY(:,1),XY(:,2),ObjV,\'b*\');
hold off
%% Plot the evolution
figure(2);
plot(1:MAXGEN,trace(3,:));
grid on
xlabel(\'count of generations\')
ylabel(\'answer\')
title(\'procedure\')
bestX = trace(1,end)
bestY = trace(2,end)
bestZ = trace(3,end)

运行结果:

(4)应用实例(3)——遗传算法接力优化(采用系统GAtool工具箱)

优化此函数:

第一个文件(主文件):

%主程序:本程序采用遗传算法接力进化,
%将上次进化结束后得到的最终种群作为下次输入的初始种群
clc;
close all;
clear all;
%进化的代数
T=100;
optionsOrigin=gaoptimset(\'Generations\',T/2);
[x,fval,reason,output,finnal_pop]=ga(@ff,2,optionsOrigin);
%进行第二次接力进化
options1=gaoptimset(\'Generations\',T/2,\'InitialPopulation\',finnal_pop,...
    \'PlotFcns\',@gaplotbestf);
[x,fval,reason,output,finnal_pop]=ga(@ff,2,options1);
Bestx=x
BestFval=fval

评价函数文件,与主文件一起保存,名字为ff.m

%子函数:适应度函数同时也是目标函数,函数存储名称为ch14_2f.m
function f=ff(x)
g1=1.5+x(1)*x(2)-x(1)-x(2);
g2=-x(1)*x(2);
if(g1>0||g2>10)
    f=100;
else
    f=exp(x(1))*(4*x(1)^2+2*x(2)^2+4*x(1)*x(2)+2*x(2)+1);
end

程序结果:

至此,第一部分结束,下一篇将介绍遗传算法的基本内容。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Delphi-IOCPAPI代码的封装和流程分析发布时间:2022-07-18
下一篇:
如何在Delphi5下拷贝一个文件发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap