MATLAB遗传算法作业.docx

上传人:b****5 文档编号:5721663 上传时间:2022-12-31 格式:DOCX 页数:9 大小:141.95KB
下载 相关 举报
MATLAB遗传算法作业.docx_第1页
第1页 / 共9页
MATLAB遗传算法作业.docx_第2页
第2页 / 共9页
MATLAB遗传算法作业.docx_第3页
第3页 / 共9页
MATLAB遗传算法作业.docx_第4页
第4页 / 共9页
MATLAB遗传算法作业.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

MATLAB遗传算法作业.docx

《MATLAB遗传算法作业.docx》由会员分享,可在线阅读,更多相关《MATLAB遗传算法作业.docx(9页珍藏版)》请在冰豆网上搜索。

MATLAB遗传算法作业.docx

MATLAB遗传算法作业

MATLAB遗传算法作业

 

 

————————————————————————————————作者:

————————————————————————————————日期:

 

MATLAB遗传算法

一:

遗传算法简介:

遗传算法(Genetic Algorithm)是一类借鉴生物界的进化规律(适者生存,优胜劣汰遗传机制)演化而来的随机化搜索方法。

它是由美国的J.Holland教授1975年首先提出,其主要特点是直接对结构对象进行操作,不存在求导和函数连续性的限定;具有内在的隐并行性和更好的全局寻优能力;采用概率化的寻优方法,能自动获取和指导优化的搜索空间,自适应地调整搜索方向,不需要确定的规则。

遗传算法的这些性质,已被人们广泛地应用于组合优化、机器学习、信号处理、自适应控制和人工生命等领域。

它是现代有关智能计算中的关键技术。

二:

遗传算法的基本步骤

a)初始化:

设置进化代数计数器t=0,设置最大进化代数T,随机生成M个个体作为初始群体P(0)。

b)个体评价:

计算群体P(t)中各个个体的适应度。

c)选择运算:

将选择算子作用于群体。

选择的目的是把优化的个体直接遗传到下一代或通过配对交叉产生新的个体再遗传到下一代。

选择操作是建立在群体中个体的适应度评估基础上的。

d)交叉运算:

将交叉算子作用于群体。

遗传算法中起核心作用的就是交叉算子。

e)变异运算:

将变异算子作用于群体。

即是对群体中的个体串的某些基因座上的基因值作变动。

群体P(t)经过选择、交叉、变异运算之后得到下一代群体P(t+1)。

f)终止条件判断:

若t=T,则以进化过程中所得到的具有最大适应度个体作为最优解输出,终止计算。

三:

matlab实现

例子:

f(x)=10*sin(5x)+7*cos(4x)x∈[0,10]将变量域[0,10]离散化为二值域[0,1023],x=0+10*b/1023。

1.初始化

initpop.m

functionpop=initpop(popsize,chromlength)

pop=round(rand(popsize,chromlength));%rand随机产生每个单元为0或者1

行数(种群数量)为popsize,列数为chromlength(个体所含基因数)的矩阵,

2.计算目标函数值

2.1将二进制数转化为十进制数

(1)

decodebinary.m

%产生[2^n2^(n-1)...1]的行向量,然后求和,将二进制转化为十进制

functionpop2=decodebinary(pop)

[px,py]=size(pop)%Pop的行和列数

fori=1:

px

pop2(i)=0

forj=1:

py

pop2(i)=pop2(i)+2.^(py-j)*pop(i,j)

end

end

2.2将二进制编码转化为十进制数

(2)

Decodechrom.m

%函数的功能是将染色体(或二进制编码)转换为十进制,参数spoint表示待解码的二进制串的起始位置

functionpop2=decodechrom(pop,spoint,length)

pop1=pop(:

spoint:

spoint+length-1)%pop1取pop的第spoint列到spoint+length-1列为止

pop2=decodebinary(pop1)

2.2.3计算目标函数值

%calobjvalue.m函数的功能是实现目标函数的计算

function[objvalue]=calobjvalue(pop)

temp1=decodechrom(pop,1,10)%将pop每行转换成十进制

x=temp1*10/1023%将二值域中的数转化为变量域的数

objvalue=10*sin(5*x)+7*cos(4*x)%变量域是从1到10

m=max(objvalue)

b=0

fori=1:

100

ifobjvalue(i)==m

b=b+1

end

end

figure

fplot('10*sin(5*x)+7*cos(4*x)',[010])

holdon

plot(x,objvalue,'or')

xlabel(sprintf('%2d',b))

gridon

3计算个体的适应值

calfitvalue.m

%计算个体的适应值

functionfitvalue=calfitvalue(objvalue)

[px,py]=size(objvalue)

fori=1:

py

ifobjvalue(i)>0;

temp=objvalue(i)

else

temp=0.0

end

fitvalue(i)=temp

End

4选择复制

selection.m

%根据方程pi=fi/∑fi=fi/fsum,选择步骤:

%1)在第t代,计算fsum和pi

%2)产生{0,1}的随机数rand(.),求s=rand(.)*fsum

%3)求∑fi≥s中最小的k,则第k个个体被选中

%最后再产生一个0到1之间的随机数,依据该随机数出现在上述哪一个概率区域内来确定各个个体被选中的次数。

%4)进行N次2)、3)操作,得到N个个体,成为第t=t+1代种群

function[newpop]=selection(pop,fitvalue)

totalfit=sum(fitvalue)%求适应值的和

fitvalue=fitvalue/totalfit%单个个体被选择的概率

%如fitvalue=[1234],则cumsum(fitvalue)=[13610]

fitvalue=cumsum(fitvalue)

[px,py]=size(pop)

ms=sort(rand(px,1))%从小到大排列列向量

fitin=1

newin=1

whilenewin<=px%得到px个个体

if(ms(newin))

newpop(newin,:

)=pop(fitin,:

)%将pop的第fitin行复制给newpop

中的newin行

newin=newin+1

else

fitin=fitin+1

end

End

5交叉

crossover.m

%交叉的概率为pc

function[newpop]=crossover(pop,pc)

[px,py]=size(pop)

newpop=ones(size(pop))%所有元素为1

fori=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,:

end

end

6变异

mutation.m

%每个个体的每一位都以概率pm翻转,即由“1”变为“0”,

function[newpop]=mutation(pop,pm)

[px,py]=size(pop)

newpop=pop

fori=1:

px*py%对每一个元素进行判断

if(rand

newpop(i)=1-pop(i)

end

end

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

best.m

%求出群体中适应值最大的值

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

[px,py]=size(pop)

bestindividual=pop(1,:

bestfit=fitvalue

(1);

fori=2:

px

iffitvalue(i)>bestfit

bestindividual=pop(i,:

bestfit=fitvalue(i)

end

end

8主程序

main.m

%遗传算法主程序

popsize=100%种群大小

chromlength=10%字符串长度,即个体长度

pc=0.6%交叉概率

pm=0.001%变异概率

pop=initpop(popsize,chromlength)%随机产生初始群体

[objvalue]=calobjvalue(pop)%计算目标函数值,形成一个20*1的列向量

fitvalue=calfitvalue(objvalue)%计算群体中每个个体的适应度

fori=1:

20%20次迭代

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

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

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

[objvalue]=calobjvalue(newpop)

fitvalue=calfitvalue(objvalue)

[bestindividual,bestfit]=best(newpop,fitvalue)%求出群体中适应值最大的个体及适应值

y(i)=max(bestfit);

n(i)=i;

pop5=bestindividual;

x(i)=decodechrom(pop5,1,chromlength)*10/1023;

pop=newpop;

end

四:

结果分析

 

 

 

上面六张图片分别表示的是第1,3,5,10,15,20次迭代之后的结果,其中每张图中间下方的数字表示最大函数值的个数,即每张图片圆点处于最高点的个数,显然看得出来,随着迭代次数的增加,基本上都会往最优解方向收敛。

 

 

再分析,每一次迭代过程中的最优解,每一对(x,y)表示一次最优解。

最大函数值出现在x=7.8592和1.5738附近,这与上面六张图展示也相符。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1