Udacity-Artificial Intelligence for Robotics 课程笔记

Lesson 1 Localization

蒙特卡洛机器人定位模型

sense 贝叶斯模型

move 全概率公式

localization练习

  1 # The function localize takes the following arguments:
  2 #
  3 # colors:
  4 #        2D list, each entry either 'R' (for red cell) or 'G' (for green cell)
  5 #
  6 # measurements:
  7 #        list of measurements taken by the robot, each entry either 'R' or 'G'
  8 #
  9 # motions:
 10 #        list of actions taken by the robot, each entry of the form [dy,dx],
 11 #        where dx refers to the change in the x-direction (positive meaning
 12 #        movement to the right) and dy refers to the change in the y-direction
 13 #        (positive meaning movement downward)
 14 #        NOTE: the *first* coordinate is change in y; the *second* coordinate is
 15 #              change in x
 16 #
 17 # sensor_right:
 18 #        float between 0 and 1, giving the probability that any given
 19 #        measurement is correct; the probability that the measurement is
 20 #        incorrect is 1-sensor_right
 21 #
 22 # p_move:
 23 #        float between 0 and 1, giving the probability that any given movement
 24 #        command takes place; the probability that the movement command fails
 25 #        (and the robot remains still) is 1-p_move; the robot will NOT overshoot
 26 #        its destination in this exercise
 27 #
 28 # The function should RETURN (not just show or print) a 2D list (of the same
 29 # dimensions as colors) that gives the probabilities that the robot occupies
 30 # each cell in the world.
 31 #
 32 # Compute the probabilities by assuming the robot initially has a uniform
 33 # probability of being in any cell.
 34 #
 35 # Also assume that at each step, the robot:
 36 # 1) first makes a movement,
 37 # 2) then takes a measurement.
 38 #
 39 # Motion:
 40 #  [0,0] - stay
 41 #  [0,1] - right
 42 #  [0,-1] - left
 43 #  [1,0] - down
 44 #  [-1,0] - up
 45 def sense(p,colors,measurement,sensor_right):
 46     q=[]
 47     for row in range(len(colors)):
 48         temp=[]
 49         for col in range(len(colors[0])):
 50             hit = (measurement == colors[row][col])
 51             temp.append(p[row][col] * (hit * sensor_right + (1-hit) * (1-sensor_right)))
 52         q.append(temp)
 53     s=0
 54     for row in range(len(q)):
 55         for col in range(len(q[0])):
 56             s += q[row][col]
 57     for row in range(len(p)):
 58         for col in range(len(q[0])):
 59             q[row][col] = q[row][col]/s
 60     return q
 61 
 62 def move(p, motion, p_move):
 63     q = []
 64     for row in range(len(colors)):
 65         temp=[]
 66         for col in range(len(colors[0])):
 67             s = p_move * p[(row - motion[0]) % len(colors)][(col - motion[1]) % len(colors[0])]
 68             s += (1-p_move) * p[row][col]
 69             temp.append(s)
 70         q.append(temp)
 71     return q
 72         
 73 def localize(colors,measurements,motions,sensor_right,p_move):
 74     # initializes p to a uniform distribution over a grid of the same dimensions as colors
 75     pinit = 1.0 / float(len(colors)) / float(len(colors[0]))
 76     p = [[pinit for row in range(len(colors[0]))] for col in range(len(colors))]
 77     
 78     # >>> Insert your code here <<<
 79     
 80     for k in range(len(motions)):
 81         p = move(p, motions[k],p_move)
 82         p = sense(p,colors,measurements[k],sensor_right)
 83     
 84     return p
 85 
 86 def show(p):
 87     rows = ['[' + ','.join(map(lambda x: '{0:.5f}'.format(x),r)) + ']' for r in p]
 88     print '[' + ',\n '.join(rows) + ']'
 89     
 90 #############################################################
 91 # For the following test case, your output should be 
 92 # [[0.01105, 0.02464, 0.06799, 0.04472, 0.02465],
 93 #  [0.00715, 0.01017, 0.08696, 0.07988, 0.00935],
 94 #  [0.00739, 0.00894, 0.11272, 0.35350, 0.04065],
 95 #  [0.00910, 0.00715, 0.01434, 0.04313, 0.03642]]
 96 # (within a tolerance of +/- 0.001 for each entry)
 97 
 98 colors = [['R','G','G','R','R'],
 99           ['R','R','G','R','R'],
100           ['R','R','G','G','R'],
101           ['R','R','R','R','R']]
102 measurements = ['G','G','G','G','G']
103 motions = [[0,0],[0,1],[1,0],[1,0],[0,1]]
104 p = localize(colors,measurements,motions,sensor_right = 0.7, p_move = 0.8)
105 show(p) # displays your answer
View Code

 

simultaneous adj.同时的

转载于:https://www.cnblogs.com/toone/p/5937948.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值