近期再看CS373的课程(Robotic Car),当讲到粒子滤波器的时候,提到了一个resampling wheel的东西,当时不是很了解,这种方法是用来干嘛的。
对于部分粒子滤波需要一些基于权重的粒子。为了能够完成这一工作,resample wheel方法被提出来了。这是一种从原来的粒子集中随机生成的新的粒子,粒子的权重决定了改粒子被选中的似然估计。
这是大体的算法思路。具体的算法实现如下:
import random
def generate_new_particles(old_particles, weights):
N = len(old_particles)
new_particles = []
index = int(random.random() * N)
beta = 0.0
mw = max(weights)
for i in range(N):
beta += random.random() * 2.0 * mw
print "beta =", beta
while beta > weights[index]:
beta -= weights[index]
index = (index + 1) % N
print "\tbeta= %f, index = %d, weight = %f" % (beta, index, weights[index])
new_particles.append(old_particles[index])
return new_particles
if __name__ == "__main__":
old_particles = [1, 2, 3, 4]
weights = [.3, 0, .4, .3]
new_particles = generate_new_particles(old_particles, weights)
print "old particles =", old_particles
print "weights =", old_particles
print "new particles =", new_particles
一个例子的实验结果如下图所示