検索する離散数の範囲のサイズによっては、ゴールデン セクション アルゴリズムを使用したソリューションがより効率的に機能する場合があります。たとえば、次のことを最小限に抑えようとしました。
bf = -21;
f =@(x) round(x-bf).^2;
[-100 100] の範囲内で、Mathworks ファイル交換のスクリプトに基づくルーチンを使用します。この特定のファイル交換スクリプトは、反復ごとに 2 つの関数呼び出しを行うため、ゴールデン セクションを正しく実装していないようです。これを修正した後、必要な呼び出しの数は 12 に減りました。これは、 min
. 利益はすぐに劇的になる可能性があります。たとえば、検索領域が [-100000 100000] の場合、ゴールデンは 200000 ではなく 25 回の関数呼び出しで最小値を見つけます。範囲に対するゴールデン セクションの呼び出し数の依存性は対数的であり、線形ではありません。
したがって、範囲が十分に大きい場合は、min
必要な関数呼び出しが少なくて済むため、他の方法を確実に打ち負かすことができます。最小化検索ルーチンは、初期段階でこのような検索を組み込むことがあります。ただし、収束 (終了) 基準に問題があり、ルーチンが停止するタイミングを認識できるように変更する必要があります。min
最適なオプションは、ゴールデン セクションを数回繰り返すことから始めて、適用する検索範囲を狭めることです。
重要な注意点は、ゴールデン セクションは単峰性領域、つまり単一の最小値を表示する場合にのみ機能することが保証されていることです。複数の最小値を含む領域では、1 つにとどまり、グローバル最小値を見逃す可能性があります。その意味でmin
は、確実な賭けです。
ここの例の関数は inputx
を丸めますが、関数は整数入力を受け取ることにも注意してください。これは、呼び出し元のゴールデン ルーチンによって渡された入力を丸める関数の周りにラッパーを配置する必要があることを意味します。
私はこれを調査しませんでしたが、他の人は遺伝的アルゴリズムを使用してそのような検索を実行したようです.