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