Почему функция не возвращает true?Python

Программы на Python
Anonymous
Почему функция не возвращает true?

Сообщение Anonymous »

Почему функция не возвращает Done = True, если при вызове другой функции внутри которой выводится Done = True.
Например, я передаю 4 в функцию _apply_discrete_action. Почему в методе шага он не возвращает Done = True?

Код: Выделить всё

def _apply_discrete_action(self, action):
x, y = self.position
self.previous_position = self.position

if action == 0:  # up
self.position = (x, y - 1)
elif action == 1:  # down
self.position = (x, y + 1)
elif action == 2:  # left
self.position = (x - 1, y)
elif action == 3:  # right
self.position = (x + 1, y)
elif action == 4:  # up-left
self.position = (x - 1, y - 1)
elif action == 5:  # up-right
self.position = (x + 1, y - 1)
elif action == 6:  # down-left
self.position = (x - 1, y + 1)
elif action == 7:  # down-right
self.position = (x + 1, y + 1)

# Processing: beyond map, obstacle collision
if self.position[0] < 0 or self.position[0] >= self.map_size[0] or \
self.position[1] < 0 or self.position[1] >= self.map_size[1] or \
self.obstacles[self.position[1]][self.position[0]] == 1:
self.done = True
def step(self, action):
if self.done:
raise Exception("Episode has finished. Please reset the environment.")

discrete_action, continuous_action = action
self._apply_discrete_action(discrete_action)
self._apply_continuous_action(continuous_action)
self.steps += 1
time_step = self._calculate_time()
self.total_time += time_step
self._calculate_energy_consumption(time_step)

reward = self._calculate_reward()
self.done = self._check_done()

return self._get_state(), reward, self.done
начало теста:

Код: Выделить всё

 for _ in range(10):
action = (np.random.randint(8), np.random.uniform(-1, 1))  # random action
next_state, reward, done = env.step(action)
print(f"Action: {action}, Next state: {next_state}, Reward: {reward}, Done: {done}")
if done:
break
Например, я передаю 4 в функцию _apply_discrete_action, почему она не возвращает Done = True в методе шага?
Ведь у меня есть проверка на выход за пределы двумерная карта сетки, но если из начальной позиции [0,0] действие 4 выводит меня за пределы карты, но функция шага не выводит true. Мой актер определенно выходит за пределы карты, потому что следующая координата — [-1,-1]

Подробнее здесь: https://stackoverflow.com/questions/788 ... eturn-true

Вернуться в «Python»