colors = [['red', 'green', 'green', 'red' , 'red'], ['red', 'red', 'green', 'red', 'red'], ['red', 'red', 'green', 'green', 'red'], ['red', 'red', 'red', 'red', 'red']]
measurements = ['green', 'green', 'green' ,'green', 'green']
motions = [[0,0],[0,1],[1,0],[1,0],[0,1]]
sensor_right = 0.7
p_move = 0.8
def show(p): for i in range(len(p)): print p[i]
def move(p, dir): q = [] for r in range(len(p)): row = [] for c in range(len(p[r])): v = p[(r - dir[0]) % len(p)][(c - dir[1]) % len(p[r])] * p_move v += p[r][c] * (1.0 - p_move) row.append(v) q.append(row) return q
def sense(p, colors, Z): q = [] for r in range(len(p)): row = [] for c in range(len(p[r])): z = colors[r][c] == Z v = sensor_right * z + (1.0 - sensor_right) * (1 - z) row.append(p[r][c] * v) q.append(row) return q
def normalize(p): total = 0.0 for r in range(len(p)): total += sum(p[r])
q = [] for r in range(len(p)): row = [] for c in range(len(p[r])): row.append(p[r][c] / total) q.append(row) return q
def uniform(rows, columns): return [[1.0 / (rows * columns)] * columns] * rows
p = uniform(len(colors), len(colors[0])) for i in range(len(measurements)): p = move(p, motions[i]) p = sense(p, colors, measurements[i]) p = normalize(p)
show(p)
|