遗传算法matlab程序源代码,遗传算法matlab程序代码

1、粒子群算法简介

遗传算法matlab程序源代码,遗传算法matlab程序代码

粒子群优化算法(Particle Swarm Optimization——PSO), 由James Kennedy(社会心理学博士)和Russell Eberhart(电子工程学博士,于1995年提出的一种基于种群的随机优化算法。

鸟被抽象为没有质量和体积的微粒(点),并延伸到N维空间,粒子I 在N维空间的位置表示为矢量Xi=(x1,x2,…,xn),飞行速度表示为矢量Vi=(v1,v2,…,vn),每个粒子都有一个由目标函数决定的适应值(fitness value);并且知道自己到目前为止发现的位置(pbest);除此之外,每个粒子还知道到目前为止整个群体中所有粒子发现的位置(gbest)(gbest是pbest中的值)。   

2、粒子群算法核心概念

如果鸟群觅食的过程中会有信息的交流,则每一个小鸟都会向的路径进行觅食的。每一个小鸟其对应的位置矢量和速度矢量,所以在寻优的过程中会对每一个粒子的位置和速度进行更新。

其中(1)式为粒子i在k+1次迭代时的速度更新公式,(2)式为相对应的位置更新公式。

rand()是介于0~1之间的实数,ω为惯因子,c1为个体学习因子,c2为群体认知因子。

从社会学的角度来看,公式(1)的一部分称为记忆项,表示上次速度大小和方向的影响;公式二部分称为自身认知项,是从当前点指向粒子自身点的一个矢量,表示粒子的动作来源于自己经验的分;公式的三部分称为群体认知项,是一个从当前点指向种群点的矢量,反映了粒子间的协同合作和知识共享。

粒子就是通过自己的经验和同伴中的经验来决定下一步的运动。ω值较大,全局寻优能力强,局部寻优能力弱,ω较小,则反之。初始时,ω取为常数,后来实验发现,动态能够获得比固定值更好的寻优结果。动态可以在PSO搜索过程中线变化,也可根据PSO能的某个测度函数动态改变。

在解决TSP问题中,每一个粒子相当于遗传算法中的每一个个体,粒子的位置则相当于该个体访问所有城市的路径,粒子的速度则是一个交换序列的矩阵。该交换序列是把个体或群体的粒子与粒子群的路径关系。就是说在个体的粒子其中一个元素在待优化的粒子中的位置记录下来,并且在接下来的更新粒子位置时,尽量复制个体的元素序列。

3、粒子群算法流程

Step1:初始化一群微粒(群体规模为M),包括随机位置和速度;

Step2:评价每个微粒的适应度;

Step3:对每个微粒,将其适应值与其经过的位置pbest作比较,如果较好,则将其作为当前的位置pbest;

Step4:对每个微粒,将其适应值与其经过的位置gbest作比较,如果较好,则将其作为当前的位置gbest;

Step5:根据(1)、(2)式调整微粒速度和位置;

Step6:未达到结束条件则转Step2。

4、粒子群算法实例及代码

解决TSP问题的Matlab代码如下:

function Psorout = PSO_TSP(xy,dmat,Popsize,IterNum,showProg,showResult)%利用粒子群优化算法解决TSP问题nargs = 6;%代表函数要输入参数的个数for i = nargin:nargs-1    switch i        case 0  %产生城市数据            xy = [488,814;1393,595;2735,2492;4788,4799;4825,1702;789,2927;4853,1120;4786,3757;2427,1276;4002,2530;710,3496;2109,4455;4579,4797;3962,2737;4798,694;3279,747;179,1288;4246,4204;4670,1272;3394,4072;3789,1218;3716,4647;                1962,1750];%            xy = 5000*rand(39,2);%产生40个城市坐标40*2矩阵        case 1  %计算距离矩阵            N = size(xy,1);            a = meshgrid(1:N);%生成N*N升序矩阵            dmat = reshape(sqrt(sum((xy(a,:)-xy(a',:)).^2,2)),N,N);% '为矩阵的转置,reshape把数据生成N*N的矩阵        case 2  %设置粒子群数目            Popsize = 500;        case 3  %设置迭代次数            IterNum = 2000;        case 4  %是否展示迭代过程            showProg = 1;        case 5  %是否展示结果            showResult = 1;        otherwise    endend%对输入参数进行检查[N,~] = size(xy);%城市个数、维数[nr,nc] = size(dmat);%距离矩阵的行数和列数if N~=nr || N~=nc    error('城市坐标或距离矩阵输入有误')endshowProg = logical(showProg(1));%将数值转变为逻辑值showResult = logical(showResult(1));%画出城市位置分布图figure(1);plot (xy(:,1),xy(:,2),'k.','MarkerSize',14);title('城市坐标位置');%% PSO参数初始化c1 = 0.1;                   %个体学习因子c2 = 0.075;                 %社会学习因子w = 1;                      %惯因子pop = zeros(Popsize,N);     %粒子位置v = zeros(Popsize,N);       %粒子速度iter = 1;                   %迭代次数计时fitness = zeros(Popsize,1); %适应度函数值Pbest = zeros(Popsize,N);   %个体极值路径Pbest_fitness = zeros(Popsize,1);   %个体极值Gbest = zeros(IterNum,N);            %群体极值路径Gbest_fitness = zeros(Popsize,1);     %群体极值Length_e = zeros(IterNum,1);ws = 1;                                %惯因子值we = 0.5;                               %惯因子小值%% 产生初始位置和速度for i = 1:Popsize    pop(i,:) = randperm(N);    v(i,:) = randperm(N);end%计算粒子适应度值for i =1:Popsize    for j =1:N-1        fitness(i) = fitness(i) + dmat(pop(i,j),pop(i,j+1));    end    fitness(i) = fitness(i) + dmat(pop(i,end),pop(i,1));%加上终点回到起点的距离end%计算个体极值和群体极值Pbest_fitness = fitness;Pbest = pop;[Gbest_fitness(1),min_index] = min(fitness);Gbest(1,:) = pop(min_index);Length_e(1) = mean(fitness);%% 迭代寻优while iter <IterNum    %更新迭代次数与惯系数    iter = iter +1;    w = ws-(ws-we)*(iter/IterNum)^2;%动态惯系数    %更新速度    %个体极值序列交换部分    change1 = positionChange(Pbest,pop);    change1 = changeVelocity(c1,change1);%是否进行交换    %群体极值序列交换部分    change2 = positionChange(repmat(Gbest(iter-1,:),Popsize,1),pop);%将Gbest复制成m行    change2 = changeVelocity(c2,change2);    %原速度部分    v = OVelocity(w,v);    %修正速度    for i = 1:Popsize        for j =1:N            if change1(i,j) ~= 0                v(i,j) = change1(i,j);            end            if change2(i,j) ~= 0                v(i,j) = change2(i,j);            end        end    end    %更新粒子位置    pop = updatePosition(pop,v);%更新粒子的位置,也就是更新路径序列    %适应度值更新    fitness = zeros(Popsize,1);    for i = 1:Popsize        for j = 1:N-1            fitness(i) = fitness(i) + dmat(pop(i,j),pop(i,j+1));        end        fitness(i) = fitness(i) + dmat(pop(i,end),pop(i,1));    end        %个体极值与群体极值的更新    for i =1:Popsize        if fitness(i) < Pbest_fitness(i)            Pbest_fitness(i) = fitness(i);            Pbest(i,:) = pop(i,:);        end    end    [minvalue,min_index] = min(fitness);    if minvalue <Gbest_fitness(iter-1)        Gbest_fitness(iter) = minvalue;        Gbest(iter,:) = pop(min_index,:);        if showProg            figure(2);            for i = 1:N-1 %画出中间段                plot([xy(Gbest(iter,i),1),xy(Gbest(iter,i+1),1)],[xy(Gbest(iter,i),2),xy(Gbest(iter,i+1),2)],'bo-','LineWidth',2);                hold on;            end            plot([xy(Gbest(iter,end),1),xy(Gbest(iter,1),1)],[xy(Gbest(iter,end),2),xy(Gbest(iter,1),2)],'bo-','LineWidth',2);            title(sprintf('路线距离 = %1.2f,迭代次数 = %d次',minvalue,iter));            hold off        end     else        Gbest_fitness(iter) = Gbest_fitness(iter-1);        Gbest(iter,:) = Gbest(iter-1,:);    end    Length_e(iter) = mean(fitness);end%% 结果显示[Shortest_Length,index] = min(Gbest_fitness);BestRoute = Gbest(index,:);if showResult   figure(3);   plot([xy(BestRoute,1);xy(BestRoute(1),1)],[xy(BestRoute,2);xy(BestRoute(1),2)],'o-')   grid on   xlabel('城市位置横坐标');   ylabel('城市位置纵坐标');   title(sprintf('粒子群算法优化路径短距离:%1.2f',Shortest_Length));   figure(4);   plot(1:IterNum,Gbest_fitness,'b',1:IterNum,Length_e,'r:')   legend('短距离','平均距离');   xlabel('迭代次数');   ylabel('距离')   title('各代短距离与平均距离对比');endif nargout    Psorout{1} = BestRoute;    Psorout{2} = Shortest_Length; end     endfunction change = positionChange(best,pop)%记录将pop变成best的交换序列for i = 1:size(best,1)    for j =1:size(best,2)        change(i,j) = find(pop(i,:)==best(i,j));%在粒子i中找到best(i,j)位置索引        temp = pop(i,j);%将序列交换        pop(i,j) = pop(i,change(i,j));        pop(i,change(i,j)) = temp;    endendendfunction change = changeVelocity(c,change)%以一定的概率保留序列for i =1:size(change,1)    for j = 1:size(change,2)        if rand > c            change(i,j) = 0;        end    endendendfunction v = OVelocity(c,v)%以一定的概率保留上一次迭代的交换序列for i =1:size(v,1)    for j = 1:size(v,2)        if rand >c            v(i,j) = 0;        end    endendendfunction pop = updatePosition(pop,v)%利用速度记录的交换序列进行位置的更新for i = 1:size(pop,1)    for j =1:size(pop,2)        if v(i,j) ~= 0            temp = pop(i,j);            pop(i,j) = pop(i,v(i,j));            pop(i,v(i,j)) = temp;        end    endendend

结果如下:

若有小伙伴对机器人任务分配算法较为兴趣的,可以在下面评论交流一波,纯属互相学习!

版权声明:《遗传算法matlab程序源代码,遗传算法matlab程序代码》文章主要来源于网络,不代表本网站立场,不承担相关法律责任,如涉及版权问题,请发送邮件至[dcseo8@163 。com]举报,我们会在第一时间进行处理。本文文章链接:https://www.dcseo.cn/39098.html
(0)

相关推荐

  • 7寸以上平板手机有哪些,7英寸平板电脑推荐

    vivo X Note 在移动生活时代,手机早已从通讯工具变成了现代人「万物互联」的集成入口。 通过智能手机,人们能随时随地实现移动办公、通话、观看电视节目和使用社交媒体。我们在手…

    2022年6月2日
    50
  • 优盘文件恢复软件_手机u盘数据恢复软件

    U盘作为一个便携的存储设备在日常生活中广泛应用。然而在日常的使用过程中也常常会出现一些问题。比如插入电脑后发现U盘文件夹空白的情况,相信大家在打开U盘后发现空白的文件夹十分的着急。…

    2022年5月27日
    30
  • 招聘网站哪个好比较靠谱(的招聘app)

    每年的年初都是公司人员流动的高峰期,年前没有做好一定量的人才储备,年初就会陷入焦急的阶段,但是招聘却不是都能遇到合适的人才,怎样才能快速找到适合的人才呢?选对垂直领域的招聘,帮你快…

    2022年3月18日
    282
  • pcb电路板设计软件有哪些,pcb设计软件有哪些

    之前我们讨论过DFM,了解了PCB设计的重要。那么,主流的PCB设计软件有哪些呢?我们分为免费软件、适合设计低端PCB板的软件,以及适合设计高端PCB板的软件,大致分为三类,给大家…

    2022年6月2日
    46
  • 全网推广方法那种有效(全网营销推广的模式有哪些)

    如今互联网发展飞速,大家都在利用互联网去将自己的企业产品进行推广,而全网营销可以很全面地帮助你们进行推广。首先,全网营销就是将产品的定位,网站的建设,网店的运营,再加上品牌的推广等…

    2022年4月11日
    63
  • 苹果手机铃声怎么设置歌曲(怎样把喜欢的歌设置成铃声)

    我们经常看到这种情况:公共场所一个苹果手机铃声响起,其他人个个都拿起手机来看,之所以出现这种情况,是因为很多人不知道怎样设置自己喜欢的铃声。其实,要想把自己喜欢的歌曲设置成苹果手机…

    2022年4月17日
    168
  • 一千多的安卓触屏手机哪些好用_安卓手机2000元左右哪个牌子好

    尽管智能手机以及成为了广大消费者移动拍摄的,但受机身体型的限制,专业数码相机并未就此退出历史舞台。与此同时,谷歌主导的 Android 生态系统,也凭借着独特的灵活和开创,而在手机…

    2022年6月5日
    39
  • 站群优化软件(怎么快速优化网站)

    百度优化文章标题的技巧。 根据该网站的主要关键字标题的,很重要!在百度搜索页面太长无法显示,影响用户的体验度。如何在百度优化中设置标题会更好? 简明易懂。 谈到简洁这一点,可能很多…

    2022年4月11日
    130
  • ps软件有些什么(抠图换脸app)

    随着订阅制的流行,越来越多软件转向订阅制,其中不乏日常工作中必备的软件。 有些公司会采购一部分软件,但并不会包含每一个你用得顺手的工具。不想花钱,临时有需求,有没有别的办法呢? 今…

    2022年5月27日
    34
  • 为什么没有声音(微信接没有声音怎么解决)

    微信接没有声音怎么解决 总结:1、首先打开手机中的“设置”选项。2、在设置页面,点击“更多设置”选项。3、在更多设置页面中,点击“应用管理”选项。4、在应用管理页面,找到并点击“微…

    2022年4月7日
    133