[経路計画]人工蜂コロニーアルゴリズムの経路計画[Matlab036]

1.はじめに

ミツバチは
自然界のミツバチを収集し、どのような環境でも非常に高効率で高品質の蜜源を見つけることができ、環境の変化に適応することができます。ミツバチのコロニーの蜜源収集システムは、蜜源、雇われた蜂、無職の蜂の3つの部分で構成されています。蜜源の長所と短所には、蜜源からの蜜の量、距離など、多くの要因があります。巣箱から、抽出の難しさなど。雇用ミツバチは特定の蜜源に接触し、特定の確率形式で仲間に蜜源情報を通知します。非雇用ミツバチの義務は、採掘する蜜源を見つけることです。フォロワーミツバチとスカウトミツバチに分けられます。フォロワーミツバチは巣箱で待っていて、スカウトミツバチは巣箱の周りの新しい蜜源を検出しています。ミツバチが蜜を集めると、巣の中の蜂の一部がスカウト蜂として働き、巣の近くの蜜源を絶えずランダムに探します。蜜の含有量が特定のしきい値を超える蜜源が見つかると、スカウト蜂は雇われた蜂になり、ミツバチの採集を開始します。ミツバチが終わったら、巣箱に戻って踊り、次のピークを伝えます。スイングダンスはミツバチ同士の情報交換の基本であり、蜜源の方向や巣からの距離など、巣の周りの蜜源に関する重要な情報を伝えます。フォローピークはこの情報を使用して、ハイブの周りの蜜源。雇われたミツバチがスウィングダンスを踊った後、彼らは元の蜜源に戻り、巣箱にいくつかのフォロワー蜂がいて、蜜を集めます。フォロワー蜂の数は、蜜源の質によって異なります。このようにして、ミツバチのコロニーは、蜜の量が最も多い蜜源を迅速かつ効率的に見つけることができます。
ここに画像の説明を挿入
蜜を集めるミツバチの群知能は、異なる役割間の交換、変換、コラボレーションを通じて実現されます。蜂蜜を集める具体的なプロセスを図に示します。初期の段階では、ミツバチはスカウトミツバチの形で現れ、巣箱の周りの蜜源について何も知りませんでした。ミツバチの内部の動機と外部条件が異なるため、スカウトミツバチには2つの選択肢がありました。①雇われたミツバチになることとハイブ周辺からランダムに蜜源を探し始めると、写真のルート②が次のピークになり、スイングダンスを観察した後、ルートに示すように蜜源を探し始めます。2つの蜜源が見つかったとします。蜜源を見つけた後、調査員の蜂は雇われた蜂になります。雇われた蜂は独自の属性を使用して蜜源の場所を記憶し、すぐに蜂蜜の収集に投資します。蜜の収集が完了すると、ミツバチは蜜を満載して巣箱に戻り、蜜を荷降ろし室に降ろします。荷降ろしが完了した後、ミツバチを雇って蜜源を放棄するための3つの可能な行動があります。蜜の量が多くないことがわかり、拘束されていない非ハチの蜂になり、写真のルートをたどります。②募集エリアで踊り、ハイブにとどまるために何人かを募集してピークをたどり、ルートに戻します。発見された蜜源の再び;③他のミツバチを募集せず、元に戻り続けます。蜜を集めるための蜜源は写真のルートです。実生活では、すべてのミツバチが最初からすぐに蜜を集めるわけではありません。さらに、ほとんどのミツバチは、募集エリアに戻って踊り、蜜を集めるためにさらに多くのミツバチを募集することを選択します。
アルゴリズムモデル
人工蜂コロニーアルゴリズムは、蜂の蜂蜜収集プロセスをシミュレートすることによって提案された新しいタイプのインテリジェント最適化アルゴリズムであり、食料源、雇われた蜂、および雇用されていない蜂で構成されています。
食料源:食料源は蜜源です。最適化問題では、問題の実行可能解が特定の形式で与えられます。人工蜂コロニーアルゴリズムでは、食料源は最適化問題の実行可能解であり、人工蜂コロニーアルゴリズムで扱われる基本的なオブジェクトです。食物源の質は、蜜源の蜜の適合性を評価することによって解決することができます。
ミツバチを雇う:ミツバチを雇うということは、鉛の蜂が食料源の位置に対応することを意味します。食料源は鉛の蜂に対応します。人工蜂コロニーアルゴリズムでは、食物源の数は鉛蜂の数と同じです。鉛蜂のタスクは、食物源情報を発見し、それを一定の確率でフォロワーの蜂と共有することです。確率は、人工蜂コロニーアルゴリズムでの選択です。戦略は通常、適合度の値に基づいてルーレットによって計算されます。
雇われていないミツバチ:雇われていないミツバチには、フォロービーとスカウトミツバチが含まれます。ハイブの近くの情報源。人工蜂コロニーアルゴリズムでは、フォロワーの蜂が食料源の近くにある新しい食料源を探し、主要な蜂から送信された情報に基づいて貪欲な選択を行います。この時間以降に食料源が更新されていない場合、リードビーはスカウトビーになり、スカウトビーは元の食料源に代わる新しい食料源を探します。
ここに画像の説明を挿入
アルゴリズムによる検索プロセス
ここに画像の説明を挿入
人工蜂コロニーアルゴリズムは、人工蜂コロニーをリードビー、フォロービー、スカウトビーの3種類に分類します。各検索プロセスでは、リードビーとフォロービーが次々と食料源を採掘します。つまり、最適なソリューションを見つけます。ミツバチは、それが局所最適に該当するかどうかを観察し、局所最適に該当する場合は、他の可能な食料源をランダムに検索します。各食料源は問題に対する可能な解決策を表しており、食料源からの蜜の量は対応する解決策の質(適応度値fiti)に対応しています。
1.人工蜂コロニーアルゴリズムの検索プロセスでは、最初に初期化が必要です。これには、母集団数、MCNの最大反復回数、制御パラメーターの制限、および解の範囲である検索スペースの決定が含まれます。初期解xi(i = 1,2,3、...、SN)、SNは食料源の数、各解xiはD次元ベクトル、Dは問題の次元です。初期化後、母集団全体がリードビーの検索プロセスを繰り返し、最大反復回数MCNまたはエラー許容値εに達するまで、ビーとスカウトビーを追跡します。
2.検索プロセスの開始時に、各主要なハチは、式(2-3)、
vij = xij +Φij(xij-xkj)(2-3)によって、新しいソリューション、つまり新しい食料源を生成します。
ここで、k∈ ﹛1,2、…、SN﹜、j∈{1,2、…、D}、およびk≠i;Φijは[-1,1]の間の乱数です。新しい解決策の適合度を計算して評価します。新しい解決策の適合度が古い解決策よりも優れている場合は、蜂に新しい解決策を覚えさせ、古い解決策を忘れさせます。それ以外の場合は、古いソリューションが保持されます。
3.すべての主要なミツバチが検索プロセスを完了した後、主要なミツバチは募集エリアで踊り、解決策の情報と情報をフォローしているミツバチと共有します。フォロワービーは、式
pi = fiti / ∑k = 1SNfitkに従って各ソリューションの選択確率を計算します。(2-4)
次に、区間[-1,1]で数値がランダムに生成されます。解の確率値が乱数よりも大きい場合、ビーバイ方程式(2-3)に従って新しい解が生成されます。新しい解の割合がチェックされます。新しい解の場合fitiが以前よりも優れている場合、次のハチは新しい解を記憶し、古い解を忘れます。それ以外の場合は、古い解を保持します。
4.後続のすべてのミツバチが検索プロセスを完了した後、リミットサイクル後にソリューションがさらに更新されない場合、ソリューションは局所最適に分類されると見なされ、食料源は廃棄されます。食料源xiが廃棄されたとすると、この食料源に対応する主要なハチは検出ハチに変わります。スカウトビーは、式(2-5)に置き換える新しい食料源を生成します。

                                                             xij=xminj+rand(0,1)(xmaxj-xminj)          (2-5)

ここで、j∈{1,2 ...、D}。その後、戻ってミツバチの検索プロセスを主導し、サイクルを繰り返し始めます。
5.人工蜂コロニーアルゴリズムの食料源の品質は、一般に大きいほど良いです。つまり、適応度の値が大きいほど良いです。最適化する問題に対応するため、次の2つの場合に考慮する必要があります。最小問題と最大の問題。fiを最適化問題の目的関数とすると、最小問題を最適化する場合、適応度関数はfiの修正であり、一般に式(2-6)で表されます。最大問題が最適化されている場合、適応度関数は次のようになります。目的関数。

fiti = {1 + abs(fi)fi> = 01/1 + fi fi> 0(2-6)
人工蜂コロニーアルゴリズムが食料源を評価する場合、通常、式(2-7)に従って欲張り選択を行います。

vi = {xi fit(xi)<= fit(vi)vi fit(vi)> fit(xi)(2-7)
人工蜂コロニーアルゴリズムは、循環検索を通じて最適な食料源または最適な解を見つけることです。
アルゴリズムのステップ
人工蜂コロニーアルゴリズム特定の実装ステップ
ステップ1:母集団の初期化:各パラメーター、蜂コロニーの総数SN、食料源が収集される回数、最大反復回数MCN、およびパラメータ制限を制御し、問題の検索範囲を決定し、検索範囲内で初期解xi(i = 1,2、... SN)をランダムに生成します。
ステップ2:各初期ソリューションの適合度を計算して評価します。
ステップ3:サイクル条件を設定し、サイクルを開始します
ステップ4:式(2-3)に従ってソリューションxiの近傍検索を実行するように蜂を導き、新しいソリューション(食料源)viを生成し、その適合性を計算します値;
ステップ5:式(2-7)に従います貪欲な選択を実行します:viの適合値がxiよりも優れている場合は、xiをviに置き換え、viを現在の最良の解決策として使用します。それ以外の場合は、xiを変更しないでください。
ステップ6:式(2-4)
に従って、食料源の確率piを計算します。ステップ7:蜂に従って、確率piに従って溶液または食料源を選択し、式(2)に従って新しい解(食料源)viを検索します。 2-3)、そしてその適合性を計算します。
ステップ8:式(2-7)に従って貪欲な選択を実行します。viの適合度がxiよりも優れている場合は、xiの代わりにviを使用し、現在の最良のソリューションとしてviを使用します。それ以外の場合は、xiを変更しないでください。
ステップ9:放棄された解決策が必要です。はいの場合、調査中のミツバチは式(2-5)に従って新しいソリューションをランダムに生成し、それを置き換えます。
ステップ10:これまでの最良のソリューションを記録します。

ステップ11:ループ終了条件が満たされているかどうかを判断し、満たされている場合はループが終了し、最適解が出力されます。そうでない場合は、ステップ4に戻って検索を続行します。

第二に、ソースコード

global radar1
global radar2
global R
% radar1 = [350 105 305 105 175 245 415 480 40 470];
% baili = size(radar1,2);
% radar2 = [200 0 -150 110 110 110 0 110 100 -50];
% R = [140 70 150 30 25 25 25 90 40 30];
 
 
radar1 = [100 200 300 400 150 250 350 150 250 350 0 466 250 250 466 30];
baili = size(radar1,2);
radar2 = [0 0 0 0 50 50 50 -50 -50 -50 40 40 -300 300 -40 -20];
R = [40 40 40 40 40 40 40 40 40 40 20 20 260 277 20 30];
 
NP=40; %/* The number of colony size (employed bees+onlooker bees)*/
FoodNumber=NP/2; %/*The number of food sources equals the half of the colony size*/
maxCycle=10; %/*The number of cycles for foraging {a stopping criteria}*/
limit=0.1*maxCycle; %/*A food source which could not be improved through "limit" trials is abandoned by its employed bee*/
D= 30;
ub=ones(1,D).*50; %/*lower bounds of the parameters. */
lb=ones(1,D).*-50;%/*upper bound of the parameters.*/
runtime=1;%/*Algorithm can be run many times in order to see its robustness*/
GlobalMins=zeros(1,runtime);
Range = repmat((ub-lb),[FoodNumber 1]);
Lower = repmat(lb, [FoodNumber 1]);
Foods = rand(FoodNumber,D) .* Range + Lower;
 
for r=1:runtime
for i = 1:FoodNumber
    ObjVal(i) = calcu(Foods(i,:));
end
Fitness = calculateFitness(ObjVal);
trial=zeros(1,FoodNumber);
BestInd=find(ObjVal==min(ObjVal));
BestInd=BestInd(end);
GlobalMin = ObjVal(BestInd);
GlobalParams=Foods(BestInd,:);
iter=1;
 
 
 
while ((iter <= maxCycle)),
    for i=1:(FoodNumber)
        Param2Change=fix(rand*D)+1;
        neighbour=fix(rand*(FoodNumber))+1;     
            while(neighbour==i)
                neighbour=fix(rand*(FoodNumber))+1;
            end;  
       sol=Foods(i,:);
       sol(Param2Change)=Foods(i,Param2Change)+(Foods(i,Param2Change)-Foods(neighbour,Param2Change))*(rand-0.5)*2;
        %
        ind=find(sol<lb);
        libai = rand(1,D).*(ub-lb)+lb;
        sol(ind)=libai(ind);
        ind=find(sol>ub);
        libai = rand(1,D).*(ub-lb)+lb;
        sol(ind)=libai(ind);
        %
        ObjValSol = calcu(sol);
        FitnessSol=calculateFitness(ObjValSol);
       if (FitnessSol>Fitness(i)) 
            Foods(i,:)=sol;
            Fitness(i)=FitnessSol;
            ObjVal(i)=ObjValSol;
            trial(i)=0;
        else
            trial(i)=trial(i)+1;
       end;
     end;
prob=(0.9.*Fitness./max(Fitness))+0.1;
i=1;
t=0;
while(t<FoodNumber)
    if(rand<prob(i))
        t=t+1;
        Param2Change=fix(rand*D)+1;
        neighbour=fix(rand*(FoodNumber))+1;     
            while(neighbour==i)
                neighbour=fix(rand*(FoodNumber))+1;
            end;
        
       sol=Foods(i,:);
       sol(Param2Change)=Foods(i,Param2Change)+(Foods(i,Param2Change)-Foods(neighbour,Param2Change))*(rand-0.5)*2;
        %
        ind=find(sol<lb);
        libai = rand(1,D).*(ub-lb)+lb;
        sol(ind)=libai(ind);
        ind=find(sol>ub);
        libai = rand(1,D).*(ub-lb)+lb;
        sol(ind)=libai(ind);
        %
        ObjValSol = calcu(sol);
        FitnessSol=calculateFitness(ObjValSol);
       if (FitnessSol>Fitness(i)) 
            Foods(i,:)=sol;
            Fitness(i)=FitnessSol;
            ObjVal(i)=ObjValSol;
            trial(i)=0;
        else
            trial(i)=trial(i)+1; %/*if the solution i can not be improved, increase its trial counter*/
       end;
    end;
    
    i=i+1;
    if (i==(FoodNumber)+1) 
        i=1;
    end;   
end; 
         ind=find(ObjVal==min(ObjVal));
         ind=ind(end);
         if (ObjVal(ind)<GlobalMin)
         GlobalMin=ObjVal(ind);
         GlobalParams=Foods(ind,:);
         end;
 
         
         
 
ind=find(trial==max(trial));
ind=ind(end);
if (trial(ind)>limit)
    trial(ind)=0;
    sol=(ub-lb).*rand(1,D)+lb;
    ObjValSol = calcu(sol);
    FitnessSol=calculateFitness(ObjValSol);
    Foods(ind,:)=sol;
    Fitness(ind)=FitnessSol;
    ObjVal(ind)=ObjValSol;
end;
fprintf('iteration = %d ObjVal=%g\n',iter,GlobalMin);
aaaaa(iter) = GlobalMin;
iter=iter+1;
end % End of ABC
storeer(r,:) = aaaaa;
end
 
 
% 
% figure (1)
% a = mean(storeer);
% plot(a)
 
figure (2)
hold on
plot(0,0,'k*')
plot(500,0,'ks')
 
for i = 1:baili
hold on
plot(radar1(i),radar2(i),'ko');
cir_plot([radar1(i),radar2(i)],R(i));
end
legend('starting point','target point','threat center')
 
axis equal
axis([-100,620,-400,400])
for i = 1:(D-1)
    plot([500/(D+1)*i,500/(D+1)*(i+1)],[GlobalParams(i),GlobalParams(i+1)],'LineWidth',2);
    hold on
end
plot([0,500/(D+1)*(1)],[0,GlobalParams(1)],'LineWidth',2);
plot([500/(D+1)*D,500],[GlobalParams(D),0],'LineWidth',2);

3、実行中の結果

ここに画像の説明を挿入

四、備考

完全なコードまたは記述については、QQ912100926を追加してください。
過去のレビュー>>>>>>
[経路計画] 3次元UAV経路計画のための粒子群最適化アルゴリズム[Matlab012]
[経路計画]複数のロジスティクスセンターのオープンビークル経路計画のための遺伝的アルゴリズム[Matlab013]
[経路計画]粒子群アルゴリズムに基づくロボットグリッド経路計画[Matlab014]
[経路計画]最短経路を解決するためのAntコロニーアルゴリズム[Matlab015]
[経路計画]ロジスティクスセンターの場所を選択するための免疫アルゴリズム[Matlab016]
[経路計画] 3-人工蜂コロニーに
基づくドローンの次元経路計画[Matlab017] [経路計画]グリッドマップに基づくロボット経路計画の遺伝的アルゴリズム[Matlab018]
[経路計画]複数のドローンのAntコロニーアルゴリズム攻撃スケジューリング[Matlab019]
[経路計画]グリッドマップロボット最適経路計画に基づく遺伝的アルゴリズム[Matlab020]
[経路計画]割り当て順序を考慮したマルチUAV協調ターゲット割り当てモデリングのための遺伝的アルゴリズム[
Matlab021問題] [経路計画] antコロニーアルゴリズムmulti-centervrp問題[Matlab022]
[経路計画]時間ウィンドウで多施設VRPを解決するためのantコロニーアルゴリズム[Matlab023問題]
[経路計画]多くの遺伝子アルゴリズム中央VRPソリューション[Matlab024]
[経路計画] VRPを解決するためのシミュレートされたアニーリング問題[Matlab025]
[経路計画]スターグリッド経路計画[Matlab026]
[経路計画]双方向クロスファクターに基づく最適粒子群グリッドマップ経路計画[Matlab027]
[パスプランニング] [TSP] GUIでTSP問題を解決するためのAntコロニーアルゴリズム[Matlab028]
[パスプランニング]ラスターマップパスプランニングのためのAntコロニーアルゴリズム[Matlab029]
[パスプランニング]巡回セールスマンTSPの遺伝的アルゴリズム[MatlabIssue 030 ]
[パスプランニング]巡回セールスマンTSPシミュレーションアニーリングアルゴリズムの問​​題[Matlab031]
[パスプランニング] Antコロニーアルゴリズムのスマートカーパスプランニング[Matlab032]
[パスプランニング] Huawei Cup:matlabに基づくUAV緊急救助および災害救援[Matlab033]
[経路計画] matlabの最小コストと最大流量計算問題[Matlab034]
[経路計画] 3次元経路計画問題を解決するためのA *アルゴリズム[Matlab035]

おすすめ

転載: blog.csdn.net/m0_54742769/article/details/113090683