云手机网页版 遗传算法的MATLAB程序实例.doc
存在一个,完整word形式的,遗传算法的MATLAB程序实例,它是关于遗传算法的程序实例,具体是用来求这样一个函数的最大值,这个函数是,f(x)等于10乘以sin(5x)后加上7乘以cos(4x),其中x的取值范围是在[0,10]这个区间内 。
一、进行初始化,也就是那个被称作initpop。m的函数专门用来达成群体的初始化操作,其中popsize指示着群体的规模大小,chromlength代表着染色体的长度,这里指的是二值数的长度,而其长度大小是由变量的二进制编码的长度所决定的,就像在这个例子里它采用的是10位。在此呈现代码:%Name: initpop。使m%进行初始化,function pop=initpop(popsize,chromlength) ,pop=round(rand(popsize,chromlength)),rand随机产生每个单元为 {0,1} 且行数为popsize,列数为chromlength的矩阵,roud对矩阵的每个单元进行圆整。这样所产生的初始种群,二、对目标函数值进行计算,1、把二进制数转变成为十进制数,(1)代码:%Name: decodebinary。m%生成 [2^n 2^(n - 1)...。将其行向量,接着进行求和kiayun手机版登录入口,把二进制转变为十进制,function pop2=decodebinary(pop),其等于size(pop); %去求pop的行和例数,对于i从1到py,pop1(:,i)等于2 。(^(py减去1)).乘以(pop取出(从全部到i)); py等于py减去1;结束pop2等于pop1按列求和; %求pop1的每行之和2、把二进制编码转变为十进制数(2)decodechrom.m函数的作用是把染色体(或者二进制编码)转变成十进制,参数spoint代表待解码的二进制串的起始位置.(对于多个变量来讲,假设有两个变量,采用20位来表示,每个变量10位,那么第一个变量从1开始,另一个变量从11开始。)。此例是1作示例的情况,参数1ength所代表的意义是用来表明所截取的长度数值,在这个例子当中该数值是10,代码部分是%Name: decodechrom 。功能是将二进制编码转换成为十进制的m%,有个函数叫decodechrom(pop,spoint,length) ,其中pop1等于pop(:,spoint:spoint+length—1); 而pop2等于decodebinary(pop1); 还有,计算目标函数值是calobjvalue.m函数要做的事,它的作用是实现目标函数的计算,它用的公式取自本文示例仿真,并且能够依据不同优化问题进行修改。代码,%名称是:calobjvalue、m%要达成目标函数的计算,函数 [objvalue 。
等号后面放置通过调用calobjvalue函数作用于pop所得到的值,temp1等于采用解码函数decodechrom在pop的情况下,从第1位开始,取10位进行解码后得到的十进制数,即把pop每行转化成十进制数,x等于temp1乘以10再除以1023,也就是将二值域中的数转化为变量域的数,objvalue等于10乘以正弦函数作用于5乘以x的结果再加上7乘以余弦函数作用于4乘以x的结果,即计算目标函数值,三、计算个体的适应值代码为:%Name:calfitvalue。你提供的内容存在代码错误及不规范表述,我先纠正格式后进行改写。原内容应改为: m%计算个体的适应值 function fitvalue = calfitvalue(objvalue) global Cmin; Cmin = 0; px = size(objvalue); for i = 1:px if objvalue(i) + Cmin > 0 temp = Cmin + objvalue(i); else temp = 0; 改写后:对于计算个体适应值的m%,其函数名为calfitvalue,该函数中全局变量Cmin先被赋值为0,px被设定为objvalue的大小,在循环从1到px的过程中,当objvalue的第i个值加上Cmin大于0时,temp的值被定义为Cmin加上objvalue的第i个值,否则,它被定义为0 。0,结束,此时适应度值(i)等于临时值,结束后适应度值等于适应度值的转置;四,选择复制,选择或复制操作乃是决定哪些个体能够进入到下一代,程序里采用赌轮盘选择法来进行选择,这种方法比较容易得以实现,依据方程 pi 等于 fi 除以∑fi 即等于 fi 除以 fsum,其选择步骤如下:1)在第 t 代的时候,依据(1)式来计算 fsum 和 pi;2)产生{0,1}范围内的随机数 rand( 。),求取 s 等于 rand( .)乘以 fsum3,求使得 ∑fi 大于或等于 s 的情况里最小的 k,那么第 k 个个体就会被选中,4)开展 N 次 2)、3)之中的操作,从而获得 N 个个体,使之成为第 t=t+1 代种群,代码:%名称:selection。选择复制函数,即[newpop]等于selection(pop,fitvalue)kiayun手机版登录打开即玩v1011.玩看我最新关网.中国,求适应值之和,totalfit为sum(fitvalue);单个个体被选择的概率,fitvalue等于fitvalue除以totalfit;累积概率,fitvalue等于cumsum(fitvalue);如fitvalue等于,则cumsum(fitvalue)等于 ,[px,py]等于size(pop);ms等于sort(rand(px,1));从小到大排列,将”rand(px,1)"产生的一列随机数变成轮盘赌形式的表示方法,由小到大排列,fitin等于1;fivalue是一向量,fitin代表向量中元素位,即fitvalue(fitin)代表第fitin个个体的单个个体被选择的概率,newin等于1;同理,while newin〈=px ,if(ms(newin))〈fitvalue(fitin) ,newpop(newin,:)等于pop(fitin,:);赋值,即将旧种群中的第fitin个个体保留到下一代(newpop),newin等于newin+1;else ,fitin等于fitin+1; ,end ,交叉,群体中的每个个体之间都以一定的概率pc交叉,即两个个体从各自字符串的某一位置(一般是随机确定)开始互相交换,这类似生物进化过程中的基因分裂与重组。例如,假定存在2个父代个体x1以及x2,其中x1等于0100110,x2等于1010001,从每个个体的第3位起始进行交叉,交叉之后得到2个新的子代个体y1与y2,这2个新后代个体分别是:y1等于0100001,y2等于1010110,如此那般2个子代个体便各自拥有了2个父代个体的某些特性。借助交叉我们有机会由父代个体在子代组合形成具备更高适合度的个体。实际上交叉是遗传算法不同于其他传统优化方法的主要特点之一。代码为:%Name: crossover。m%交叉function
这段内容看起来是代码片段,不太明确具体需求,以下是按照要求拆分改写: 新流行物等于交叉多变量(种群,交叉概率),全局变量数量, [行数, 列数] 等于种群的尺寸;列数除以变量数量等于 m;对于 j 从 1 到变量数量,种群 1 等于全 1 的矩阵(行数,m);种群 2 等于种群中从列数乘以(j - 1)加 1 到列数乘以j的部分;这是取出相应变量对应的二进制编码段;对于 i 从 1 以步长 2 到行数减 1,如果随机数小于交叉概率,交叉点 = 四舍五入(随机数乘以(m - 1));这里交叉点为交叉点;种群 1 的第 i 行等于 。 (最后一个等号赋值部分不完整,不太能准确处理,只能先这样拆分改写)。
pop2(i,从1到cpoint的范围),pop2(i + 1,从cpoint + 1到m的范围)];pop1(i + 1,所有列)=(pop2(i + 1, 从1到cpoint的范围)kiayun手机版登录下载,pop2(i, 从cpoint + 1到老m的范围)。
然而,除此之外,将pop2的第i行从第1列到第m列的元素对应赋值给pop1的第i行,把pop2的第i + 1行从第1列到第m列的元素对应赋值给pop1的第i + 1行,结束上述操作,将得到的pop1放入新种群中,使其占据新种群第j - 1组的第m * (j - 1) + 1列到第m * j列的位置,此操作为将交叉后的一个参数的编码放入新种群中这一行为,结束该部分内容,关于变异,也就是mutation,基因的突变广泛多见于生物的进化历程中 。变异所指的是,父代当中的每一个个体的每一个位都会凭借概率pm进行翻转,也就是从“1”转变为“0”,或者是从“0”转变为“1”。遗传算法具备的变异特性能够促使求解过程以随机的方式搜索到解有可能存在的整个空间,所以在一定程度上能够求得全局最优解。代码:%Name: mutation.m%变异function。
新种群][等于变异(当前种群,变异概率)][种群的行数,种群的列数][等于种群的尺寸;新种群变为尺寸与种群相同的元素全为1的矩阵;再对1到种群行数进行循环][;;]在这循环里][如果(随机取值)。