还剩3页未读,继续阅读
文本内容:
.定义种群和个体1定义种群为种群数其中是染色体中的两个基因组S,N=50,x,y.算法设计2确定编码设计1由于原函数的变量取值包含负数,不方便进行编码,所以将原函数的变量进行转换,从[]转换成[]相应的,函数也要进行变换JO10020,根据要求分辨率为即编码范围至少为[]设编码位数为则八
0.0001,0200000,n+1,20/2所以求得n+1-1v=
0.0001,n=18因此将变量域[]离散化为二值域[八]即[]若由代表随机二0200218-10262143,a,b值数,则x=20*a/262143,y=20*b/262143o确定目标函数和适应度函数2由于所求目标函数值包含负数,若直接当做适应度函数值,负数无法被选择,会产生一定的不公平现象,故采用下界构造法,将函数值整体上移,使得被选择的机会相对公平而且由于变量域进行了变化,故目标函数为y=sinx-lO*siny-10x-10y-10而适应度函数,还要将负值转化为零一般采用下界构造法后没有负值产生种群3函数实现种群的初始化,函数变量为种群规模以及染色体位数采用随机函Init Nlength数生成随机矩阵,并使用函数对产生的随机数进行四舍五入,即进行二值化操作,rand round每一行代表一个个体选择复制4选择和复制操作是可以决定哪些个体可以进入下一代选择的方法通常有轮盘赌选择法、锦标赛选择法、随机遍历选择法等由于相对来说轮盘赌选择法编程简单,故本次采用轮盘赌选择法,但是这里采用连续均匀分布的随机函数可以提高公平性unifrnd,根据方程=《二』■乙iJsum计算和1fsum Pi2产生{0,1}的随机数,求s=unifrnd0,1,1,36*fsum3求和〉二中最小的个体并选择复制fi s4进入次操作,得到个个体,形成新一代种群N
2.3N Slo交叉5参加交叉运算的染色体个数占全体染色体总数的比例,记为根据要求本题中选为Pc,20/50,28/50,36/50,44/
50.按交叉率所决定参加交叉的染色体个数从中随机算则配对进行交叉操作,并用产C,S1C生的新染色体代替原染色体,得到新种群S2其中值得注意的是,代码编写过程中设置了交叉掩码,由于题目中设定交叉位数为个体位数的一半,所以设计代码如下[]生成交叉掩码covers000000000111111111000000000111111111;%打舌maskl:l8=coverrandperm18;%Lmask19:36=coverrandperm18;掩码中的片段表明了哪个父体向字体提供变量值,利用交叉操作我们有可能由父代个体在子代组合成具有更高适应度的个体
(6)变异发生变异的基因位数所占全体染色体的基因总位数的比例,即为根据要求本题中选为Pm,1/50,5/50,10/50,15/
50.按变异率所决定的变异次数从交叉所得的种群中随机确定个染色体进行变异操作,用产m,m生的新染色体代替原染色体,得到新种群S3
(7)最优个体的保存需要将最高适应度和其对应的最优个体进行存储.结果分析3四组结果比较,如下图所示,可以发现,交叉率和变异率越高越容易达到最优,但是达到最优的速度不定,这应该与没有进行最有个体的保护有关,所以曲线也较为曲折得到的最高适应度为而且由于每次初始化的种群不同,所以交叉率与变异率的对
0.9998,比也有一定的变化因素在适应度曲线代数.作业心得附代码4函数功能是实现群体的初始化,其中为群体大小,是染色体的长度,即二进制%init.m Nlength的位数%本次程序中,位数取18function group=initN,length随机生成行数为列数为单元值为{}的随机数group=roundrandN,length;%rand N,length,0,1矩阵对矩阵中的每个单元的值进行四舍五入,进行二值化处理,每一列即为随机产生的%round18位染色体编码%将二进制数转化为十进制数%产生八八的行向量,与对应二进制列相乘,然后求和[
2.2n-
1.…1]function groupdec=decodebinarygroup求的行列数[gx,gy]=sizegroup;%groupfor i=l:gytemp:,i=
2.Agy-i.*group:,i;end对相乘后的矩阵进行每行求和groupdec=sumtemp,2;%%将二进制编码转化为十进制数,其中参数表示待解二进制码串的起始位置point%因为对于本题来说,有两个变量,用来表示,每个变量那么第一个变量从开始,第二3618,1个变量就从开始19function groupdec=decodestrgroup,point,lengthtemp=group:,point:point+length-1;用二进制转十进制函数groupdec=decodebinarytemp;%iM%选择复制function[newgroupl]=selectiongroup,fitvalue求适应度之和fsum=sumfitvalue;%求单个个体被选中的概率fltvalue=fitvalue/fsum;%累积概率fitvalue=cumsumfitvalue;%[gx,gy]=sizegroup;获取随机数组,并从小到大排列,方便适应度选择s=sortunifmd0,l[,gx;%newin=l;while newin=gxfitin=50ifsnewinfitvaluefitinnewgroup1newin,:=groupfitin,:newin=newin+l;elsefitin=fitin+l;endend%交叉操作,设计的交叉掩码为即从中间开始交叉变换000000000111111111,function[newgroup2]=crossovernewgroup1,pc[gx,gy]=sizenewgroup1;生成——个新种群newgroup2=onessizenewgroupl;%生成交叉掩码cover=
[000000000111111111000000000111111111];%mask1:18=coverrandperm18;mask19:36=coverrandperm18;for i=l:2:gx-lifrandpcnewgroup2i,:=mask.*newgroup1i,:+〜mask・*newgroup li+1,;newgroup2i+1,:=mask.*newgroup1i+1,:+〜mask.*newgroup1i,:;%利用掩码对交叉位进行操作elsenewgroup2i,:=newgroupnewgroup2i+1,:=newgroup1i+1,:;endend%变异操作function[newgroup3]=mutationnewgroup2,pm[gx,gy]=sizenewgroup2;生成新的群体newgroup3=onessizenewgroup2;%for i=l:gx尸先对新群体进行复制newgroup3i,:newgroup2i,:;%ifrandpm%随机生成四个变异位for p=l:4point=roundrand*gy;ifpoint=0point=l;end尸对应变异位取反newgroup3i,point〜newgroup3i,point;%endendend%计算目标函数值function[objvalue]=calobjvaluegroup将群体每行转化为十进制数temp1=decodestrgroup,1,18;%temp2=decodestrgroup,19,18;二将二值域中的离散数转化为变量域中的数x tempi*20/262143;%y=temp2*20/262143;计算目标函数的值objvalue=sinx-l
0./x-l
0.*siny-l
0./y-l0+1;%%计算个体的适应度function fitvalue=calfitvalueobjvalue[gx,gy]=sizeobjvalue;for i=l:gxif objvaluei0temp=objvaluei;else目标函数值为负数则将该适应度赋为temp=
0.0;%0endfitvaluei=temp;end%求出群体中适应度最高的值function|bestindividual,bestfit]=bestgroup,fitvalue[gx,gy]=sizegroup;二初始化个体bestindividual groupl,:;%初始化适应度besdlt=fitvaluel;%for i=2:gxiffitvalue⑴abestfit%寻找适应度最高的值二,:;bestindividual groupbestfit=fitvaluei;endend%主程序clear allelfclcN=50;length=36;maxfit=ones4,100;pcs=[20/50,28/50,36/50,44/50];pms=[l/50,5/50,10/50,15/50];进行四组结果比较for t=1:4%group=initN,length;for i=l:100pc=pcst;pm=pmst;%获取当前种群的目标函数值[objvalue]=calobjvaluegroup;获取当前的适应度fitvalue=calfitvalueobjvalue;%进行选择复制[newgroup1]=selectiongroup,fitvalue;%%进行交叉操作[newgroup2]=crossovernewgroup1,pc;%进行变异操作[newgroup3]=mutationnewgroup2,pm;获取当前最高适应度以及对应的最有个体[bestindividual,bestfit]=bestgroup,fitvalue;%%减去为机会公平所加的下限maxfitt,i=maxbestfit-1;group4=bestindividual;。
个人认证
优秀文档
获得点赞 0