粒子フィルターの基本原理を理解し、実装しようとしました。しかし、リサンプリングの部分にこだわった。
理論的には、非常に簡単です。古い(および重み付けされた)パーティクルのセットから、置換された新しいパーティクルのセットを描画します。その際、重量の大きい粒子を優先してください。ウェイトが高いパーティクルはより頻繁に描画され、ウェイトが低いパーティクルはより頻繁に描画されません。おそらく一度だけか、まったくないでしょう。リサンプリング後、すべての重みに同じ重みが割り当てられます。
これを実装する方法に関する私の最初のアイデアは、本質的にこれです:
- 重みを正規化する
- 各重量に粒子の総数を掛ける
- それらのスケーリングされた重みを最も近い整数に丸めます(たとえば
int()
Pythonで)
今、私は、各粒子を描画する頻度を知っている必要があります、しかし、原因丸めエラーのために、私が持っ終わる少ない粒子リサンプリングステップの前によります。
質問:リサンプリング手順の前と同じ数のパーティクルに到達するために、欠落しているパーティクルを「埋める」にはどうすればよいですか?または、ここで完全に軌道に乗っていない場合、どのように正しくリサンプリングしますか?