これは最適化問題です。最適解は必要ないので、ランダムな解 (R のランダムなサブセット) から始めて、隣接する解のセット (追加または削除現在のソリューションのコンポーネントの 1 つ) で、それぞれのコスト関数が優れているものを示します。
より良い解決策を得るために、シミュレーテッド アニーリングをヒル クライミング検索に追加することもできます。場合によっては、より悪い解決策に移行し、後でより良い解決策にたどり着く必要があるという考え方です。シミュレーテッド アニーリングは、プロセスの開始近くでより悪いソリューションに移行できるため、より適切に機能します。アルゴリズムは、プロセスが進行するにつれて、より悪い解を許可する可能性が低くなります。
ここにあなたの問題を解決するために、いくつかのヒルクライミングのPythonコードのサンプルを貼り付けます:
https://gist.github.com/921f398d61ad351ac3d6
サンプル コードでは、 はR
常に へのインデックスのリストを保持し、ユークリッド距離U
を使用して近隣間の類似性を比較します。確かに、独自のニーズを満たす他の距離関数を使用できます。また、コードに注意してください。私はその場で隣人を取得しています。にベクトルの大きなプールがある場合は、事前に計算された近傍をキャッシュするか、比較を避けるために局所性に依存するハッシュを検討することもできます。シミュレーテッド アニーリングは、上記のコードに追加できます。U
O(n^2)
ランダムに 1 回実行した結果を以下に示します。
U
, =10で 20 個のベクトルのみを使用しS
て、結果を最適解と比較できるようにします。山登りプロセスは 4 番目のステップで停止し、k 最近傍を 1 つだけ置き換えるより良い選択肢がなくなります。
また、考えられるすべての組み合わせを繰り返す徹底的な検索も実行します。網羅的なアプローチと比較して、山登りの結果がかなり良いことがわかります。82K ステップ以上の徹底的な検索を必要とする比較的小さなコスト (ただし局所的な最小値) を取得するのに 4 ステップしかかかりません。
initial R [1, 3, 4, 5, 6, 11, 13, 14, 15, 17]
hill-climbing cost at step 1: 91784
hill-climbing cost at step 2: 89574
hill-climbing cost at step 3: 88664
hill-climbing cost at step 4: 88503
exhaustive search cost at step 1: 94165
exhaustive search cost at step 2: 93888
exhaustive search cost at step 4: 93656
exhaustive search cost at step 5: 93274
exhaustive search cost at step 10: 92318
exhaustive search cost at step 44: 92089
exhaustive search cost at step 50: 91707
exhaustive search cost at step 84: 91561
exhaustive search cost at step 99: 91329
exhaustive search cost at step 105: 90947
exhaustive search cost at step 235: 90718
exhaustive search cost at step 255: 90357
exhaustive search cost at step 8657: 90271
exhaustive search cost at step 8691: 90129
exhaustive search cost at step 8694: 90048
exhaustive search cost at step 19637: 90021
exhaustive search cost at step 19733: 89854
exhaustive search cost at step 19782: 89622
exhaustive search cost at step 19802: 89261
exhaustive search cost at step 20097: 89032
exhaustive search cost at step 20131: 88890
exhaustive search cost at step 20134: 88809
exhaustive search cost at step 32122: 88804
exhaustive search cost at step 32125: 88723
exhaustive search cost at step 32156: 88581
exhaustive search cost at step 69336: 88506
exhaustive search cost at step 82628: 88420