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]
#DO NOT USE IMPORT
#ENTER CODE BELOW HERE
#ANY CODE ABOVE WILL CAUSE
#HOMEWORK TO BE GRADED
#INCORRECT
#make same structure list as colors list
def duplicateMatrix(l):
q = []
for i in range(len(l)):
q.append([])
for j in range(len(l[i])):
q[i].append(0)
return q
# update probabilities on move
def move(m, p):
q = duplicateMatrix(p)
for i in range(x):
for j in range(y):
s = p[(i - m[0]) % x][(j - m[1]) % y] * p_move
s += p[i][j] * (1 - p_move)
q[i][j] = s
return q
# update probabilities on sense
def sense(m, p):
q = duplicateMatrix(p)
total = 0
for i in range(x):
for j in range(y):
hit = (m == colors[i][j])
q[i][j] = p[i][j] * (hit * sensor_right + (1-hit) * (1-sensor_right))
total += q[i][j]
# normalize
for i in range(x):
for j in range(y):
q[i][j] /= total
return q
# initialize probabilities list
p = duplicateMatrix(colors)
# get size of list as x and y
(x,y)=(len(colors), len(colors[0]))
# total number of grids
n = x * y
# fill p list with uniform distribution
for i in range(x):
for j in range(y):
p[i][j] = 1./n
# execute actions
for i in range(len(motions)):
p = move(motions[i], p)
p = sense(measurements[i], p)
#Your probability array must be printed
#with the following code.
show(p)
Y29sb3JzID0gW1sncmVkJywgJ2dyZWVuJywgJ2dyZWVuJywgJ3JlZCcgLCAncmVkJ10sCiAgICAgICAgICBbJ3JlZCcsICdyZWQnLCAnZ3JlZW4nLCAncmVkJywgJ3JlZCddLAogICAgICAgICAgWydyZWQnLCAncmVkJywgJ2dyZWVuJywgJ2dyZWVuJywgJ3JlZCddLAogICAgICAgICAgWydyZWQnLCAncmVkJywgJ3JlZCcsICdyZWQnLCAncmVkJ11dCgptZWFzdXJlbWVudHMgPSBbJ2dyZWVuJywgJ2dyZWVuJywgJ2dyZWVuJyAsJ2dyZWVuJywgJ2dyZWVuJ10KCgptb3Rpb25zID0gW1swLDBdLFswLDFdLFsxLDBdLFsxLDBdLFswLDFdXQoKc2Vuc29yX3JpZ2h0ID0gMC43CgpwX21vdmUgPSAwLjgKCmRlZiBzaG93KHApOgogICAgZm9yIGkgaW4gcmFuZ2UobGVuKHApKToKICAgICAgICBwcmludCBwW2ldCgojRE8gTk9UIFVTRSBJTVBPUlQKI0VOVEVSIENPREUgQkVMT1cgSEVSRQojQU5ZIENPREUgQUJPVkUgV0lMTCBDQVVTRQojSE9NRVdPUksgVE8gQkUgR1JBREVECiNJTkNPUlJFQ1QKCiNtYWtlIHNhbWUgc3RydWN0dXJlIGxpc3QgYXMgY29sb3JzIGxpc3QKZGVmIGR1cGxpY2F0ZU1hdHJpeChsKToKICAgIHEgPSBbXQogICAgZm9yIGkgaW4gcmFuZ2UobGVuKGwpKToKICAgICAgICBxLmFwcGVuZChbXSkKICAgICAgICBmb3IgaiBpbiByYW5nZShsZW4obFtpXSkpOgogICAgICAgICAgICBxW2ldLmFwcGVuZCgwKQogICAgcmV0dXJuIHEKICAgIAojIHVwZGF0ZSBwcm9iYWJpbGl0aWVzIG9uIG1vdmUKZGVmIG1vdmUobSwgcCk6CiAgICBxID0gZHVwbGljYXRlTWF0cml4KHApCiAgICBmb3IgaSBpbiByYW5nZSh4KToKICAgICAgICBmb3IgaiBpbiByYW5nZSh5KToKICAgICAgICAgICAgcyA9IHBbKGkgLSBtWzBdKSAlIHhdWyhqIC0gbVsxXSkgJSB5XSAqIHBfbW92ZQogICAgICAgICAgICBzICs9IHBbaV1bal0gKiAoMSAtIHBfbW92ZSkKICAgICAgICAgICAgcVtpXVtqXSA9IHMKICAgIHJldHVybiBxCgojIHVwZGF0ZSBwcm9iYWJpbGl0aWVzIG9uIHNlbnNlCmRlZiBzZW5zZShtLCBwKToKICAgIHEgPSBkdXBsaWNhdGVNYXRyaXgocCkKICAgIHRvdGFsID0gMAogICAgZm9yIGkgaW4gcmFuZ2UoeCk6CiAgICAgICAgZm9yIGogaW4gcmFuZ2UoeSk6CiAgICAgICAgICAgIGhpdCA9IChtID09IGNvbG9yc1tpXVtqXSkKICAgICAgICAgICAgcVtpXVtqXSA9IHBbaV1bal0gKiAoaGl0ICogc2Vuc29yX3JpZ2h0ICsgKDEtaGl0KSAqICgxLXNlbnNvcl9yaWdodCkpCiAgICAgICAgICAgIHRvdGFsICs9IHFbaV1bal0KICAgICMgbm9ybWFsaXplCiAgICBmb3IgaSBpbiByYW5nZSh4KToKICAgICAgICBmb3IgaiBpbiByYW5nZSh5KToKICAgICAgICAgICAgcVtpXVtqXSAvPSB0b3RhbAogICAgCiAgICByZXR1cm4gcQogICAgCiMgaW5pdGlhbGl6ZSBwcm9iYWJpbGl0aWVzIGxpc3QKcCA9IGR1cGxpY2F0ZU1hdHJpeChjb2xvcnMpCgojIGdldCBzaXplIG9mIGxpc3QgYXMgeCBhbmQgeQooeCx5KT0obGVuKGNvbG9ycyksIGxlbihjb2xvcnNbMF0pKQoKIyB0b3RhbCBudW1iZXIgb2YgZ3JpZHMKbiA9IHggKiB5CgojIGZpbGwgcCBsaXN0IHdpdGggdW5pZm9ybSBkaXN0cmlidXRpb24KZm9yIGkgaW4gcmFuZ2UoeCk6CiAgICBmb3IgaiBpbiByYW5nZSh5KToKICAgICAgICBwW2ldW2pdID0gMS4vbgoKIyBleGVjdXRlIGFjdGlvbnMKZm9yIGkgaW4gcmFuZ2UobGVuKG1vdGlvbnMpKToKICAgIHAgPSBtb3ZlKG1vdGlvbnNbaV0sIHApCiAgICBwID0gc2Vuc2UobWVhc3VyZW1lbnRzW2ldLCBwKQogICAgCiNZb3VyIHByb2JhYmlsaXR5IGFycmF5IG11c3QgYmUgcHJpbnRlZCAKI3dpdGggdGhlIGZvbGxvd2luZyBjb2RlLgoKc2hvdyhwKQ==
[0.011059807427972012, 0.02464041578496803, 0.067996628067859152, 0.044724870458121582, 0.02465153121665372]
[0.0071532041833209815, 0.010171326481705892, 0.086965960026646888, 0.07988429965998084, 0.0093506685084371859]
[0.0073973668861116709, 0.0089437306704527025, 0.11272964670259776, 0.35350722955212721, 0.040655492078276775]
[0.0091065058056464965, 0.0071532041833209815, 0.014349221618346574, 0.043133291358448948, 0.036425599329004736]