ヨーロッパアルゴリズムに - シミュレーテッドアニーリング

私は、長期的なアニーリング感の始まりを聞いて非常に(荘)元帥(A__CDEFG ...)

学んだまでアニーリングした後、私が見つかりました:

アニーリングは、非常に汎用性だけでなく、ハンサムですが、また、

さらに良いD(大)F(フランス)S(除算)だけでなく、ユニバーサルより

これは単にああアーティファクト(デ)点に嘘であります

簡単な紹介

コンピュータアルゴリズムとして、それは実際にBaiduの上の物理的なエントリを持っています!

アニーリング

私は無知に見えたその時、あなたはコンピュータアルゴリズムは、金属がああ精錬を行うには何も持って言うの?

それから私は、エントリのアルゴリズムを見ました...

アニーリングアルゴリズム

無知ではありません...もっと

(理解を容易にするために、より多くの無知になります)、私はBaiduのの定義に移動します:


シミュレーションアニール算術(SAA、シミュレートされたアニーリングアルゴリズム)
メトロポリス基準に従って、粒子は、T eは温度である温度T確率E-ΔE/(kTの)で平衡する傾向がある
内部エネルギー、その変化量、△E、Kボルツマン定数です。固体組成物とシミュレーテッドアニーリング最適化問題、Eは、目的関数値Fとしてモデル化された内部エネルギーは、温度Tは、パラメータT、シミュレートされたアニーリングアルゴリズムソリューション組み合わせ最適化問題を得るために制御へと進化した:i初期解と制御は、初期パラメータtを開始現在のソリューションの繰り返し、「新たな目的関数を算出する差分溶液→→受け入れるか破棄」反復と徐々に減衰値t、アルゴリズムは終了ほぼ最適なモンテカルロ法、反復解法に基づいている溶液が得られ、現在の解ヒューリスティックランダム探索プロセス。アニーリングプロセスは、冷却スケジュール制御パラメータおよびそれらの初期値T減衰率Δtを含む(冷却スケジュール)によって制御されている場合、各T Lの値と、停止条件S.の反復回数

(レイジー、その後、元々の言葉を一緒にこすりするために使用言及する価値が、見ていません)


(?)かなり明確読んだ後に真実を伝えるために、の合計は何であります:

常にランダム生成することにより、新しいソリューション、および最良の答えの間のギャップの現在のサイズに比較的新しいソリューション、より良い今日のほとんどより新しいソリューション、新しいソリューションの近くで再生産の場合における新たな解決策があります。サイクルの多くを通じ、その究極のガイドの答えを達成するなどの標準的な最適なソリューションに目的を傾向があります。

それを少し感じます。

単純なポイントに加えて、この次のとおりです。

軽くあなたが良い感じている場合モンゴル、モンゴルはその周り続ける、答えるモンゴル

あなたは十分にモンゴル限り、あなたはモンゴルに常に正しい答えをすることができます

...

(実際には、何も、何もない、金属熱処理と思いません ロス谷デイリー2018の右上隅:形而上学オンアルゴリズム - アニーリング 上読みます)

->continue

実装プロセス

それがアニールされるので、それを解雇しなければなりません。

ああ...

私は申し訳ありません

これは本当に(起動しませんでしたホストコンピュータを開き、あなたのCPUに火が表示されます

各変化量デルタ、最終温度Tの後に初期温度T、アニーリング温度:コンピュータの内部に、アニール処理は、主として3つのパラメータが使用されます。1よりわずかに小さい数です。

これら三つの変数は、それを使用することを説明した後、実際には、アニール処理の使用が原則を理解することができることを理解すべきです。

初期温度T:

私たちのランダムモンゴルの主な決定要因は、範囲を答えます。Tより大きい、我々はランダムに、より広く分布にお答えします。主な保証はアルゴリズムへの答えは(大きすぎるか小さすぎる)のデータをオフセットが、可能な正の解を逃していないということです。

長いデータほど、Tは同様に扱われます。

最終温度T:

私たちの最終的な決定アルゴリズムの精度。tが小さくなって、我々は最終的にランダムな答えを生成する範囲が小さくなります。ランダム範囲が過剰によって引き起こされるので、主に私たちの最終的な答えを確保するために、ランダムな意味のない多数のを防ぐために、答えはほぼ同じ標準(基本的な意志でありますテストポイントは無視されます又は)出力の必要な精度を超える、所与の画像栗、我々は、Tと一般1E-15(10)の-15電力です。ここに答えは、標準的な答えとの違いがあっても、あなたはそれのこの出力精度のタイトルを取得する必要がありますか?

デルタの変更(私は...その数学記号を再生されません):

Tは、ランダムの広い範囲とする、tはランダム小さな領域に与えられると述べました。何ああランダム最後に!

この時間デルタは、その役割は、各温度が少し(本当に少しだけ)を低減した後にランダムにすることです、現われました。Tのランダムな広さの追求からレッツ・スタートは徐々にトンの詳細を強調するために変更されます。私たちは、答えがリークされません両方のTの幅をアニールすること; tは正確さを持っています。

一部の人々は、すべてここに無意味な考えに見えるかもしれません。あなたは、ランダムに必要な狭い範囲の後ろにも広がりを列挙し、これらだけに。私は、あなたがたの範囲が適切ではないことを知っています。チャンスはあなたが間違った答えの近くで長時間ランダムモンゴルを行うことがありますか?

この質問に対する答えは、実際にアニーリングアルゴリズムの本質であります:

各ランダム答え:それは、現在の最適なソリューションよりも優れている場合は、それが現在の最適ソリューションとして受け入れられ、そうでない場合、それは現在の温度に関連する確率を配置受け入れます。

- >続けます

理解

ここでの最初の人は、人々が要求されます可能なすべての質問を表示します。

Q:新しい現在の最善の解決策を作成していない場合場合はランダム、なぜだけでなく、ランダムの次のラウンドを開始するのではなく、それを行う受諾の現在の温度の確率で行うには?

ああ...実際には、この単純に説明することはできません非常に良い説明。我々はすべて知っているように、実際には、それが現在の最良全体の最適を表すものではありません。だから我々は、ランダムに新しいソリューションを生成したとき、現在の解が最適であったとしても、我々はまだそれが全体的に最高であることを保証することはできません。そして、毎回の我々の列挙は、その実際にはすべての可能な解決策を列挙し始めていない、トンの範囲に関連している。が、約トンの電流に基づいて最良のが変動して(スーパー範囲を解決するための列挙機能)。標準最適なソリューションは、現在の位置又は全く異なる数の最適解であってもよいです。大きなその範囲に達することができなかったら、に無作為に割り付け。だから我々は、過度のように、いくつかの中間番号が必要です。だから我々は、全体のランダム最適解でき、されないことフレームの質問のうち悪意のあるカードデータ 現在の最高は盲目。

だから、アルゴリズムについては、この話を完了するまでの時間です。

新たな溶液を生成するランドランダム関数、現在のローカル最適ランダムマイナス(フローティング率が正に現在の温度と相関しています)。それぞれの新しいソリューションについては、現在よりも優れている場合。無条件に、現在の最適なソリューションとしてそれを受け入れるそれ以外を受け入れる(確率の大きさは正に現在の温度と相関することがまだある)確率を置きます。各ランダムの終了後、現在の温度が少し減少します。

あなたが慎重に読めば、人々の前の推定値は持つべきです 自閉症 私は理解しています。

それは非常に明確に(スピード品質に求めて、シンプルで、粗)コンピュータのスタイルを反映しています

もちろん、一部の人々が求めることになるでしょう。

Q:今では基本的に受け入れられている1に近い高温で電流それほど最適解を受け入れる確率。だから、可能な最終的にはどのような最適なソリューション、それを取得しますか?

私はアニール前の学校にいたとき、実際には、この問題を抱えています。この質問への答えは、実際に最適なソリューションを取得することができたアルゴリズムの理論をアニールされます。

大きい合計確率(0.00001%よりもかかわらず、おそらく唯一の大規模な最適解時間)に受け入れられるため、より最適なソリューション、;よりよい解決策の表示された場合、我々は確率無条件の受け入れを考慮していないので。しかし、私たちは時代のランダムな動作百万人によって確率(拡大が指数関数的な成長である)との差を拡大していきます。最終的には1の最適解生存確率近くを作ります。

何回それで終わりではこのランダム?

各質問には、別の番号を持っていますが、問題の大きさが(1000ミリ秒ので、プログラム時間)最も類似しています。

テイクP2210暴走する(実際には、私が前に知っていない)の答えに例を。私はcountt変数を追加私のコードでは午前、各時間増分ランダム運転一度、そして最終的にその値には?

おそらくそんなに

(17は、ライン上で自分のアウトを無視して、答えです)

フル2357060!

私がパラメータを使用して、この問題を持っていることを言及する価値があります:

初期温度:3000

終了温度:(10のマイナス17乗)1E -17

温度エンドランダム値の各変化後:0.996(*新しい温度=温度変化値)

アニーリング:19(繰り返し20回と呼ばれる最初の3つのパラメータで)

実際には、基本的にパラメータをアニールするすべての質問は、これらは(数は少し違いでもよい)されている、あまりにも驚いてはいけません

- >続けます

(またはプット例はポイント簡単に話す)P1337バランス

純粋な幾何学的および物理的な問題として、いなくても自然でない人に...

行うにはこの問題シミュレーテッドアニーリングは、この問題がより良い検証ソリューションに加えて、一つだけである(O nは複雑でも可)ので、最終的な解決策を検討することであり、浮動小数点演算は、その後、最終的な答えに影響を与えた場合の精度が失われることがあります。

#include<iostream>
#include<stdlib.h>
#include<cmath>
#include<cstdio>
#define cold 0.996 // 降温系数
#define temperature 3000 // 初始温度
#define time 4 // 退火次数( 这种纯物理题不用太多次 )
#define INF 999999
using namespace std ;
struct spot{
    int x ;
    int y ;
    int weight ;
};
spot map[1001] ;
int n ;
double t ;
double tmpx , tmpy , tmpw ;
double ansx , ansy , anse ;
//double nowx , nowy , nowe ;
double energy ( double x , double y ){ // 判断当前点的能量,能量越小越稳定
    double e = 0 ;
    for( int i = 1 ; i <= n ; i ++ ){
        tmpx = x -map[i].x ;
        tmpy = y - map[i].y ;
        tmpw = map[i].weight ;
        e += sqrt( tmpx * tmpx + tmpy * tmpy ) * tmpw ;
    }
    return e ;
}
void colddown(){
    t = temperature ;
    while( t > 1e-15 ){ // 开始模拟退火
//      cout << "debug" << " " << t << endl ;
        double nowx = ansx + ( ( rand() * 2 ) - RAND_MAX ) * t ; // 随机产生一个值,使点位移
        double nowy = ansy + ( ( rand() * 2 ) - RAND_MAX ) * t ;
        double nowe = energy( nowx , nowy ) ;
        double de = nowe - anse ;
//      cout << nowx << " " << nowy << endl ;
        if( de < 0 ){ // 如果当前解更优,就直接接受
            ansx = nowx ;
            ansy = nowy ;
            anse = nowe ;
//          cout << anse << endl ;
        }
        else{
            if( exp( -de / t ) * RAND_MAX > rand() ){ // 否则以一个概率接受
                ansx = nowx ;
                ansy = nowy ;
            }
        }
        t *= cold ;
    }
}
void solve(){
    for( int i = 1 ; i <= time ; i ++ ){
        colddown() ; // 多来几次,保证结果正确性
    }
}
int main () {
    srand( 201821307 ) ; // 一个好的随机数种子很重要
    cin >> n ;
    for( int i = 1 ; i <= n ; i ++ ){
        cin >> map[i].x >> map[i].y >> map[i].weight ;
        ansx += map[i].x ;
        ansy += map[i].y ;
    }
    ansx /= n ;
    ansy /= n ;
    anse = energy( ansx , ansy ) ;
    solve() ;
    printf( "%.3lf  %.3lf" , ansx , ansy) ;
    return 0 ;
}

(とき転送プログラムとコメントし、数付)

以前の基本原則を理解していれば実際には、この質問はまた、言うまでもなく、理解することは難しいことではないはずです。

(でも水が200本の以上の線を有します)

- >続けます

スコープ

非常に暴力的な万能薬のようなアルゴリズムのルックスをアニールするものの、実際には適切な範囲があるのと同様に、ルートをDFS。

  1. 答えは簡単で、あまりにも多くのデータを出力するトピック

  2. 答えは、比較的短時間で確認することができます(NPクラスの問題を試すことができます)

  3. 異なる溶液間の関係は、互いの有意な変換を有し、別のランダムなソリューションの操作によって溶液にすることができます

  4. ソリューションセット1ピークの3半分だけに、全体的な数の単調な機能を発揮します

  5. 自身の十分な白い顔非エミレーツ涙がWAに来ました

最後にそれを追加し、あなたは、アルゴリズムと何の問題もなく、しかし、あなたはトピックがないことがあります。実際には、これはすべての後に、ランダムアルゴリズムであり、アニーリングアルゴリズムによって引き起こされます。3つの係数は、アニールまたは使用されるランダムシードが良い十分でない場合。WAは正常です。

(このようなこの質問のように私は、アニール処理に異なるパラメータではなく、結果を任意のコードを変更していないが、それは別の得点につながることができます)

最後に、私はあなただけですべてのACの種を見つけたいです Tuoourufei

おすすめ

転載: www.cnblogs.com/CHNmuxii/p/12232477.html