Pull to refresh

Comments 4

Спасибо за интересный материал. А можете пояснить, я немножко не догоняю, почему везде используется random, что это даёт? Почему лишние частицы отсеиваются не гарантированно, а с какой-то вероятностью?
Функция random просто выдает случайное число в заданных пределах, например
random.uniform(0, 2*max(weight))

дает случайное число от 0 до 0.5 (в рассматриваемом примере max(weight) = 0.25).

Так как фильтр частиц работает с вероятностями (вес частиц), то без генератора случайных чисел не обойтись.

Про отсев частиц:
Гарантированно лишние частицы — это те частицы, вес которых равен нулю (вероятность нахождения объекта в этой точке 0%). Остальные отсеиваемые частицы являются маловероятными. Ну и так бывает, что маловероятные события иногда происходят. Поэтому и у этих частиц тоже есть шанс пройти отсев, просто маленький.

Из опыта могу сказать, что был случай когда фильтр разошелся (не оказалось частиц рядом с роботом и ошибка начала быстро увеличиваться) и логи показали, что была частица соответствующая положению робота, но ее вес был где-то в 100 раз меньше чем вес «больших» частиц и она не пережила отсев.
В моделировании не страшно, а если вы используете фильтр для определения местоположения реального объекта, например квадрокоптера, может быть фатально.
Ситуация маловероятна, но увеличение количества частиц в фильтре помогает снизить вероятность её возникновения.
Нас просто учили, что алгоритм — штука детерминированная, одинаковые данные дадут одинаковый результат, сколько ни пробуй. А тут может получиться так, а может — эдак. А может вообще не получиться… Непонятно…

Просто отсеивать самые маловероятные — никак нельзя? Результат хуже?
Можно, полученный результат обычно не сильно хуже. Но тут встает вопрос о том какие частицы считать достаточно маловероятными. Логично было бы сравнивать с максимальным значением веса (с самой вероятной частицой), например отсеивать все частицы, вес которых меньше 0.1*maxWeight. Но на практике оказывается, что этот критерий (0.1*maxWeight) нужно подбирать опытным путем и для каждой задачи отдельно.

А Resampling wheel является универсальным алгоритмом: один раз написал — и используй во всех задачах.

(не туда написал)
Sign up to leave a comment.

Articles