File size: 1,091 Bytes
bbf97b5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import numpy as np

class GridWorld:
    def __init__(self, max_steps=50):
        self.size = 4
        self.start = (0, 0)
        self.goal = (3, 3)
        self.holes = [(1, 1), (1, 3), (3, 0)]
        self.actions = ['up', 'down', 'left', 'right']
        self.max_steps = max_steps
        self.reset()

    def reset(self):
        self.state = self.start
        self.steps = 0
        return self.state

    def step(self, action):
        x, y = self.state
        self.steps += 1

        if action == 'up': x = max(0, x - 1)
        elif action == 'down': x = min(self.size - 1, x + 1)
        elif action == 'left': y = max(0, y - 1)
        elif action == 'right': y = min(self.size - 1, y + 1)

        self.state = (x, y)

        if self.state in self.holes:
            return self.state, -50, True
        elif self.state == self.goal:
            return self.state, 50, True
        elif self.steps >= self.max_steps:
            return self.state, -10, True  # episode timeout
        else:
            return self.state, -1, False