matlab bs2rv.m,Matlab智能算法之遗传算法(一)

Matlab智能算法之遗传算法(1)

以往写过的一篇文章了,旧了

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\genetic']

addpath(str)

----------------

mac:

str = ['/Applications/MATLAB.app/toolbox/genetic'];

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

SelCh= select('sus',Chrom,FitnV,GGAP);%selectSelCh= recombin('xovsp',SelCh,px);%recombineSelCh= mut(SelCh,pm);%mutate

X= bs2rv(SelCh,FieldD);%todec

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

SelCh= select('sus',Chrom,FitnV,GGAP);%selectSelCh= recombin('xovsp',SelCh,px);%recombineSelCh= mut(SelCh,pm);%mutate

XY= bs2rv(SelCh,FieldD);%binto 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

程序结果:

你可能感兴趣的:(matlab,bs2rv.m)