matlab遗传算法学习和全局化算法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1 遗传算法步骤
1 根据具体问题选择编码方式,随机产生初始种群,个体数目一定,每个个体表现为染色体的基因编码
2 选择合适的适应度函数,计算并评价群体中各个体的适应。
3 选择(selection)。
根据各个个体的适应度,按照一定的规则或方法,从当前群体中选择出一些优良的个体遗传到下一代群体
4 交叉(crossover)。
将选择过后的群体内的各个个体随机搭配成对,对每一对个体,以一定概率(交叉概率)交换它们中的部分基因。
5 变异(mutation)。
对交叉过后的群体中的每一个个体,以某个概率(称为变异概率)改n 变某一个或某一些基因位上的基因值为其他的等位基因
6 终止条件判断。
若满足终止条件,则以进化过程中得到的具有最大适应度的个体作为最优解输出,终止运算。
否则,迭代执行Step2 至Step5。
适应度是评价群体中染色体个体好坏的标准,是算法进化的驱动力,是自然选择的唯一依据,改变种群结构的操作皆通过适应度函数来控制。
在遗传算法中,以个体适应度的大小来确定该个体被遗传到下一代群体中的概率。
个体的适应度越大,被遗传到下一代的概率就越大,相反,被遗传到下一代的概率就越小。
1 [a,b,c]=gaopt(bound,fun)其中,bound=[xm,xM]为求解区间上届和下届构成的矩阵。
Fun 为用户编写的函数。
a为搜索的结果向量,由搜索的出的最优x向量与目标函数构成,b为最终搜索种群,c为中间搜索过程变参数,其第一列为代数,后边列分别为该代最好的的个体与目标函数的值,可以认为寻优的中间结果。
2 ga函数。
[X,F, FLAG,OUTPUT] = GA(fun, n,opts).n为自变量个数,opts为遗传算法控制选项,用gaoptimset()函数设置各种选项,InitialPopulation可以设置初始种群,用PopulationSize 可以设置种群规模,SelectionFcn可以定义选择函数,
3 gatool 函数用于打开,GATOOL is now included in OPTIMTOOL。
2.2 通过GUI 使用遗传算法
在Matlab 工作窗口键入下列命令>>gatool,或通过Start 打开其下子菜单Genetic Algorithm Tool,如图1。
只要在相应的窗格选择相应的选项便可进行遗传算法的计算。
其中fitnessfun 窗格为适应度函数,填写形式为@fitnessfun,Number of variable 窗格为变量个数。
其它窗格参数根据情况填入。
填好各窗格内容,单击Start 按钮,便可运行遗传算法
例子1 应用实例
已知某一生物的总量y(单位:万个)与时间t(月)之间的关系为y=k0(1-exp(-k1*t)),
统计十个月得到数据见表1,试求关系式中的k0,k1。
先编写目标函数,并以文件名myfung.m
存盘。
function y=myfung(x) TOT=[2.0567 3.6904 4.9881 6.0189 6.8371 7.4881 8.0047 8.4151 8.7411 9.0000];
t=1:10;[r,s]=size(TOT);y=0;
for i=1:s
y=y+(TOT(i)-x(:,1)*(1-exp(-x(:,2)*t(i))))^2 %最小估计原则
end
打开遗传算法的GUI ,在Fitness function 窗格中输入@myfung ,在Number of variables 窗格中输入数字2,在Stopping criteria 选项中设置generations 为300,fitness limit 为0.001,stall generations 为100,其它参数为缺省值,然后单击Start 运行遗传算法得到k0=9.99559,k1=0.23018,即
例子2
2 matlab 7 GA 工具箱_木子一车(转载)
例子1求)20sin()4sin(5.212211x pi x x pi x f ⋅⋅⋅+⋅⋅+=的最大值;也就是求负函数的最小值 最大值为-38.8503,在点 xmin=[11.6255 5.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.0 4.1];[12.1 5.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]);
方法2 gatool 的用法
在matlab7命令行输入 gatool,见附图。
在 PopulationSize=10000; 请注意Mutation函数的选择。
f(x1*,x2*)=-my_func1(x1*,x2*)=38.84741978236206,
where x1*=11.62378; x2*=5.72501
方法3 全局优化算法
gs = GlobalSearch('Display','iter');
f=@(x)-(21.5+x(1)*sin(4*pi*x(1))+x(2)*sin(20*pi*x(2)));
opts = optimset('Algorithm','interior-point');
problem = createOptimProblem('fmincon','objective',f,'x0',[1/2 1/3],'lb',[-3 4.1],'ub',[12.1 5.8],'options',opts);
[xming,fming,flagg,outptg,manyminsg] = run(gs,problem)
方法4 multistart 方法
ms =MultiStart('TolFun',1e-10,'TolX',1e-10);
opts=optimset('Algorithm', 'interior-point');
f=@(x)-(21.5+x(1)*sin(4*pi*x(1))+x(2)*sin(20*pi*x(2)));
problem=createOptimProblem('fmincon','x0',[0,0],'objective',f,'lb',[-3,4.1],'u b',[12.1,5.8],'options',opts);
[xminm,fminm,flagm,outptm,someminsm]=run(ms,problem,300);
%stpoints=RandomStartPointSet;%默认产生10个起始点
此方法得不到最优解;
查看局部解的分布范围 enter hist([someminsm.Fval]).
方法4.1 对上个方法的改进;首先根据上个方法搜索的最佳点,取现在的方法的搜索范围为上个最优解的周围区域,缩小搜索范围
clear
ms=MultiStart;
opts=optimset('Algorithm','interior-point');
f=@(x)(-(21.5+x(1).*sin(4*pi*x(1))+x(2).*sin(20*pi*x(2))));
problem=createOptimProblem('fmincon','x0',[12,5],'objective',f,'lb',[10,4],'ub
',[12.1,5.8],'options',opts);
[xminm,fminm,flagm,outptm,manyminsm]=run(ms,problem,200)
xminm = 11.6255 5.7250
fminm = -38.8503
flagm = 1
outptm = funcCount: 8660
localSolverTotal: 200
localSolverSuccess: 200
localSolverIncomplete: 0
localSolverNoSolution: 0
message: [1x129 char]
manyminsm = 1x78 GlobalOptimSolution
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};
ms=MultiStart;
opts=optimset('Algorithm', 'interior-point','LargeScale','off');
f=@(x)(-(21.5+x(1).*sin(4*pi*x(1))+x(2).*sin(20*pi*x(2))));
problem=createOptimProblem('fmincon','x0',[12.1,5.6],'objective',f,'lb',[9,4], 'ub',[12.1,5.8],'options',opts);
[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,[0 9]);
[x,fv]=ga(f,[0;9])
options = gaoptimset('PopulationSize', 100)
[x fval]=ga(@fitnessfun,nvars,[],[],[],[],[],[lb],[ub],options);
x = ga(fitnessfcn,nvars,A,b,Aeq,beq,LB,UB,nonlcon,options);
nvars为变量数目,
5全局化算法(GlobalSearch)
5.1createOptimProblem
problem = createOptimProblem('solverName','ParameterName',ParameterValue,...) Parameter Name/Value Pairs
Aeq Matrix for linear equality constraints. The
constraints have the form:
Aeq x = beq
Aineq Matrix for linear inequality constraints. The
constraints have the form:
Aineq x ≤ bineq
beq Vector for linear equality constraints. The
constraints have the form:
Aeq x = beq
bineq Vector for linear inequality constraints. The
constraints have the form:
Aineq x ≤ bineq
lb Vector of lower bounds.
nonlcon Function handle to the nonlinear constraint
function. The constraint function must accept a
vector x and return two vectors: c, the nonlinear
inequality constraints, and ceq, the nonlinear
equality constraints. If one of these constraint
functions is empty, nonlcon must return [] for that
function.
If the GradConstr option is 'on', then in addition
nonlcon must return two additional outputs, gradc
and gradceq. The gradc parameter is a matrix with
one column for the gradient of each constraint, as
is gradceq.
For more information, see Constraints.
objective Function handle to the objective function. For all
solvers except lsqnonlin and lsqcurvefit, the
objective function must accept a vector x and
return a scalar. If the GradObj option is 'on', then
the objective function must return a second output,
a vector, representing the gradient of the objective.
For lsqnonlin, the objective function must accept a
vector x and return a vector. lsqnonlin sums the
squares of the objective function values. For
lsqcurvefit, the objective function must accept two
inputs, x and xdata, and return a vector.
For more information, see Computing Objective
Functions.
options Options structure. Create this structure with
optimset, or by exporting from the Optimization
Tool.
ub Vector of upper bounds.。