1、MATLAB 遗传算法一:遗传算法简介:遗传算法(Genetic Algorithm)是一类借鉴生物界的进化规律(适者生存,优胜劣汰遗传机制)演化而来的随机化搜索方法。它是由美国的 J.Holland 教授 1975 年首先提出,其主要特点是直接对结构对象进行操作,不存在求导和函数连续性的限定;具有内在的隐并行性和更好的全局寻优能力;采用概率化的寻优方法,能自动获取和指导优化的搜索空间,自适应地调整搜索方向,不需要确定的规则。遗传算法的这些性质,已被人们广泛地应用于组合优化、机器学习、信号处理、自适应控制和人工生命等领域。它是现代有关智能计算中的关键技术。二:遗传算法的基本步骤a)初始化:设置
2、进化代数计数器 t=0,设置最大进化代数 T,随机生成 M 个个体作为初始群体 P(0)。b)个体评价:计算群体 P(t)中各个个体的适应度。c)选择运算:将选择算子作用于群体。选择的目的是把优化的个体直接遗传到下一代或通过配对交叉产生新的个体再遗传到下一代。选择操作是建立在群体中个体的适应度评估基础上的。d)交叉运算:将交叉算子作用于群体。遗传算法中起核心作用的就是交叉算子。e)变异运算:将变异算子作用于群体。即是对群体中的个体串的某些基因座上的基因值作变动。群体 P(t)经过选择、交叉、变异运算之后得到下一代群体 P(t+1)。f)终止条件判断:若 t=T,则以进化过程中所得到的具有最大适
3、应度个体作为最优解输出,终止计算。三:matlab 实现例子:f (x)=10*sin(5x)+7*cos(4x) x0,10 将变量域 0,10 离散化为二值域 0,1023, x=0+10*b/1023。1.初始化initpop.mfunction pop=initpop(popsize,chromlength) pop=round(rand(popsize,chromlength); % rand 随机产生每个单元为 0 或者 1 行数(种群数量)为 popsize,列数为 chromlength(个体所含基因数)的矩阵, 2.计算目标函数值2.1 将二进制数转化为十进制数(1)deco
4、debinary.m %产生 2n 2(n-1) . 1 的行向量,然后求和,将二进制转化为十进制 function pop2=decodebinary(pop)px,py=size(pop) %Pop 的行和列数for i=1:pxpop2(i)=0for j=1:pypop2(i)=pop2(i)+2.(py-j)*pop(i,j)endend2.2 将二进制编码转化为十进制数(2) Decodechrom.m%函数的功能是将染色体(或二进制编码)转换为十进制,参数 spoint 表示待解码的二进制串的起始位置 function pop2=decodechrom(pop,spoint,le
5、ngth)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 到
6、 10m=max(objvalue)b=0for i=1:100if objvalue(i)=mb=b+1endend figurefplot(10*sin(5*x)+7*cos(4*x),0 10) hold onplot(x,objvalue,or)xlabel(sprintf(%2d,b)grid on3 计算个体的适应值calfitvalue.m %计算个体的适应值 function fitvalue=calfitvalue(objvalue)px,py=size(objvalue)for i=1:pyif objvalue(i)0;temp=objvalue(i)elsetemp=0
7、.0endfitvalue(i)=tempEnd4 选择复制selection.m % 根据方程 pi=fi/fi=fi/fsum ,选择步骤: % 1) 在第 t 代,计算 fsum 和 pi % 2) 产生 0,1 的随机数 rand( .),求 s=rand( .)*fsum % 3) 求 fis 中最小的 k ,则第 k 个个体被选中 %最后再产生一个 0 到 1 之间的随机数,依据该随机数出现在上述哪一个概率区域内来确定各个个体被选中的次数。% 4) 进行 N 次 2)、3)操作,得到 N 个个体,成为第 t=t+1 代种群 function newpop = selection(p
8、op,fitvalue)totalfit=sum(fitvalue)%求适应值的和fitvalue=fitvalue/totalfit%单个个体被选择的概率%如 fitvalue=1 2 3 4,则 cumsum(fitvalue)=1 3 6 10 fitvalue=cumsum(fitvalue)px,py=size(pop)ms=sort(rand(px,1)%从小到大排列 列向量fitin=1newin=1while newinbestfitbestindividual=pop(i,:)bestfit=fitvalue(i)endend8 主程序 main.m%遗传算法主程序 pops
9、ize=100%种群大小chromlength=10 %字符串长度,即个体长度pc=0.6 %交叉概率pm=0.001 %变异概率pop=initpop(popsize,chromlength)%随机产生初始群体objvalue=calobjvalue(pop) %计算目标函数值,形成一个 20*1 的列向量fitvalue=calfitvalue(objvalue)%计算群体中每个个体的适应度for i=1:20 %20 次迭代newpop=selection(pop,fitvalue)%选择newpop=crossover(newpop,pc)%交叉newpop=mutation(newp
10、op,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 附近,这与上面六张图展示也相符。