• <em id="6vhwh"><rt id="6vhwh"></rt></em>

    <style id="6vhwh"></style>

    <style id="6vhwh"></style>
    1. <style id="6vhwh"></style>
        <sub id="6vhwh"><p id="6vhwh"></p></sub>
        <p id="6vhwh"></p>
          1. 国产亚洲欧洲av综合一区二区三区 ,色爱综合另类图片av,亚洲av免费成人在线,久久热在线视频精品视频,成在人线av无码免费,国产精品一区二区久久毛片,亚洲精品成人片在线观看精品字幕 ,久久亚洲精品成人av秋霞

            (完整word版)基于蟻算法的路徑規(guī)劃

            更新時(shí)間:2025-12-17 22:11:57 閱讀: 評(píng)論:0


            2022年8月1日發(fā)
            (作者:春節(jié)放假時(shí)間)

            MATLAB實(shí)現(xiàn)基于蟻算法的機(jī)器人路徑規(guī)劃

            1、問題描述

            移動(dòng)機(jī)器人路徑規(guī)劃是機(jī)器人學(xué)的一個(gè)重要研究領(lǐng)域。它要求機(jī)器人依據(jù)某個(gè)或某些優(yōu)化原則(如最

            小能量消耗,最短行走路線,最短行走時(shí)間等),在其工作空間中到一條從起

            始狀態(tài)到目標(biāo)狀態(tài)的能避開障礙物的最優(yōu)路徑。機(jī)器人路徑規(guī)劃問題可以建模為一個(gè)有約束的優(yōu)化問題,都

            要完成路徑規(guī)劃、定位和避障等任務(wù)。

            2算法理論

            蟻算法(AntColonyAlgorithm,ACA),最初是由意大利學(xué)者DorigoM.博士于1991年首次提

            出,其本質(zhì)是一個(gè)復(fù)雜的智能系統(tǒng),且具有較強(qiáng)的魯棒性,優(yōu)良的分布式計(jì)算機(jī)制等優(yōu)點(diǎn)。該算法經(jīng)過十

            多年的發(fā)展,已被廣大的科學(xué)研究人員應(yīng)用于各種問題的研究,如旅行商問題,二次規(guī)劃問題,生產(chǎn)調(diào)度

            問題等。但是算法本身性能的評(píng)價(jià)等算法理論研究方面進(jìn)展較慢。

            Dorigo提出了精英蟻模型(EAS),在這一模型中信息素更新按照得到當(dāng)前最優(yōu)解的螞蟻所構(gòu)造的

            解來進(jìn)行,但這樣的策略往往使進(jìn)化變得緩慢,并不能取得較好的效果。次年Dorigo博士給出改進(jìn)模型

            (ACS),文中改進(jìn)了轉(zhuǎn)移概率模型,并且應(yīng)用了全局搜索與局部搜索策略,來得進(jìn)行深度搜索。

            Stützle與Hoos給出了最大-最小螞蟻系統(tǒng)(MAX-MIAS),所謂最大-最小即是為信息素設(shè)定上限與

            下限,設(shè)定上限避免搜索陷入局部最優(yōu),設(shè)定下限鼓勵(lì)深度搜索。螞蟻?zhàn)鳛橐粋€(gè)生物個(gè)體其自身的能力是十

            分有限的,比如螞蟻個(gè)體是沒有視覺的,螞蟻?zhàn)陨眢w積又是那么渺小,但是由這些能力有限的螞蟻組成的

            蟻卻可以做出超越個(gè)體螞蟻能力的超常行為。螞蟻沒有視覺卻可以尋覓食物,螞蟻體積渺小而蟻卻可

            以搬運(yùn)比它們個(gè)體大十倍甚至百倍的昆蟲。這些都說明螞蟻體內(nèi)部的某種機(jī)制使得它們具有了體智能,

            可以做到螞蟻個(gè)體無法實(shí)現(xiàn)的事情。經(jīng)過生物學(xué)家的長(zhǎng)時(shí)間觀察發(fā)現(xiàn),螞蟻是通過分泌于空間中的信息素進(jìn)

            行信息交流,進(jìn)而實(shí)現(xiàn)體行為的。

            下面簡(jiǎn)要介紹蟻通過信息素的交流到最短路徑的簡(jiǎn)化實(shí)例。如圖2-1所示,AE之間有兩條路

            ABCDE與ABHDE,其中AB,DE,HD,HB的長(zhǎng)度為1,BC,CD長(zhǎng)度為0.5,并且,假設(shè)路上信

            息素濃度為0,且各個(gè)螞蟻行進(jìn)速度相同,單位時(shí)間所走的長(zhǎng)度為1,每個(gè)單位時(shí)間內(nèi)在走過路徑上留下的

            信息素的量也相同。當(dāng)t=0時(shí),從A點(diǎn),E點(diǎn)同時(shí)各有30只螞蟻從該點(diǎn)出發(fā)。當(dāng)t=1,從A點(diǎn)出發(fā)的

            螞蟻?zhàn)叩紹點(diǎn)時(shí),由于兩條路BH與BC上的信息素濃度相同,所以螞蟻以相同的概率選擇BH與BC,

            這樣就有15只螞蟻選擇走BH,有15只螞蟻選擇走BC。同樣的從E點(diǎn)出發(fā)的螞蟻?zhàn)叩紻點(diǎn),分別有

            15只螞蟻選擇DH和DC。當(dāng)t=2時(shí),選擇BC與DC的螞蟻分別走過了BCD和DCB,而選擇BH

            與DH的螞蟻都走到了H點(diǎn)。所有的螞蟻都在所走過的路上留下了相同濃度的信息素,那么路徑BCD上的

            信息素的濃度是路徑BHD上信息素濃度的兩倍,這樣若再次有螞蟻選擇走BC和BH時(shí),或選擇走DC與

            DH時(shí),都會(huì)以較大的概率選擇信息素濃度高的一邊。這樣的過程反復(fù)進(jìn)行下去,最短的路徑上走過的螞蟻

            較多,留下的信息素也越多,蟻這樣就可以到一條較短的路。這就是它們體智能的體現(xiàn)。

            蟻算法就是模擬螞蟻覓食過程中可以到最短的路的行為過程設(shè)計(jì)的一種仿生算法。在用蟻算法求

            解組合優(yōu)化問題時(shí),首先要將組合優(yōu)化問題表達(dá)成與信息素相關(guān)的規(guī)范形式,然后各個(gè)螞蟻獨(dú)立地根據(jù)局部的

            信息素進(jìn)行決策構(gòu)造解,并根據(jù)解的優(yōu)劣更新周圍的信息素,這樣的過程反復(fù)的進(jìn)行即可求出組合優(yōu)化問題

            的優(yōu)化解。

            歸結(jié)蟻算法有如下特點(diǎn):

            (1)分布式計(jì)算:各個(gè)螞蟻獨(dú)立地構(gòu)造解,當(dāng)有螞蟻個(gè)體構(gòu)造的解較差時(shí),并不會(huì)影響整體的求解結(jié)

            果。這使得算法具有較強(qiáng)的適應(yīng)性;

            (2)自組織性:系統(tǒng)學(xué)中自組織性就是系統(tǒng)的組織指令是來自系統(tǒng)的內(nèi)部。同樣的蟻算法中的各個(gè)螞

            蟻的決策是根據(jù)系統(tǒng)內(nèi)部信息素的分布進(jìn)行的。這使得算法具有較強(qiáng)的魯棒性;

            (3)正反饋機(jī)制與負(fù)反饋機(jī)制結(jié)合:若某部分空間上分布的信息素越多,那么在這個(gè)空間上走過的螞蟻

            也就越多;走過的螞蟻越多,在那個(gè)空間上留下的信息素也就越多,這就是存在的正反饋機(jī)制。但蟻算

            法中解的構(gòu)造是通過計(jì)算轉(zhuǎn)移概率實(shí)現(xiàn)的,也就是說構(gòu)造解的時(shí)候可以接受退化解,這限制了正反饋機(jī)制,

            可以使得搜索范圍擴(kuò)大,這是蟻算法中隱含的負(fù)反饋機(jī)制。

            3求解步驟

            應(yīng)用蟻算法求解機(jī)器人路徑優(yōu)化問題的主要步驟如下:

            (1)輸入由0和1組成的矩陣表示機(jī)器人需要尋最優(yōu)路徑的地圖的地圖,其中

            示此處可以通過的,1表示此處為障礙物。

            0表

            圖的表示矩陣為:

            00000000;000

            00000;00000000;000000111

            ;00000000;011

            10000;000000

            00;11000000;

            11000000;11000000;000000

            00;

            00000000;

            11011110;

            11011110;

            11011110;

            00000000;

            00000110;

            00100110;

            00100000;

            00000000;

            (2)輸入初始的信息素矩陣,選擇初始點(diǎn)和終止點(diǎn)并且設(shè)置各種參數(shù)。在此次計(jì)算中,我們?cè)O(shè)置所有位

            置的初始信息素相等。

            (3)選擇從初始點(diǎn)下一步可以到達(dá)的節(jié)點(diǎn),根據(jù)每個(gè)節(jié)點(diǎn)的信息素求出前往每個(gè)節(jié)點(diǎn)的概率,并利用輪

            盤算法選取下一步的初始點(diǎn)。

            p

            k

            ij

            t

            ijtijktabu

            0

            ijij

            k

            ifjtabuk

            otherwise

            其中ijt為析取圖中弧i,j上的信息素的濃度。ij為與弧i,j相關(guān)聯(lián)的啟發(fā)式信息。,分別為ijt,ij的權(quán)

            重參數(shù)。

            (4)更新路徑,以及路程長(zhǎng)度。

            (5)重復(fù)(3)(4)過程,直到螞蟻到達(dá)終點(diǎn)或者無路可走。

            (6)重復(fù)(3)(4)(5),直到某一代m只螞蟻迭代結(jié)束。

            (7)更新信息素矩陣,其中沒有到達(dá)的螞蟻不計(jì)算在內(nèi)。

            ijt11ijtij

            ijtQ

            Lkt,如果螞蟻k經(jīng)過i,j

            0,如果螞蟻k不經(jīng)過i,j

            其中為信息素?fù)]發(fā)系數(shù)。Q為信息量增加強(qiáng)度。Lkt為路徑長(zhǎng)度。

            (8)重復(fù)(3)-(7),直至n代螞蟻迭代結(jié)束。

            4運(yùn)行結(jié)果(圖、表等)將上述矩陣輸入到程序中,畫出最短路徑的路線,并且輸入每一輪迭代的最短路

            徑,

            查看程序的收斂效果,在程序中設(shè)置plotif=1則輸出收斂和最短路徑圖,在程序中設(shè)置plotif2=1則輸出每一

            代螞蟻的路徑圖。

            最終輸出的結(jié)果如圖

            20

            18

            16

            14

            12

            10

            8

            6

            4

            2

            24681

            收斂曲線(最小路徑長(zhǎng)度)

            35

            30

            25

            20

            15

            長(zhǎng)

            5

            0

            5MATLAB程序functionm_main()

            G=[

            108090100迭代次數(shù)

            00000000;

            0

            00000000;

            00000000;

            00000000;

            00000000;

            00000000;

            00000000;

            11000000;

            11000000;

            11000000;

            11000000;

            00000000;

            11011110;

            11011110;

            11011110;

            00000000;

            00000110;

            00100110;

            00100000;

            00000000;];

            MM=size(G,1);%G地形圖為01矩陣,如果為1表示障礙物

            Tau=ones(MM*MM,MM*MM);%Tau初始信息素矩陣(認(rèn)為前面的覓食活動(dòng)中有殘留的信息素)

            Tau=8.*Tau;

            K=100;%K迭代次數(shù)(指螞蟻出動(dòng)多少波)

            M=50;%M螞蟻個(gè)數(shù)(每一波螞蟻有多少個(gè))

            S=1;%S起始點(diǎn)(最短路徑的起始點(diǎn))

            E=MM*MM;%E終止點(diǎn)(最短路徑的目的點(diǎn))

            Alpha=1;

            Beta=7;

            %Alpha表征信息素重要程度的參數(shù)

            %Beta表征啟發(fā)式因子重要程度的參數(shù)

            Rho=0.3;%Rho信息素蒸發(fā)系數(shù)

            Q=1;

            minkl=inf;

            mink=0;

            minl=0;

            D=G2D(G);

            =size(D,1);%表示問題的規(guī)模(象素個(gè)數(shù))a=1;%小方格象素的邊長(zhǎng)

            Ex=a*(mod(E,MM)-0.5);%終止點(diǎn)橫坐標(biāo)

            ifEx==-0.5

            Ex=MM-0.5;end

            Ey=a*(MM+0.5-ceil(E/MM));%終止點(diǎn)縱坐標(biāo)

            Eta=zeros();%啟發(fā)式信息,取為至目標(biāo)點(diǎn)的直線距離的倒數(shù)%下面構(gòu)造啟發(fā)式信息矩陣

            fori=1:ix=a*(mod(i,MM)-0.5);

            ifix==-0.5

            %Q信息素增加強(qiáng)度系數(shù)

            ix=MM-0.5;

            endiy=a*(MM+0.5-ceil(i/MM));

            ifi~=E

            Eta(i)=1/((ix-Ex)^2+(iy-Ey)^2)^0.5;

            else

            Eta(i)=100;

            end

            end

            ROUTES=cell(K,M);%用細(xì)胞結(jié)構(gòu)存儲(chǔ)每一代的每一只螞蟻的爬行路線PL=zeros(K,M);%用矩陣

            存儲(chǔ)每一代的每一只螞蟻的爬行路線長(zhǎng)度%%----------------------------------------------啟動(dòng)K輪螞

            蟻覓食活動(dòng),每輪派出M只螞蟻-------------------------------------------

            fork=1:Kform=1:M

            %%第一步:狀態(tài)初始化W=S;%當(dāng)前節(jié)點(diǎn)初始化為起始點(diǎn)Path=S;%爬行路線初始化

            PLkm=0;%爬行路線長(zhǎng)度初始化

            TABUkm=ones();%禁忌表初始化

            TABUkm(S)=0;%已經(jīng)在初始點(diǎn)了,因此要排除

            DD=D;%鄰接矩陣初始化

            %%第二步:下一步可以前往的節(jié)點(diǎn)DW=DD(W,:);

            DW1=find(DW);

            forj=1:length(DW1)

            ifTABUkm(DW1(j))==0DW(DW1(j))=0;

            end

            end

            LJD=find(DW);

            Len_LJD=length(LJD);%可選節(jié)點(diǎn)的個(gè)數(shù)

            %%覓食停止條件:螞蟻未遇到食物或者陷入死胡同

            whileW~=E&&Len_LJD>=1

            %%第三步:轉(zhuǎn)輪賭法選擇下一步怎么走PP=zeros(Len_LJD);

            fori=1:Len_LJDPP(i)=(Tau(W,LJD(i))^Alpha)*((Eta(LJD(i)))^Beta);

            end

            sumpp=sum(PP);

            PP=PP/sumpp;%建立概率分布

            Pcum(1)=PP(1);

            fori=2:Len_LJDPcum(i)=Pcum(i-1)+PP(i);end

            Select=find(Pcum>=rand);to_visit=LJD(Select(1));%%第四步:狀態(tài)更新和記錄

            Path=[Path,to_visit];%路徑增加

            PLkm=PLkm+DD(W,to_visit);%路徑長(zhǎng)度增加W=to_visit;%螞蟻移到下一個(gè)節(jié)點(diǎn)

            forkk=1:ifTABUkm(kk)==0DD(W,kk)=0;DD(kk,W)=0;endend

            TABUkm(W)=0;%已訪問過的節(jié)點(diǎn)從禁忌表中刪除DW=DD(W,:);

            DW1=find(DW);

            forj=1:length(DW1)

            ifTABUkm(DW1(j))==0

            DW(j)=0;

            end

            endLJD=find(DW);Len_LJD=length(LJD);%可選節(jié)點(diǎn)的個(gè)數(shù)end

            %%第五步:記下每一代每一只螞蟻的覓食路線和路線長(zhǎng)度ROUTES{k,m}=Path;

            ifPath(end)==EPL(k,m)=PLkm;ifPLkm

            elsePL(k,m)=0;

            end

            end

            %%第六步:更新信息素Delta_Tau=zeros(,);%更新量初始化form=1:M

            ifPL(k,m)ROUT=ROUTES{k,m};

            TS=length(ROUT)-1;%跳數(shù)

            PL_km=PL(k,m);

            fors=1:TSx=ROUT(s);y=ROUT(s+1);Delta_Tau(x,y)=Delta_Tau(x,y)+Q/PL_km;

            Delta_Tau(y,x)=Delta_Tau(y,x)+Q/PL_km;

            end

            end

            end

            Tau=(1-Rho).*Tau+Delta_Tau;%信息素?fù)]發(fā)一部分,新增加一部分

            end

            %%-------------------------繪圖------------------------

            plotif=1;%是否繪圖的控制參數(shù)

            ifplotif==1%繪收斂曲線

            minPL=zeros(K);

            fori=1:K

            PLK=PL(i,:);

            onzero=find(PLK);

            PLKPLK=PLK(onzero);

            minPL(i)=min(PLKPLK);

            end

            figure(1)

            plot(minPL);

            holdon

            gridon

            title('收斂曲線(最小路徑長(zhǎng)度)');

            xlabel('迭代次數(shù)');

            ylabel('路徑長(zhǎng)度');%繪爬行圖

            figure(2)axis([0,MM,0,MM])fori=1:MMforj=1:MMifG(i,j)==1x1=j-1;y1=MM-i;

            x2=j;y2=MM-i;

            x3=j;y3=MM-i+1;

            x4=j-1;y4=MM-i+1;

            fill([x1,x2,x3,x4],[y1,y2,y3,y4],[0.2,0.2,0.2]);

            holdon

            else

            x1=j-1;y1=MM-i;

            x2=j;y2=MM-i;

            x3=j;y3=MM-i+1;

            x4=j-1;y4=MM-i+1;

            fill([x1,x2,x3,x4],[y1,y2,y3,y4],[1,1,1]);

            holdonendendendholdon

            ROUT=ROUTES{mink,minl};

            LEROUT=length(ROUT);

            Rx=ROUT;

            Ry=ROUT;

            forii=1:LEROUT

            Rx(ii)=a*(mod(ROUT(ii),MM)-0.5);ifRx(ii)==-0.5

            Rx(ii)=MM-0.5;endRy(ii)=a*(MM+0.5-ceil(ROUT(ii)/MM));end

            plot(Rx,Ry)end

            plotif2=0;%繪各代螞蟻爬行圖

            ifplotif2==1figure(3)axis([0,MM,0,MM])fori=1:MMforj=1:MMifG(i,j)==1x1=j-1;y1=MM-i;

            x2=j;y2=MM-i;x3=j;y3=MM-i+1;x4=j-1;y4=MM-i+1;fill([x1,x2,x3,x4],[y1,y2,y3,y4],[0.2,0.2,0.2]);

            holdonelse

            x1=j-1;y1=MM-i;x2=j;y2=MM-i;

            x3=j;y3=MM-i+1;x4=j-1;y4=MM-i+1;fill([x1,x2,x3,x4],[y1,y2,y3,y4],[1,1,1]);holdon

            endendendfork=1:K

            PLK=PL(k,:);minPLK=min(PLK);

            pos=find(PLK==minPLK);

            m=pos(1);

            ROUT=ROUTES{k,m};

            LEROUT=length(ROUT);

            Rx=ROUT;

            Ry=ROUT;

            forii=1:LEROUT

            Rx(ii)=a*(mod(ROUT(ii),MM)-0.5);

            ifRx(ii)==-0.5

            Rx(ii)=MM-0.5;

            end

            Ry(ii)=a*(MM+0.5-ceil(ROUT(ii)/MM));

            end

            plot(Rx,Ry)

            holdon

            end

            end

            functionD=G2D(G)

            l=size(G,1);

            D=zeros(l*l,l*l);

            fori=1:l

            forj=1:l

            ifG(i,j)==0

            form=1:l

            forn=1:l

            ifG(m,n)==0

            im=abs(i-m);jn=abs(j-n);

            ifim+jn==1||(im==1&&jn==1)

            D((i-1)*l+j,(m-1)*l+n)=(im+jn)^0.5;endendend

            end

            end

            end

            end


            本文發(fā)布于:2022-08-01 17:12:40,感謝您對(duì)本站的認(rèn)可!

            本文鏈接:http://www.newhan.cn/falv/fa/83/50996.html

            版權(quán)聲明:本站內(nèi)容均來自互聯(lián)網(wǎng),僅供演示用,請(qǐng)勿用于商業(yè)和其他非法用途。如果侵犯了您的權(quán)益請(qǐng)與我們聯(lián)系,我們將在24小時(shí)內(nèi)刪除。

            留言與評(píng)論(共有 0 條評(píng)論)
               
            驗(yàn)證碼:
            推薦文章
            排行榜
            Copyright ?2019-2022 Comsenz Inc.Powered by ? 站長(zhǎng)QQ:55-9-10-26
            主站蜘蛛池模板: 免费无码又爽又黄又刺激网站| 精品无码国产一区二区三区av| 久久香蕉欧美精品| 男女激情一区二区三区| 久播影院无码中文字幕| 国产成人精品国产成人亚洲| 国产美女被遭强高潮免费一视频| 无码国模国产在线观看免费| 国产99在线 | 免费| 最新国产精品拍自在线观看| 亚洲精品麻豆一二三区| 中文乱码字幕无线观看2019| 国产精品成人免费视频网站| 国产精品免费激情视频| 亚洲欧美综合精品成人导航| 亚洲AV无码破坏版在线观看 | 蜜桃无码一区二区三区| 久久99精品中文字幕| 国产播放91色在线观看| 蜜臀在线播放一区在线播放| 久久中文字幕一区二区| 在线高清免费不卡全码| 国产麻豆精品久久一二三| 大桥未久亚洲无av码在线| 亚洲欧美电影在线一区二区| 永久免费不卡在线观看黄网站| 国产剧情麻豆一区二区三区亚洲| 亚洲国产精品久久久天堂麻豆宅男| 精品国产亚洲午夜精品av| 天堂mv在线mv免费mv香蕉| 日韩最新中文字幕| 亚洲毛片多多影院| 夜夜添狠狠添高潮出水| 色欲狠狠躁天天躁无码中文字幕| 国产乱码精品一区二区上| 激情综合色综合啪啪开心| 国产AV老师黑色丝袜美腿| 亚洲一区二区经典在线播放| 99精品国产在热久久| 久久 午夜福利 张柏芝| 久久国产成人高清精品亚洲|