58 lines
974 B
Python
58 lines
974 B
Python
# -*- coding: utf-8 -*-
|
|
"""
|
|
Created on Tue Apr 22 10:43:38 2014
|
|
|
|
@author: rlabbe
|
|
"""
|
|
|
|
p = [.2, .2, .2, .2, .2]
|
|
world = ['green', 'red', 'red', 'green', 'green']
|
|
measurements = ['red', 'green']
|
|
|
|
pHit = 0.6
|
|
pMiss = 0.2
|
|
|
|
pOvershoot = 0.1
|
|
pUndershoot = 0.1
|
|
pExact = 0.8
|
|
|
|
def normalize (p):
|
|
s = sum(p)
|
|
for i in range (len(p)):
|
|
p[i] = p[i] / s
|
|
|
|
def sense(p, Z):
|
|
q= []
|
|
for i in range (len(p)):
|
|
hit = (world[i] ==Z)
|
|
q.append(p[i] * (pHit*hit + pMiss*(1-hit)))
|
|
normalize(q)
|
|
return q
|
|
|
|
|
|
def move(p, U):
|
|
q = []
|
|
for i in range(len(p)):
|
|
pexact = p[(i-U) % len(p)] * pExact
|
|
pover = p[(i-U-1) % len(p)] * pOvershoot
|
|
punder = p[(i-U+1) % len(p)] * pUndershoot
|
|
q.append (pexact + pover + punder)
|
|
|
|
normalize(q)
|
|
return q
|
|
|
|
if __name__ == "__main__":
|
|
|
|
p = sense(p, 'red')
|
|
print p
|
|
pause()
|
|
for z in measurements:
|
|
p = sense (p, z)
|
|
p = move (p, 1)
|
|
print p
|
|
|
|
|
|
|
|
|
|
|