location

location

基本概念

  • 1) 条件概率(后验概率) p(A|B) 表示在事件B的情况下,A发生的概率
  • 2) 联合概率 p(AB)、p(A,B)、p(AUB) 表示AB同时发生的概率
  • 3) 先验概率(边缘概率) p(A)

基本公式:

  • 全概率公式:
    p ( A ) = ∑ B i p ( A ∣ B i ) p ( B i ) ) p(A)=\sum_{Bi}^{}p(A|Bi)p(Bi)) p(A)=Bip(ABi)p(Bi))
    其中Bi可以理解为A发生的一种途径

  • 贝叶斯公式:
    p ( A ∣ B ) = p ( A ) p ( B ∣ A ) P ( B ) p(A|B)=\frac{p(A)p(B|A)}{P(B)} p(AB)=P(B)p(A)p(BA)

贝叶斯公式是一个从果推因的过程,在B发生的情况求A发生的概率。比如从盒子1里、盒子2里拿球,盒子里面有白球红球,比例各不相同。全概率用来求拿一个球是红球的概率;而贝叶斯是用来求拿到红球时,盒子为1的概率。

根据公式p(盒子1 | 红球) = p(盒子1)*p(从盒子1中拿红球) / p(红球)
p(红球) = p(盒子1)*p(从盒子1中拿红球)+ p(盒子2)*p(从盒子2中拿红球)

p(B|A) 似然
p(A) 先验

https://blog.csdn.net/sdutacm/article/details/50938957

  • 如图所示,一开始机器人的位置分布是均匀分布的,

22

  • 当观测到第一个门时,概率发生了变化,出现了三个峰值,表明这三处都可能是机器人的位置;随着机器人的移动,峰值相应的平移,但却更加平坦,因为移动增加了不确定性,或者说移动过程中损失了信息;这个过程称为卷积。
  • 当观测到第二个门时,上一次的位置为先验概率,与观测相乘就得到了后验概率。此时机器人的位置已经很明确了。
直方图滤波:

11

sense
  • 假设有这样一个地图,初始时机器人在每个格子的概率相同,均为0.2;当机器人观测到红色,则*0.6,若观测到绿色则*0.2,那么概率更新.(增加信息的过程)
    p ( x i ∣ z ) = p ( z ∣ x ) ∗ p ( x i ) p(x_{i}|z)=p(z|x)*p(x_{i}) p(xiz)=p(zx)p(xi)

    p ( x i ∣ z ) 表 示 观 测 z 下 状 态 x i 发 生 的 概 率 , 这 边 即 指 机 器 人 在 x i 处 的 概 率 p(x_{i}|z) 表示观测z下状态x_{i}发生的概率,这边即指机器人在x_{i}处的概率 p(xiz)zxixi

    p ( z ∣ x i ) 表 示 在 x i 处 观 测 到 z 的 概 率 p(z|x_{i}) 表示在x_{i}处观测到z的概率 p(zxi)xiz

  • 得到的概率是非标准化的概率,需要将其归一化

    p ( x ∣ z ) = p ( z ∣ x ) ∗ p ( x ) p ( z ) p(x|z)=\frac{p(z|x)*p(x)}{p(z)} p(xz)=p(z)p(zx)p(x)

    而 p ( z ) = ∑ p ( x i ∣ z ) 而p(z)=\sum p(x_{i}|z) p(z)=p(xiz)

move

运动更新实际上是计算全概率的过程(卷积),损失信息的过程
p ( x i ) = ∑ p ( x i ∣ x j ) ∗ p ( x j ) p(x_{i})=\sum p(x_{i}|x_{j})*p(x_{j}) p(xi)=p(xixj)p(xj)

举个例子:
0 | 0.5 | 0.5 | 0 | 0
机器人移动一步:
移动成功的概率为0.8,留在原地概率0.2
则移动后概率为
0 | 0.1 | 0.5 | 0.4 | 0 | 0

  • 代码
map = [ ['G', 'G', 'G'],
        ['G', 'R', 'R'],
        ['G', 'G', 'G']]

# Motion:
#  [0,0] - stay
#  [0,1] - right
#  [0,-1] - left
#  [1,0] - down
#  [-1,0] - up

measurements=['R','G']
motions=[[0,0],[0,1]]
sensor_right = 1
pMove = 1

sensor_wrong = 1 - sensor_right
pStay = 1 - pMove

### 定义定位函数,输入是地图,观测和运动
def location(map,measurements,motions):
    pInit=1.0/float(len(map))/float(len(map[0]))
    p = [[pInit for row in range(len(map[0]))] for col in range(len(map))]

    for k in range(len(measurements)):
        p = move(p,motions[k])
        p = sense(p,map,measurements[k])
    return p

### 定义观测,更新概率
def sense(p,map,measurement):
    aux = [[0.0 for row in range(len(p[0]))] for col in range(len(p))]

    s = 0.0
    for i in range(len(p)):
        for j in range(len(p[i])):
            hit=(measurement == map[i][j])
            aux[i][j]=p[i][j]*(hit * sensor_right +(1-hit)*sensor_wrong)
            s+=aux[i][j]

    for i in range(len(aux)):
        for j in range(len(aux[0])):
            aux[i][j]/=s
    return aux

### 定义移动,更新概率
def move(p,motion):
    aux = [[0.0 for row in range(len(p[0]))] for col in range(len(p))]

    for i in range(len(p)):
        for j in range(len(p[i])):
            aux[i][j]=(pMove*p[(i-motion[0])%len(p)][(j-motion[1])%len(p[i])] + pStay*p[i][j])
    return aux

### 显示概率
def show(p):
    for i in range(len(p)):
        for j in range(len(p[0])):
            print(p[i][j])
        print('\n')

### 调用函数
prob = []
prob = location(map,measurements,motions)
show(prob)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值