Comments 4
Спасибо за интересный материал. А можете пояснить, я немножко не догоняю, почему везде используется random, что это даёт? Почему лишние частицы отсеиваются не гарантированно, а с какой-то вероятностью?
Функция random просто выдает случайное число в заданных пределах, например
дает случайное число от 0 до 0.5 (в рассматриваемом примере max(weight) = 0.25).
Так как фильтр частиц работает с вероятностями (вес частиц), то без генератора случайных чисел не обойтись.
Про отсев частиц:
Гарантированно лишние частицы — это те частицы, вес которых равен нулю (вероятность нахождения объекта в этой точке 0%). Остальные отсеиваемые частицы являются маловероятными. Ну и так бывает, что маловероятные события иногда происходят. Поэтому и у этих частиц тоже есть шанс пройти отсев, просто маленький.
Из опыта могу сказать, что был случай когда фильтр разошелся (не оказалось частиц рядом с роботом и ошибка начала быстро увеличиваться) и логи показали, что была частица соответствующая положению робота, но ее вес был где-то в 100 раз меньше чем вес «больших» частиц и она не пережила отсев.
В моделировании не страшно, а если вы используете фильтр для определения местоположения реального объекта, например квадрокоптера, может быть фатально.
Ситуация маловероятна, но увеличение количества частиц в фильтре помогает снизить вероятность её возникновения.
random.uniform(0, 2*max(weight))
дает случайное число от 0 до 0.5 (в рассматриваемом примере max(weight) = 0.25).
Так как фильтр частиц работает с вероятностями (вес частиц), то без генератора случайных чисел не обойтись.
Про отсев частиц:
Гарантированно лишние частицы — это те частицы, вес которых равен нулю (вероятность нахождения объекта в этой точке 0%). Остальные отсеиваемые частицы являются маловероятными. Ну и так бывает, что маловероятные события иногда происходят. Поэтому и у этих частиц тоже есть шанс пройти отсев, просто маленький.
Из опыта могу сказать, что был случай когда фильтр разошелся (не оказалось частиц рядом с роботом и ошибка начала быстро увеличиваться) и логи показали, что была частица соответствующая положению робота, но ее вес был где-то в 100 раз меньше чем вес «больших» частиц и она не пережила отсев.
В моделировании не страшно, а если вы используете фильтр для определения местоположения реального объекта, например квадрокоптера, может быть фатально.
Ситуация маловероятна, но увеличение количества частиц в фильтре помогает снизить вероятность её возникновения.
Можно, полученный результат обычно не сильно хуже. Но тут встает вопрос о том какие частицы считать достаточно маловероятными. Логично было бы сравнивать с максимальным значением веса (с самой вероятной частицой), например отсеивать все частицы, вес которых меньше 0.1*maxWeight. Но на практике оказывается, что этот критерий (0.1*maxWeight) нужно подбирать опытным путем и для каждой задачи отдельно.
А Resampling wheel является универсальным алгоритмом: один раз написал — и используй во всех задачах.
(не туда написал)
А Resampling wheel является универсальным алгоритмом: один раз написал — и используй во всех задачах.
(не туда написал)
Sign up to leave a comment.
Простыми словами о фильтре частиц