2

私のプログラムでは、整数値を計算し、それを次々と配列リストに入れるループがあります。計算された整数値が高いほど、それは優れています。これ以上の整数値が得られなくなるまで、計算を続けたいと思います。つまり、計算された整数が範囲内で減少するか、それ以上変化しない場合です。現在の計算値を最後の x と比較することを考えています (どのくらいの値を気にする必要がありますか?) それが常に最後の x 要素のいずれかより小さいか等しい場合は、計算を停止します。しかし、この戦略では、これがグローバルな最大値であるという保証はありませんが、ローカルにすぎません....

それを行うための良い戦略は何ですか?

編集: グローバルな最大値を見つける保証がないことはわかっています。しかし、関数の動作については少し知っています。既に計算した値が多いほど、グローバル最大値が表示される可能性は低くなります。

4

2 に答える 2

1

さて、いつ停止するかを評価するために、いくつかのヒューリスティックを想定する必要があるようです。「マックスを見つけたので、今やめます」とは言えないので、次のいずれかの方法で進めることができます。

  • 現在の最大値を維持し、次の値を現在の値と比較します。小さい場合は、カウンターを増やします。カウンターがX(パラメーター)に達すると、停止します
  • 0で1、+infで0の確率を持つ確率分布関数を使用します。これはあなたの好みに合わせて調整することができます。次に、表示された値の数、または小さい値のカウンターをインクリメントし、そのカウンターを使用して、その関数を使用して確率を推定します。prob <X(再びあなたのパラメータ)の場合、あなたは停止します。

これがあなたにいくつかのアイデアを与えることを願っています

于 2013-01-24T12:38:56.987 に答える
1

リザーバーサンプリング。計算された整数値からのランダムな x サンプルを表す小さい配列Aに値を格納します。計算された値の範囲について、それぞれを配列Aの値と比較できます。減少傾向が見つかった場合は、停止できます。これにより、ローカルではなくグローバルな最大値を扱っていることが保証されます。

于 2013-01-24T15:56:21.260 に答える