关于一些遗传的算法 D=code; N=50; % Tunable maxgen=50; % Tunable crossrate=0.5; %Tunable muterate=0.08; %Tunable generation=1; num = length(D); fatherrand=randint(num,N,3); score = zeros(maxgen,N); while generation<=maxgen ind=randperm(N-2)+2; % 随机配对交叉 A=fatherrand(:,ind(1:(N-2)/2)); B=fatherrand(:,ind((N-2)/2+1:end)); % 多点交叉 rnd=rand(num,(N-2)/2); ind=rnd tmp=A(ind); A(ind)=B(ind); B(ind)=tmp; % % 两点交叉 % for kk=1:(N-2)/2 % rndtmp=randint(1,1,num)+1; % tmp=A(1:rndtmp,kk); % A(1:rndtmp,kk)=B(1:rndtmp,kk); % B(1:rndtmp,kk)=tmp; % end fatherrand=[fatherrand(:,1:2),A,B]; % 变异 rnd=rand(num,N); ind=rnd [m,n]=size(ind); tmp=randint(m,n,2)+1; tmp(:,1:2)=0; fatherrand=tmp+fatherrand; fatherrand=mod(fatherrand,3); % fatherrand(ind)=tmp; %评价、选择 scoreN=scorefun(fatherrand,D);% 求得N个个体的评价函数 score(generation,:)=scoreN; [scoreSort,scoreind]=sort(scoreN); sumscore=cumsum(scoreSort); sumscore=sumscore./sumscore(end); childind(1:2)=scoreind(end-1:end); for k=3:N tmprnd=rand; tmpind=tmprnd difind=[0,diff(tmpind)]; if ~any(difind) difind(1)=1; end childind(k)=scoreind(logical(difind)); end fatherrand=fatherrand(:,childind); generation=generation+1; end % score maxV=max(score,[],2); minV=11*300-maxV; plot(minV,'*');title('各代的目标函数值'); F4=D(:,4); FF4=F4-fatherrand(:,1); FF4=max(FF4,1); D(:,5)=FF4; 《MATLAB实现遗传算法详解》 遗传算法是一种模拟生物进化过程的优化算法,它通过模拟自然选择、遗传、变异等生物学现象,寻找问题的近似最优解。在MATLAB环境中,我们可以利用其强大的数值计算能力来高效实现遗传算法。本文将深入探讨MATLAB遗传算法的实现细节,并结合给出的代码进行解析。 遗传算法的基本流程包括初始化种群、选择、交叉、变异以及评价等步骤。在MATLAB代码中,`N`表示种群大小,`maxgen`为最大迭代次数,`crossrate`和`muterate`分别代表交叉概率和变异概率。初始化种群时,`fatherrand=randint(num,N,3)`生成了包含三个决策变量的个体矩阵。 交叉操作是遗传算法的关键部分,代码中的`randperm`用于随机配对个体,`A`和`B`分别代表父代的一部分。多点交叉通过`rnd`矩阵随机选择交叉点,实现基因交换。此外,代码还提供了两点交叉的实现,虽然在本例中未被使用。变异操作通过`randint`和`mod`函数实现,确保变异后的值在允许范围内。 评价函数`scorefun`用于计算每个个体的适应度,此处未详细给出,但通常涉及到目标函数的计算。在每一代结束后,选择优秀的个体进行下一代的繁殖,这里采用了“精英保留”策略,即保留前一代的两个最佳个体。选择过程通过`cumsum`和`sort`函数完成,采用的是累积概率选择法。 在代码的绘制了每代目标函数值的变化曲线,这有助于观察算法的收敛情况。同时,将优化结果保存在变量`D`中,方便后续处理。 需要注意的是,遗传算法的参数设置(如种群大小、最大迭代次数、交叉和变异概率)对算法性能有很大影响,需要根据具体问题进行调整。此外,为了防止早熟和过度搜索,可能需要引入其他策略,如自适应调整交叉和变异概率,或者使用复合遗传算法等。 MATLAB提供的工具和函数使得遗传算法的实现变得相对简单,通过理解上述代码,可以进一步掌握遗传算法的核心思想并应用于实际问题中。对于复杂优化问题,遗传算法能提供一种有效的全局搜索方法,尤其在问题的解决方案空间很大或目标函数非线性的情况下,其优势更为明显。
- mdscolour2013-03-29感觉这个写的有点混乱,还有几处符号写错了
- 粉丝: 0
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助