matlab基本遗传算法应用实例
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基本遗传算法应用实例。用基本遗传算法求下面函数的最大值
10090060)(23++-=x x x x f 300≤≤x
个体数目取50,最大进化代数取100,离散精度取0.001,杂交概率取0.9,变异概率取0.004
1、在editor 中建立基本遗传算法函数:GA
程序如下:
function[xv,fv]=GA(fitness,a,b,NP,NG,pc,pm,eps)
%待优化的目标函数:fitness
%自变量下界:a
%自变量上界:b
%种群个体数:NP
%最大进化代数:NG
%杂交概率:pc
%自变量概率:pm
%自变量离散精度:eps
%目标函数取最小值时的自变量值:xm
%目标函数的最小值:fv
L=ceil(log2((b-a)/eps+1)); %根据离散精度,确定二进制编码需要的码长 x=zeros(NP,L);
for i=1:NP
x(i,:)=Initial(L);%种群初始化
fx(i)=fitness(Dec(a,b,x(i,:),L)); %个体适应值
end
for k=1:NG
sumfx=sum(fx); %所有个体适应值之和
px=fx/sumfx; %所有个体适应值的平均值
ppx=0;
ppx(1)=px(1);
for i=2:NP %用于轮盘赌策略的累加
ppx(i)=ppx(i-1)+px(i);
end
for i=1:NP
sita=rand();
for n=1:NP
if sita<=ppx(n)
SelFather=n; %根据轮盘赌策略确定的父亲
break;
end
end
Selmother=floor(rand()*(NP-1))+1; %随机选择母亲
posCut=floor(rand()*(L-2))+1; %随机选择交叉点
r1=rand();
if r1<=pc %交叉
nx(i,1:posCut)=x(SelFather,1:posCut);
nx(i,(posCut+1):L)=x(Selmother,(posCut+1):L); r2=rand();
if r2<=pm %变异
posMut=round(rand()*(L-1)+1);
nx(i,posMut)=~nx(i,posMut);
end
else
nx(i,:)=x(SelFather,:);
end
end
x=nx;
for i=1:NP
fx(i)=fitness(Dec(a,b,x(i,:),L));%子代适应值
end
end
fv=-inf;
for i=1:NP
fitx=fitness(Dec(a,b,x(i,:),L));
if fitx>fv
fv=fitx; %取个体中的最好值作为最终结果
xv=Dec(a,b,x(i,:),L);
end
end
function result=Initial(length) %初始化函数
for i=1:length
r=rand();
result(i)=round(r);
end
function y=Dec(a,b,x,L) %二进制编码转换为十进制编码 base=2.^((L-1):-1:0);
y=dot(base,x);
y=a+y*(b-a)/(2^L-1);
%[xv,fv]=GA(@fitness,0,30,50,100,0.9,0.04,0.01) 2、建立目标函数文件fitness.m文件:
function F=fitness(x)
F=x^3-60*x^2+900*x+100;
3、在命令窗口输入:
[xv,fv]=GA(@fitness,0,30,100,500,0.9,0.04,0.01)
4、结果(结果不唯一)
xv =10
fv =4100