2

私は暗号解読の問題を解決するためにシミュレーテッドアニーリングを使用していますが、レンガの壁にぶつかりました。私は一生の間、確率関数を正しく動作させることができません。それは、より悪い解を頻繁に取るか(0.03と0.2のスコアで跳ね返る)、または十分に頻繁にかかりません(したがって、行き詰まります)。 0.35)。私はインターネットを見回しましたが、問題が最小値を見つけることを含む例にしか出くわしません....私の問題は最大値を見つける必要があります。最低スコアは0、最高は1です。

温度と使用する確率関数についてアドバイスが必要です。

4

1 に答える 1

2

ウィキペディアのシミュレーテッドアニーリングの記事では、SA温度を初期化して下げる方法に関する一般的なガイダンスを提供しています。これらのパラメータの効率的な選択は、通常、非常に問題に固有であり、面倒な試行錯誤によって特定する必要がある場合があります。

通常、最適化アルゴリズムは目的関数の最小値を検索します。最大化問題でこのようなアルゴリズムをそのまま使用する場合は、オプティマイザーに目的関数の否定を最小化するように依頼してください。たとえば、最大値を求めたい目的関数がであるとしましょう。次に、オプティマイザーに最小化するように要求する必要があります。つまり、(または、上記のコメントで示したように)。f(x)=score -f(x)-score1-score

オンラインで利用できるシミュレーテッドアニーリングやその他のグローバル最適化アルゴリズムはたくさんあります。たとえば、最適化ソフトウェアのディシジョンツリーにあるこのリストを参照してください。残念ながら、これらのコードは通常C#で記述されていませんが、コードがFortranまたはCで記述されている場合、通常、P/Invokeを介してこれらのコードとインターフェイスするのはかなり簡単です。

オプティマイザーが必ずしもグローバル最適化を見つける必要がない場合は、ここにリストされている派生物のないオプティマイザーもいくつかあります。これらのコードの少なくとも1つは、C#バージョン、つまりBOBYQAで使用できます(実際、このアルゴリズムは私によってC#に適合されています:-)。

于 2013-03-14T17:04:04.960 に答える