インテリジェントなアルゴリズム:アリコロニーアルゴリズム

現代のインテリジェントなアルゴリズムとしては、アリのコロニーのアルゴリズムは、任意の事前知識を必要としない、最初にランダムに選択された検索パス、解空間を理解し、より多くの規則を検索し、徐々にグローバル最適なソリューションを取得します。現在、アリコロニーアルゴリズムが正常に車両が問題と割り当ての問題をルーティング、巡回セールスマン問題を解決するために適用されています。

TSPを解きます:

キャップ22 %%最適化アントコロニーアルゴリズム-巡回セールスマン問題(TSP)の最適化

%%空の環境変数
すべてクリア
CLC 

%%インポートデータの
ロードcitys_data.mat 

%%都市間の相互の距離計算
のn =サイズ(市内、1 ); 
D =ゼロ(N、N-); 
私は= 1:N- 
    ため= J. 1:N- 
        IF I〜J = 
            D(I、J)= SQRT(SUM((市内(I、:) -市内(J 、:))^ 2)); 
            。D(I、J)= -1E 4;       
        エンド
    エンド     
エンド

%%初期化パラメータ
M = 50;アリの%番号
アルファ= 1;%フェロモン重要因子
ベータ= 5。 %ヒューリスティック関数の重要因子
のRho = 0.1;%因子フェロモンを揮発分 
Q = 1;%定数係数 
%ヒューリスティック関数; = 1./Dイータの
タウの=もの(N、N-);マトリックスフェロモン%の
記録紙の%経路;表=ゼロ(M、N-)
ITER = 1;反復%の数初期
iter_max = 200;反復の%の最大数
Route_best =ゼロ(iter_max、N) ;%の世代最良経路        
Length_best =ゼロ(iter_max、1) ; 世代の%長最良経路   
Length_ave =ゼロ(iter_max、1) ;長%世代の経路平均   

%%への最適パスの反復探索
しながらITER <= iter_max 
    %アリそれぞれランダムに生成された出発都市
      スタート=ゼロ(M ,. 1); 
      私は=のために1:Mの
          TEMP = randperm(N-); 
          スタート(I)= TEMP;(1)
      エンド
      テーブルを(:、1)=スタート。 
      構築%溶液スペース
      = citys_indexを1:N-; 個別アリ経路選択 
      。M:I = 1のための
          %個別都市経路選択
         J = 2:N- 
             都市セット(タブーリスト)%訪問; - :タブー=表(1)(J I ,. 1)
             allow_index =〜内容isMember (citys_index、タブー); 
             許可= citys_index(allow_index)のセットがアクセスする都市%
             ; Pが許可= 
             %が都市間遷移確率を計算し
             、K = 1:長さ(許可)
                 P(K)は、タウ(タブー(完)の= (K))を許可イータ* ^アルファ(タブー(エンド)の、許可(K))^ベータ; 
             エンド
             P = P / SUM(P); 
             選択次のアクセス方法のルーレット街%
             PC = CUMSUM(P);      
            = target_index(PC> = RAND)を見つけ、
            目標=許可(target_index(1))。
            表(I、J)=目標; 
          [MIN_LENGTH、min_index]分=(長さ)。 
         エンド
      エンド
      %计算各个蚂蚁的路径距离
      長さ=ゼロ(M、1)。
      iは=のために1:M 
          ルート=表(I、:)。
          J = 1:(N - 1)
              長さ(l)=長さ(l)+ D(経路(j)は、ルート(J + 1))。
          端部
          長さ(l)=長さ(l)+ D(経路(N)、経路(1))。
      %计算最短路径距离及平均距离
      ITER == 1の場合
          [MIN_LENGTH、min_index] =分(長さ)。
          Length_best(ITER)= MIN_LENGTH。  
          Length_ave(ITER)=平均値(長さ)。
          Route_best(ITER、:) =表(min_index、:)。
          Length_best(ITER)=分(Length_best(ITER - 1)、MIN_LENGTH)。
          Length_ave(ITER)=平均値(長さ)。
          Length_best(ITER)== MIN_LENGTH場合
              Route_best(ITER、:) =表(min_index、:)。
              Route_best(ITER、:) = Route_best((ITER-1)、:)。
          エンド
      エンド
      %更新信息素
      Delta_Tau =ゼロ(N、N)。
      %逐个蚂蚁计算
      M:I = 1のための
          %逐个城市计算
          - (1 N):J = 1 
              Delta_Tau(表(i、j)は、テーブル(I、J + 1))= Delta_Tau(表(I、J )、表(I、J + 1))+ Q /長さ(l)
          エンド
          Delta_Tau(表(I、N)、テーブル(I、1))= Delta_Tau(表(I、N)、テーブル(I、1))+ Q /長さ(l)
      終わり
      タウ=(1-ロー)*タウ+ Delta_Tau。 
    %プラス反復回数、記録シートの明確な経路
    ITER = ITER + 1。
    表=ゼロ(M、N)。
エンド

%%结果显示
[Shortest_Length、インデックス] =分(Length_best)。
Shortest_Route = Route_best(インデックス、:)。
DISP([ '最短距离:' num2strは(Shortest_Length)])。
DISP([ '最短路径' num2strは([Shortest_Route Shortest_Route(1)])])。

%%绘图
図(1)
プロット([市内(Shortest_Route、1);市内(Shortest_Route(1)、1)]、... 
     [市内(Shortest_Route、2);市内(Shortest_Route(1)、2)]、 ')O-'; 
上のグリッド
I = 1の場合:サイズ(市内、1)
    テキスト(市内(I、1)、市内(I、2)、[」 'num2strは(I)])。
エンド
テキスト(市内(Shortest_Route(1)、1)、市内(Shortest_Route(1)、2)、 '起点')。
テキスト(市内(Shortest_Route(末端) 、1)、市内(Shortest_Route(終了)、2) ' 末端');  
は、xlabel(「位置横都市')
ylabelの('都市縦位置「)
タイトル([ 'アントコロニー最適化アルゴリズム(最短距離:' num2strは(Shortest_Length) ') ']) 
図(2)
プロット(1:iter_max、Length_best、 'B' ,. 1:iter_max、Length_ave、 'R&LT:')
レジェンド( '最小距離'、 '平均距離')
は、xlabel( '反復')
ylabelの(」距離「)
世代のタイトル(」平均距離の最短距離コントラスト「)

アントコロニー最適化アルゴリズムのパス:

 

 世代最短距離との平​​均距離の比較:

 

おすすめ

転載: www.cnblogs.com/kmxojer/p/12300448.html