ИИ в Python - добавление большего количества временных точек делает мою модель «провалиться»Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 ИИ в Python - добавление большего количества временных точек делает мою модель «провалиться»

Сообщение Anonymous »


hi! Я только что сделал свою первую модель в стабильных Baselines3, используя Pygame в Python. Игра посвящена мячу, достигающему самой высокой платформы из трех, размещенных в небе. < /P>
Мне удалось заставить модель научиться туда добраться. Но затем, достигнув третьей платформы, она падает и остается на земле. Я хотел обучить новую модель, которая решила бы эту проблему, но, к моему удивлению, увеличивая Total_timesteps до 500_000, полностью не снят тест - мяч просто прыгает в одном месте, тогда как модель с гораздо меньшим количеством - 150_000 добралась до самой высокой платформы!
Почему это? Вот моя функция вызова < /p>
@edit
Я подумал, что иногда модель узнает, как туда добраться даже с меньшим количеством времени ~ = 15_000.
может быть это Из -за чистой удачи + энтропия?
И если да, то какие гиперпараметры/лучшая система вознаграждения я могу реализовать для мяча?
Это моя функция вознаграждения: < Br />

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

    reward = -1 # Default reward

# Reward for moving towards the goal platform
dist_reward = int((1/self.goal_distance) * 10000)
reward += dist_reward

# Reward for being airborne
if self.y_acc != 0 and self.ball.player_pos.y < GROUND_Y:
reward += 10

# Reward for moving right/left
if self.x_velocity != 0 :
reward += 1

if (collision_plat0 is not None and collision_plat0["top"]):
# Negative reward for hitting the floor
reward -= 50
if(collision_plat1 is not None and collision_plat1["top"]):
# Reward for reaching the first platform
reward += 2
elif(collision_plat2 is not None and collision_plat2["top"]):
# Reward for reaching the second platform
reward += 3
elif(collision_plat3 is not None and collision_plat3["top"]):
# Reward for reaching the third platform
reward += 30000000
< /code>
есть код моего движения, если он может прийти полезным: < /p>
if action is not None:
# Handle movement
if action == 0:  # Move left
self.ball.player_pos.x -= 5
self.x_velocity = -5
#reward = 0.001
elif action == 1:  # Move right
self.ball.player_pos.x += 5
self.x_velocity = 5
#reward = 0.001

collision_top = False
for i, platform in enumerate(self.platforms):
collision = check_collision_ball_rect(self.ball, platform)
if collision:
if collision["top"]:
collision_top = True
self.y_acc = 0
if action == 2:
self.y_acc = 20
else:
self.ball.player_pos.y = platform.top - self.ball.radius
if collision["bottom"]:
self.ball.player_pos.y = platform.bottom + self.ball.radius
if collision["left"] and action == 1:
self.ball.player_pos.x = platform.left - self.ball.radius
self.x_velocity = 0
if collision["right"] and action == 0:
self.ball.player_pos.x = platform.right + self.ball.radius
self.x_velocity = 0

if self.y_acc > 0 or not collision_top:
self.y_acc -= 1

# Apply gravity
self.ball.player_pos.y += GRAVITY - self.y_acc
Я в основном перемещаю шарик 5 px/кадр справа или влево + он может прыгать с ускорением с применением тяжести (я также проверяю столкновения с прямоугольниками).

Подробнее здесь: https://stackoverflow.com/questions/794 ... model-fail
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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