Skip to content

Instantly share code, notes, and snippets.

@sandeshbhusal
Created December 11, 2023 20:13
Show Gist options
  • Save sandeshbhusal/bd5ad348e480ba984e52fb583a0425ab to your computer and use it in GitHub Desktop.
Save sandeshbhusal/bd5ad348e480ba984e52fb583a0425ab to your computer and use it in GitHub Desktop.
Gridworld final exam
grid = [[-1] * 5 for i in range(0, 4)]
grid[0][2] = -100000
grid[0][4] = 1000
grid[1][2] = -100000
grid[3][3] = -100
final_states = [
(0, 2),
(0, 4),
(1, 2),
]
def printgrid():
for row in grid:
for number in row:
print("{0:0.2f} \t".format(number), end = ' ')
print("")
# based on current cell, find the left cell and get its value.
def leftcellvalue(row: int, col: int):
return grid[row][max(col-1, 0)]
def rightcellvalue(row: int, col: int):
return grid[row][min(col+1, 4)]
def upcellvalue(row: int, col: int):
return grid[max(row - 1, 0)][col]
def downcellvalue(row: int, col: int):
return grid[min(row + 1, 3)][col]
def run_calculation():
global grid
newgrid = [[0] * 5 for i in range(0, 4)]
# Do calc.
for i in range(0, 4):
for j in range(0, 5):
if (i, j) in final_states:
newgrid[i][j] = grid[i][j]
continue
new_value = 0.0
updownvalue = upcellvalue(i, j) + downcellvalue(i, j)
leftrightvalue = leftcellvalue(i, j) + rightcellvalue(i, j)
# Move up.
new_value += (
upcellvalue(i, j) * 1 / 3
+ leftrightvalue * 1/3
)
# Move down.
new_value += (
downcellvalue(i, j) * 1 / 3
+ leftrightvalue * 1/3
)
# Move left.
new_value += (
leftcellvalue(i, j) * 1 / 3
+ updownvalue * 1/3
)
# Move right.
new_value += (
rightcellvalue(i, j) * 1/3
+ updownvalue * 1/3
)
newgrid[i][j] = new_value
# Replace the grid.
grid = newgrid
if __name__ == "__main__":
printgrid()
run_calculation()
print()
printgrid()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment