17.3.23 Resampling wheel 算法

近期再看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

一个例子的实验结果如下图所示
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值