シミュレートアニーリングシミュレーテッドアニーリングアルゴリズムに[乱択アルゴリズム]運命?

シミュレートアニーリングシミュレーテッドアニーリングアルゴリズムは、最適解を求めるための無作為化アルゴリズムです。

あなたが片手かなりランダム探索で再生することができた場合は、神に直面しているとき、おそらく何もすることができない兵器の問題は、都合があります。

この問題の解決はあなたに何を教えるのだろうか?SA時にSAを使用することができるものの基本的な考え方。

タイトルについて話すことなので、このブログは、疑問や意見の相違、歓迎の補正であれば、彼の個人的なプロフィールの一部を混ぜました。

私はまた、あなたが与えられていることを示唆している、と彼らは本当に私が改善する、強くなるために非常に感謝しています。

その後、我々はBenpianトピックを入力します。

 

1.シミュレーテッドアニーリングはどのようなものです:

シミュレーテッドアニーリングは、最適解を見つけるための乱択アルゴリズムの広大な空間での検索です。私たちは理解して名前を見て、このアルゴリズムは、実際に物理シミュレーションアニール処理です。知識は、多くの場合、我々は何を学ぶのほとんどは便利です、連結されています。

なぜそれが最適解は、シミュレーテッドアニーリングのプロセスを介して取得することができますか?物理学では、固形物と、一般的な組合せ最適化問題のアニール処理は、高い類似性を有します。

 

2.シミュレーテッドアニーリング基本要素:

あなたはこれらのアルゴリズムは喜んでSAはあなたのプログラムの起動を埋め込みます満たすことができます。

最初の要素は状態空間と発電状態の関数であり、我々は探索空間、およびより大きな範囲を持っている必要があります。

探索空間とは何ですか?私たちが連絡してください検索を学ぶ、Googleの検索アルゴリズムの性質は、スペースの問題を解決するにトラバース最適解を探すことです。シミュレーテッドアニーリングの状態空間は、それが私たちの習慣のうち、最適なソリューションの有限集合で、似ています。

私たちは本当に状態である必要があるか、ああ、状態空間は十分な光ではない持っています。彼は機能を研究し、教師は「ドメイン」機能がなければならない、と述べました。私たちの状態は、「ドメイン」機能を持っている状態空間です。我々は良い焼鈍を書きたい場合や、Googleの検索スペースが機能するのに十分とは異なった新しいソリューションを生成し、十分な大きさです。

第2の解決策は、私たちが乱数を生成することによって、スペースを述べる、候補である一定の密度ランダムに私たちの候補ソリューション内で選択します。

実際には、確率分布があり、我々は指数分布を使用するいくつかのケースでは、ほとんどが均一です。

状態遷移確率については、私は現在、すべてのSAアルゴリズムにアクセスしています使用していますメトロポリス基準を、私は次のことをご紹介します。

 

3.焼きなまし法の基本的なプロセス:

A.現在のソリューションの状態から新しい解を生成する生成機能は、一般的に増分構成が得られる(すなわち、生成機能は、元の溶液の値プラス/マイナスを生成します)。

II。ソリューションの新しい目的関数は、差Δt」を算出します。

III。新しい溶液が受け入れられるかどうかを決定するために、

ここではメトロポリス基準です:Δtの「<0が、我々はそれを受け入れ、そうでない場合はEXP(-ΔT」多項式確率/ T)がそれを受け入れることを。

** Tは、私たち**シミュレーテッドアニーリング工程の温度であります

IV。新しいソリューションは、新しいソリューションで、受け入れられている現在のソリューションを置き換える、または次のテストに進みます。

 

シミュレーテッドアニーリングパラメータ制御4:

パラメータ調整は、SAアルゴリズムの最も難しい部分は、あなたの決定アルゴリズムの得点率の一部であるということができます。

パラメータ調整SAを書くときにここで妖精FlashHu(LCTメンターORZ)の経験を共有するために、私はこれが何であるかをまとめました。

EPSのために、おおよそEPSのおおよそのサイズのデータ​​範囲と精度に求めることができる、手動微は、最終的なEPSを与えます。

現在のT、ANS及び他の情報の出力側、経験は、実質的に溶液の速度、より均一に減少しながらTと、△T(典型的には0.95から0.99の間の温度変化率)のために、最初の大きな開口は、最適な解決策を実行し、その後アニーリングより良い(以下不死観察)を示すパラメータ

 

5.注:

SAは、ケースの極小で立ち往生、現在の解に陥ることがあり、それはこれです:

赤の図は、青、私たちの現在のソリューションであり、当社の最適解、新しいソリューション赤い線は、SAのアルゴリズムを表している、我々は貧しい引数ならば、我々は最適解であってもよいことができますローカルのカードに登場状況。アルゴリズムの設計自体は、このような状況を避けるために持って、覚えていますか?メトロポリス基準は、これが最適解でない場合であっても、私たちは(答えが更新されていない)、それを受け入れるように一定の確率を持っている、これを阻止することであるが、貧困層のパラメータの場合には、それはまだ発生する可能性があります。だから我々は、温度の制御を改善しなければなりません。

:ここでは、もはや古典シミュレーテッドアニーリングテンプレートの例を実行するにはその道路と古典である、バランス/鼓動とぶら下がっxxxは

このアルゴリズムは、私がコメントでマークされます注意が必要についてここでは、直接コードを貼り付けます。

#include<bits/stdc++.h>
#define down 0.997//ΔT,模拟徐徐降温 
using namespace std;
inline int read(){
    int data=0,w=1;char ch=0;
    while(ch!='-' && (ch<'0'||ch>'9'))ch=getchar();
    if(ch=='-')w=-1,ch=getchar();
    while(ch>='0' && ch<='9')data=data*10+ch-'0',ch=getchar();
    return data*w;
}
int n;
struct point{
    int x,y,w;
}object[2019];//物体信息 
double ansx,ansy,answ;//答案 
double energy(double x,double y){//物理学知识:能量总和越小越稳定 
    double r=0,dx,dy;
    for(int i=1;i<=n;i++){
        dx=x-object[i].x;dy=y-object[i].y;
        r+=sqrt(dx*dx+dy*dy)*object[i].w;//力臂乘重力 
    }
    return r;
}
void SA(){
    double t=3e3+10;//初始温度要高 
    while(t>1e-15){//exp略大于0 
        double ex=ansx+(rand()*2-RAND_MAX)*t;
        double ey=ansy+(rand()*2-RAND_MAX)*t;
        double ew=energy(ex,ey);
        double de=ew-answ;
        if(de<0){//此答案更优 
            ansx=ex;ansy=ey;answ=ew;
        }else if(exp(-de/t)*RAND_MAX>rand()){//Metropolis准则,以多项式概率接受 
            ansx=ex;ansy=ey;
        }t*=down;//逐步降温 
    }
}
void solve(){
    SA();SA();SA();SA();SA();
}
int main(){
    n=read();
    for(int i=1;i<=n;i++){
        object[i].x=read();object[i].y=read();object[i].w=read();
        ansx+=object[i].x;ansy+=object[i].y;
    }
    ansx/=n;ansy/=n;//设平均值为初值 
    answ=energy(ansx,ansy);
    solve();
    printf("%.3lf %.3lf\n",ansx,ansy);
    return 0;
}

游戏结束。

おすすめ

転載: www.cnblogs.com/light-house/p/11779896.html