Rozumiem podstawową zasadę filtra cząstek i próbowałem go wdrożyć. Jednak rozłączyłem się w części dotyczącej ponownego próbkowania.
Teoretycznie jest to dość proste: ze starego (i ważonego) zestawu cząstek narysuj nowy zestaw cząstek z zamiennikiem. Czyniąc to, faworyzuj te cząsteczki, które mają duże ciężary. Cząstki o wysokiej masie są częściej rysowane, a cząstki o niskiej masie rzadziej. Być może tylko raz lub wcale. Po ponownym próbkowaniu wszystkie ciężary mają taką samą wagę.
Mój pierwszy pomysł, jak to zaimplementować, był zasadniczo następujący:
- Normalizuj wagi
- Pomnóż każdą masę przez całkowitą liczbę cząstek
- Zaokrąglij te wyskalowane wagi do najbliższej liczby całkowitej (np.
int()
W Pythonie)
Teraz powinienem wiedzieć, jak często rysować każdą cząstkę, ale z powodu błędów zaokrągleń, w końcu mam mniej cząstek niż przed krokiem ponownego próbkowania.
Pytanie: Jak „uzupełnić” brakujące cząstki, aby uzyskać taką samą liczbę cząstek jak przed etapem ponownego próbkowania? Lub, w przypadku, gdy jestem całkowicie nie na miejscu, w jaki sposób poprawnie przeskalować?