编程实现利用遗传算法求解方程最值

编程实现利用遗传算法求解方程最值
编程实现利用遗传算法求解方程最值

编程实现利用遗传算法求解方程最值

一.函数为:

求函数y=x+3*sin(2*x)-7*cos(x) 在【-4 4】的最大值

二.MATLAB 程序如下:

1.主控制程序

GA.m

%求函数y=x+3*sin(2*x)-7*cos(x) 在【-4 4】的最大值

%

function main()

clear

clc

popsize=100

chromlength=10

pc=0.6

pm=0.01

%%

pop=initpop(popsize,chromlength)

for i=1:100

[objvalue]=calobjvalue(pop)

fitvalue=calfitvalue(objvalue)

[newpop]=selection(pop,fitvalue)%选择操作

[newpop]=crossover(pop,pc)%交叉操作

[newpop]=mutation(pop,pm)%变异操作

[bestindividaul,bestfit]=best(pop,fitvalue)%求出群体中适应值最大的个体及其适应值y(i)=max(bestfit)

n(i)=i

pop5=bestindividaul

x(i)=decodechrom(pop5,1,chromlength)*8/1023-4

pop=newpop;

end

x(i)

y(i)

fplot('x+3*sin(2*x)-7*cos(x)',[-4 4])

grid on

hold on

plot(x,y,'r*')

title('x+3*sin(2*x)-7*cos(x)的最大值')

hold off

2.子程序:初始化

%初始化

function pop=initpop(popsize,chromlength)

pop=round(rand(popsize,chromlength)) %rand随机产生初始种群3. 子程序:计算目标函数

%计算目标函数值

function [objvalue]=calobjvalue(pop)

temp1=decodechrom(pop,1,10)

x=temp1*8/1023-4

objvalue=x+3*sin(2*x)-7*cos(x)

function pop2=decodechrom(pop,spoint,length)

pop1=pop(:,spoint:spoint+length-1)

pop2=decodebinary(pop1)

function pop2=decodebinary(pop)

[px,py]=size(pop)

for i=1:py

pop1(:,i)=2.^(py-1).*pop(:,i)

py=py-1

end

pop2=sum(pop1,2)

4. 子程序:选择操作

%选择

function [newpop]=selection(pop,fitvalue)

totalfit=sum(fitvalue)

fitvalue=fitvalue/totalfit%但个个体选择概率

fitvalue=cumsum(fitvalue)

[px,py]=size(pop)

ms=sort(rand(px,1))

fitin=1

newin=1

while newin<=px

if(ms(newin))

newpop(newin,:)=pop(fitin,:)

newin=newin+1

else

fitin=fitin+1

end

end

5.子程序:交叉

% 交叉

function [newpop]=crossover(pop,pc)

[px,py]=size(pop)

newpop=ones(size(pop))

for i=1:2:px-1

if(rand

cpoint=round(rand*py)

newpop(i,:)=[pop(i,1:cpoint) pop(i+1,cpoint+1:py)]

newpop(i+1,:)=[pop(i+1,1:cpoint) pop(i,cpoint+1:py)] else

newpop(i,:)=pop(i,:)

newpop(i+1,:)=pop(i+1,1)

end

end

%

6. 子程序:变异

%变异

function [newpop]=mutation(pop,pm)

[px,py]=size(pop)

newpop=ones(size(pop))

for i=1:px

if(rand

mpoint=round(rand*py)

if mpoint<=0

mpoint=1

end

newpop(i,:)=pop(i,:)

if any(newpop(i,mpoint))==0

newpop(i,mpoint)=1

else

newpop(i,mpoint)=0

end

else

newpop(i,:)=pop(i,:)

end

end

7. 求出群体中适应值最大的个体及其适应值:

%求出群体中最大适应值及其个体

function [bestindividual,bestfit]=best(pop,fitvalue)

[px,py]=size(pop)

bestindividual=pop(1,:)

bestfit=fitvalue(1)

for i=2:px

if fitvalue(i)>bestfit

bestindividual=pop(i,:)

bestfit=fitvalue(i)

end

end

三 以上程序运行后的的结果如下图:

-4-3-2-101234

-15-10

-5

5

10

15

(图)

相关主题
相关文档
最新文档