首页 > 编程知识 正文

多变量遗传算法matlab代码(遗传算法解决OVRP代码)

时间:2023-05-04 15:59:26 阅读:77052 作者:1719

在此,请参考博客的进度学习:

3359 blog.csdn.net/Han pu _ Liang/article/details/78172537

作为该博主解决的遗传算法入门问题的多元函数最大值求解,是遗传算法入门的练习

上一篇所述的TSP问题也同样解决。 本文完善了参考文献的步骤,并做了注释

tic; clc,clearload sj.txt %敌人100个目标的数据x=SJ (:13360233608 ); x=x(3360; y=SJ(:2:2:8; y=y(: sj=[x y]; D1=[ 70,40 ]; sj0=[d1; sj; D1 ); %%距离矩阵dsj=sj0*pi/180; d=Zeros(102; for i=1:101for j=(i 1) :102temp=cos(SJ(I,1 )SJ(j,1 ) ) * cos (SJ,2 ) * cos (SJ,2 ) ) d endendd=d d '; L=102; w=50; dai=100; 使用%%改进环算法,通过添加%d的倒排d '来减少计算时间,其中优质父代afork=1:WC=randperm(100 ); %ranperm(100 )为99 )1) 3…C1=[1,C1,102 ]; 将路径存储为%数组flag=1; While标志0标志=0; form=1: l-3 forn=m 2: l-1 ifd (C1(m ),C1(m ) ) C1 (m ) ) C1 C1(M1:N endendendj (k,c1 )=1:102; P*102,种群个体数为50.endJ=J/102; j 65:1 )=0; j 65:102 )=1; rand(state )、sum(clock ); %命令rand(state )、sum (clock ) )重新启动matlab时,执行随机数生成值会不同。 否则,随机初始值是相同的。 %%遗传算法的实现过程A=J; 产生并编码fork=1:Dai%0~1到1之间的随机数列的B=A; c=randperm(w; %%交配诱导的子代bfori=1:23360 wf=2floor (100 * rand )1); %2-102随机一个数ftemp=b(c(I ),F:102 ); b(c ) I )、F:102 ) ) b ) c ) I1 )、F:102 ); b(c ) I1 )、F:102 )=temp; %的效果是在50个个体之间交换f(f变化),然后交换片段,建立50个个体的新种群。 即,由50*102序列end%%变异引起子CBY=find(rand(1,w ) 0.1 ); 实现%0.1的变异概率,即rand (以0.1的方式实现if length (by )==0by=floor(w*rand )1) ) 1; end %是随机的,即0.1的概率为0,则随机选择一个。 这是为了后面代码的统一描述,是合理接受的。 c=a(by, ); 在%群体中找到变异的个体。 L3=Length(by; forj=1: l3bw=2floor (100 * rand ) 1,3 ); %随机发生的3个bw=sort(bw ); c(j, )=c ) j,[1:bw(3(1),bw )2) 1:bw),bw (1) :bw ),bw (3) 1:102]; %自身的内部bw1-bw2段和bw(2) 1到bw(2)段具有优先级endG=[A; B; c ); TL=size(g,1 ); %G矩阵的第一元,即103.%%优良品种------------从父代和子代中选择优良品种作为新的父代[dd,IX]=sort(g,2 ); temp(13360TL )=0; %sort(g,2 )排序每行,dd返回排序后的值,IX返回该值的原始位置,并且初始化TL(103个个体)的距离temp。 forj=1: TL fori=1:101 temp (j )=temp(j ) j ) d ) IX(j,I )、IX(j,i 1); 利用%循环方式,将各个体101段距离之和进行endend[DZ,qxdbd]=sort(temp; 对%距离进行排序。 DZ为距离,qxdbd为有最短距离的位置,取值范围为1-103.a=g(qxdbd(13360w )、 ); %选择其中最好的50个,即顺位靠前的50个作为生存个体,进行下一次迭代。 这样,看到合计100次的end %反复100代的path=IX (qx DBD (1, ) )距离最短的long=DZ(1)1) tocxx=SJ0(path,1 ) ) ) %提取横坐标; 和plot(xx、yy、'-o ' )一样,这里的sj.txt可以复制上一篇博文中的sj.txt并放在同一个文件夹中。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。