matlab遗传算法学习和全局化算法精品毕业设计完整版Word文档格式.docx
《matlab遗传算法学习和全局化算法精品毕业设计完整版Word文档格式.docx》由会员分享,可在线阅读,更多相关《matlab遗传算法学习和全局化算法精品毕业设计完整版Word文档格式.docx(22页珍藏版)》请在冰豆网上搜索。
2ga函数。
[X,F,FLAG,OUTPUT]=GA(fun,n,opts).n为自变量个数,opts为遗传算法控制选项,用gaoptimset()函数设置各种选项,InitialPopulation可以设置初始种群,用PopulationSize可以设置种群规模,SelectionFcn可以定义选择函数,
3gatool函数用于打开,GATOOLisnowincludedinOPTIMTOOL。
2.2通过GUI使用遗传算法
在Matlab工作窗口键入下列命令>
>
gatool,或通过Start打开其下子菜单GeneticAlgorithmTool,如图1。
只要在相应的窗格选择相应的选项便可进行遗传算法的计算。
其中fitnessfun窗格为适应度函数,填写形式为@fitnessfun,Numberofvariable窗格为变量个数。
其它窗格参数根据情况填入。
填好各窗格内容,单击Start按钮,便可运行遗传算法
例子1应用实例
已知某一生物的总量y(单位:
万个)与时间t(月)之间的关系为y=k0(1-exp(-k1*t)),
统计十个月得到数据见表1,试求关系式中的k0,k1。
先编写目标函数,并以文件名myfung.m存盘。
functiony=myfung(x)
TOT=[2.05673.69044.98816.01896.83717.48818.00478.41518.74119.0000];
t=1:
10;
[r,s]=size(TOT);
y=0;
fori=1:
s
y=y+(TOT(i)-x(:
1)*(1-exp(-x(:
2)*t(i))))^2%最小估计原则
end
打开遗传算法的GUI,在Fitnessfunction窗格中输入@myfung,在Numberofvariables窗格中输入数字2,在Stoppingcriteria选项中设置generations为300,fitnesslimit为0.001,stallgenerations为100,其它参数为缺省值,然后单击Start运行遗传算法得到k0=9.99559,k1=0.23018,即
例子2
2matlab7GA工具箱_木子一车(转载)
例子1求
的最大值;
也就是求负函数的最小值
最大值为-38.8503,在点xmin=[11.62555.7250];
clear
f=@(x1,x2)(-(21.5+x1.*sin(4*pi*x1)+x2.*sin(20*pi*x2)))
t1=-3:
0.1:
12.1;
t2=4:
1.8/(length(t1)-1):
5.8;
[x,y]=meshgrid(t1,t2);
mesh(x,y,f(x,y))
方法1遗传算法
f=@(x)-(21.5+x
(1)*sin(4*pi*x
(1))+x
(2)*sin(20*pi*x
(2)));
opt1=gaoptimset;
opt1.PopInitRange=[[-3.04.1];
[12.15.8]];
opt1.PopulationSize=1000;
opt1.MutationFcn=@mutationuniform;
[x,fval]=ga(f,2,opt1)
[x,fval]=ga(f,2,[],[],[],[],[-3.0;
4.1],[12.1;
5.8]);
方法2gatool的用法
在matlab7命令行输入gatool,见附图。
在PopulationSize=10000;
请注意Mutation函数的选择。
f(x1*,x2*)=-my_func1(x1*,x2*)=38.84741978236206,
wherex1*=11.62378;
x2*=5.72501
方法3全局优化算法
gs=GlobalSearch('
Display'
'
iter'
);
opts=optimset('
Algorithm'
interior-point'
problem=createOptimProblem('
fmincon'
objective'
f,'
x0'
[1/21/3],'
lb'
[-34.1],'
ub'
[12.15.8],'
options'
opts);
[xming,fming,flagg,outptg,manyminsg]=run(gs,problem)
方法4multistart方法
ms=MultiStart('
TolFun'
1e-10,'
TolX'
1e-10);
opts=optimset('
'
problem=createOptimProblem('
[0,0],'
[-3,4.1],'
[12.1,5.8],'
[xminm,fminm,flagm,outptm,someminsm]=run(ms,problem,300);
%stpoints=RandomStartPointSet;
%默认产生10个起始点
此方法得不到最优解;
查看局部解的分布范围enterhist([someminsm.Fval]).
方法4.1对上个方法的改进;
首先根据上个方法搜索的最佳点,取现在的方法的搜索范围为上个最优解的周围区域,缩小搜索范围
ms=MultiStart;
f=@(x)(-(21.5+x
(1).*sin(4*pi*x
(1))+x
(2).*sin(20*pi*x
(2))));
[12,5],'
[10,4],'
[xminm,fminm,flagm,outptm,manyminsm]=run(ms,problem,200)
xminm=11.62555.7250
fminm=-38.8503
flagm=1
outptm=funcCount:
8660
localSolverTotal:
200
localSolverSuccess:
localSolverIncomplete:
0
localSolverNoSolution:
message:
[1x129char]
manyminsm=1x78GlobalOptimSolution
Properties:
X
Fval
Exitflag
Output
X0
方法4.2
pts=-4*rand(200,2)+13*rand(200,2);
tpoints=CustomStartPointSet(pts);
rpts=RandomStartPointSet('
NumStartPoints'
200);
allpts={tpoints,rpts};
LargeScale'
off'
[12.1,5.6],'
[9,4],'
[xmin,fmin,flag,outpt,allmins]=run(ms,problem,allpts)
3【问题】求f(x)=x+10*sin(5x)+7*cos(4x)的最大值,其中0<
=x<
=9
f=@(x)-(x+10*sin(5*x)+7*cos(4*x));
fplot(f,[09]);
[x,fv]=ga(f,[0;
9])
options=gaoptimset('
PopulationSize'
100)
[xfval]=ga(@fitnessfun,nvars,[],[],[],[],[],[lb],[ub],options);
x=ga(fitnessfcn,nvars,A,b,Aeq,beq,LB,UB,nonlcon,options);
nvars为变量数目,
5全局化算法(GlobalSearch)
5.1createOptimProblem
solverName'
ParameterName'
ParameterValue,...)
ParameterName/ValuePairs
Aeq
Matrixforlinearequalityconstraints.Theconstraintshavetheform:
Aeqx
=
beq
Aineq
Matrixforlinearinequalityconstraints.Theconstraintshavetheform:
Aineqx
≤
bineq
Vectorforlinearequalityconstraints.Theconstraintshavetheform:
Vector