[アルゴリズム]は、MATLABシミュレーテッドアニーリングアルゴリズムは、実現のTSPの問題を解決するために

序文

       シミュレーテッドアニーリングアルゴリズム(SA)は、一般的にセールスマン(TSP)の問題を旅行中に使用されるより一般的な近代的な最適化アルゴリズムの一つです。学生は多くの場合でも、このアルゴリズムを使用して、このアルゴリズムを使用するために、アルゴリズムを使用して数学的モデリングは、審査員の先生方が疲労します。審査員クリアな高得点を得ることができないものに、いわゆる『精神的な法律』(ニューラルネットワーク、シミュレーテッドアニーリング、遺伝的アルゴリズムなど)と、あまりにもこじつけの使用が(見ている:http://special.univs.cn/service/jianmo/sxjmyw/2018 /1128/1187951_15.shtml)。私はそれはいくつかの用語を脅迫することができない、結局、裁判官の教授である、あなたはそれが先輩裁判官は、それが目を引き付けることができると思い名詞とは思わない願っています。

       しかし、その後、我々はそれがちょうどそれを学び、プログラミングセッション中に、我々はまた、また獲得していない使用できないためではない、アインシュタインは、それはまだ、また、シミュレーテッドアニーリングアルゴリズムを学ぶために最初からプラスされている、学生です必要に応じて学習。もう少し言って、次のトピックを入力します。

 

アルゴリズムの枠組み

       シミュレーテッドアニーリングアルゴリズムは、大まかに以下のステップに分けることができます:

  図1は、初期温度、生成された初期解は、解の数は、各温度で生成されました。

  2、新しいソリューション。

  図3に示すように、コスト関数は差が計算されます。

  4、メトロポリスの差別。(名詞形は非常に単純な原理で脅迫されないでください)

  5、冷却。

  6、それが決定される温度が所定量未満です。はい、終了し、そうでなければ、ステップ2に進んでください。

       各ステップの以下の詳細な説明。

 

 初期温度を設定し、生成された初期解は、各温度において生成ソリューションの数を提供しました。

  冷却停止温度の初期温度係数が密接に彼らは、SAは、反復回数を決定し、関連して、特定の式である:*初期温度≈終了温度(冷却係数)^冷却係数(0,1)は定数である反復の数。小規模な問題のために、初期温度は典型的には1000を取る、終了温度は、0.9の冷却率を1E-4に設定しました。これらのパラメータは、直接メトロポリス差別に影響を与えます。

       ランダムな初期溶液は、一般的にあるためSA依存性の生成された生成、初期解は重要ではありません。

    各生成物の溶液は、数は、試料サイズの温度を上昇させるアルゴリズムのロバスト性を高めるために提供されます。鎖長と呼ばれるソリューションの大都市の複数。

 新ソリューション

  多くがあるソリューションの新しい方法は、最も簡単な解決策はもちろん、特定のアルゴリズムに従って新しいソリューションを生成することができ、ランダムに新しいを生成することです。利点は、ランダムに生成された新しいソリューションは、グローバルな最適解を見つけることは容易である、特定のアルゴリズムによって生成新しいソリューションの利点は、前提は、溶液のおおよその位置が良く収束することも知られています。

コスト関数間の差を計算します

  コスト関数の計算は、今後の最新ソリューション、違いを作るインクリメントDFを取得するための最適なソリューションが悪いです。

メトロポリスの差別

  次のように判定式は次のようになります。

                                                

  コスト関数が0未満である場合、意味(すなわち、新たなソリューションが最適解の値よりも小さい場合)、新しい溶液を受け入れるようにする最適解となる。コスト関数が0未満でない場合、一定の確率pで溶液を受け入れるために最もよう最適なソリューションを提供します。温度が高いほど、より劣ったソリューションの合格率は、言い換えれば、グローバルな検索機能で、低く、見ることができます。だから、温度を設定し、初期温度を設定するときは、局所最適に陥る避けるために、比較的高いです。

温度を下げ

  単純な冷却方法、すなわち、新しい=現在の温度・冷却温度係数。これは冷却率を高め、改善するために、反復回数がより適切であるので、もしあなたが、反復回数及び初期温度、冷却係数の関係を持って見ますが、メトロポリス差別にその初期温度に注意することができます。最後に、現在の温度が停止温度未満であるか否かを決定することです。これらは、理解のシミュレーテッドアニーリングアルゴリズムの流れに個人で、次のプログラムは、TSPの問題を解決するために設計されます。

 

プログラミング

%焼きなましアルゴリズム
%TSPの問題
CLC、クリア

T0 = 500;%初期温度は
%端温度; = 1E-4がち
L = 200;%における各温度の鎖長
%冷却速度; Q = 0.98 
cityNum = 30;%市数
都市=ランド(cityNum、2) ;%はランダム都市座標生成

%%%%%%%%%%%%%%主を%%%%%%%%%%%%%%%%% %%% 
D =距離(シティー); 
N = cityNum; 
SL = randperm(N)、ランダム%溶液の生成
、方程式の%溶液を反復回数を計算
時間= CEIL(二重(解く( [「1000 *(0.9)^ X 」、num2strは(れる傾向がある)]))); 
COUNT = 0;%反復カウンタ
のObj =ゼロ(時間、1) ;% 生成経路あたり
=ゼロ(時間、N)を追跡 ;% 世代あたりの最適解
%繰り返し
ながらT0>がちである
    。COUNT =カウント+ 1 
    TEMP =ゼロ(L、N + 1)
    。K = 1:Lの
        新たな溶液を生成%のL基
        S2 = newSolution(S1)を、
        [SLと、R&LTは】メトロポリス(SL、S2、D、T0)= 
        TEMP(K、:) = [R&LT S1の]; 
    エンド
    の各反復記録%最適経路
    [D0、インデックス] =分( TEMPを( :、エンド)); 
    IF COUNTは== D0 1 || <Objに(-COUNT 1)。。
        Objに(COUNT)= D0; 
        のObj(COUNTが)は、obj(COUNT = - 1); 
    エンド
    
    トラック(COUNT、:) = TEMP (インデックス,. 1:エンド1); 
    T0 = Q * T0、
エンド
関数fprintf( '反復:%D \ N-'、COUNT); 
fprintfの( '最短パス:%F \ n'は、Objに (終了))。 
図イテレーション%の
図の
プロット:;(1 COUNT、Objに。)
は、xlabel( 'イテレーション'); 
ylabelの( '距離'); 
タイトル( '最適化'); 
DrawPath(トラック(エンド、:)、市); 


%% %%%%%%%%%%%%%%%サブルーチン、5 %%%%%%%%%%%%%%%%%%%%%の合計

%関数:距離マトリックス溶液
距離行列:%入力:出力シティ座標 
%出力:決意の溶液、液路
関数[S、R&LT]は、メトロポリス(SL、S2、D、T)= 
    RL =路長(D、SL)。 
関数D =距離(A)
    R&LTサイズ=(A、1);
    ゼロ= D(R&LT、R&LT); 
    I = 1:R&LT 
        。Jために= I + 1:R&LTの
            D(I、J)= SQRT((A(I ,. 1)-a(J ,. 1))^ 2 + ((I、2)-a(J、2))^ 2); 
            D(J、I)= D(I、J); 
        エンド
    エンド
エンド

%関数:新しい解生成
溶液古い出力:%入力:新しい溶液
無作為に2つの切換位置から選択%。
S2 = newSolution関数(SL)
    N =長さ(SL); 
    S2 = S1を; 
    A = ROUND(RAND(1,2)*(1-N)+ +1);交換の%は、2つのランダムな位置を生成
    TEMP = S2 ((1))、
    S2((1))= S2((2)); 
    S2((2))= TEMP; 
エンド

%メトロポリス基準関数
%入力:新しい古い溶液、距離行列現在の温度
    R2 =路長(D、S2)
    のdT = R2 - R1を、
    IFのdT <0 
       S = S2; 
       R&LT = R2。
    EXP ELSEIF(-dT / T)> = RAND 
       S = S2; 
       R&LT = R2; 
       S = S1を; 
       R&LT RL =、
    エンド
エンド

に示す%のトレースルート。
%入力:最適経路出力座標市:図路
機能DrawPath(BestTrack、市)
    N =サイズ(BestTrack、2); 
    cityArray =ゼロ(N、2); 
    I = 1:N。
        cityArray(I ,. 1)=シティ(BestTrack(I),. 1); 
        cityArray(I 、2)=シティ(BestTrack(I)、2); 
    エンド
    図; 
    待っ 
    (cityArray(プロット:、1)、cityArray(: 、2)、 ' - O'、 '色'、[0.5 0.5 0.5])。
    プロット([cityArray(1,1)、cityArray(エンド,. 1)]、[cityArray(1,2)、cityArray(エンド、2 )]、... 
        ' - '、 '色'、[0.5 0.5 0.5]); 
    ホールドオフ
    は、xlabel( '横軸を'); 
    ylabelの( '縦');
    タイトル( 'TSP図'); 
    ボックスの
エンド

関数%計算された経路長
%入力:距離行列、順次出力ウォーキング:パスと
機能LEN =路長(D、S)
    [R&LT、C] =サイズ(D)。
    サイズ= NIND(S ,. 1); 
    I = 1:NIND 
        P = [S(I、:) Sが(私は,. 1)]; 
        I1 = P(1:エンド1)
        I2 = P(2:終了)、
        LEN(I ,. 1)= SUM(D((I1-1)* C + I2)); 
    エンド
エンド

  注機能newSolutionは、私の戦略は、ランダムに交換するための2つの位置を選択することです。実際、あなたはまた、新しいソリューションを生成するために、他の戦略を使用することができますが、私は怠け者だので、新しいソリューションを生成するためのより良い方法の考え。

 

プログラムの結果

                                

 

 

                                  

 

 

 

   最後に、私は50の都市の数は、反復回数、よりよい解決策を得るために、温度の初期増加を増やす必要があるときにテストされています。もちろん、私は新しいソリューションを作成する方法も比較的簡単です、あなたはまた、新しいソリューションを生成するために、より良いアイデアをこの点を考慮することができます。

 

 

リファレンス

[1]ゆうレイ等市風水、王輝、「MATLABインテリジェントアルゴリズム30のケーススタディ(第二版)」2015.8を。

 

 

 

 

 

 

 

      

おすすめ

転載: www.cnblogs.com/wenyehousheng/p/11486598.html