Spaces:
Sleeping
Sleeping
| import random | |
| class DeliveryEnv: | |
| def __init__(self): | |
| self.grid_size = 5 | |
| self.reset() | |
| def reset(self): | |
| self.agent_pos = [0, 0] | |
| self.pickup = [2, 2] | |
| self.drop = [4, 4] | |
| self.has_item = False | |
| self.steps = 0 | |
| return self.state() | |
| def state(self): | |
| return { | |
| "agent_pos": self.agent_pos, | |
| "has_item": self.has_item, | |
| "pickup": self.pickup, | |
| "drop": self.drop | |
| } | |
| def step(self, action): | |
| reward = -1 # step penalty | |
| done = False | |
| # movement | |
| if action == "up": | |
| self.agent_pos[0] = max(0, self.agent_pos[0] - 1) | |
| elif action == "down": | |
| self.agent_pos[0] = min(self.grid_size - 1, self.agent_pos[0] + 1) | |
| elif action == "left": | |
| self.agent_pos[1] = max(0, self.agent_pos[1] - 1) | |
| elif action == "right": | |
| self.agent_pos[1] = min(self.grid_size - 1, self.agent_pos[1] + 1) | |
| # pickup | |
| elif action == "pickup": | |
| if self.agent_pos == self.pickup and not self.has_item: | |
| self.has_item = True | |
| reward += 10 | |
| # drop | |
| elif action == "drop": | |
| if self.agent_pos == self.drop and self.has_item: | |
| reward += 20 | |
| done = True | |
| self.steps += 1 | |
| if self.steps > 50: | |
| done = True | |
| return self.state(), reward, done, {} |