Как я могу заставить агента OpenAI ждать после выполнения действия? - PullRequest
0 голосов
/ 28 марта 2020

Я создаю модель обучения с подкреплением (DQN) для бейсбольной игры Gameboy старой школы. Сосредоточившись сначала на нападении, когда агент находится в бите, агент должен выбрать между двумя простыми действиями - A (Размахивать битой) или Нет (Подождите) .

У меня возникли некоторые проблемы с внедрением; а именно, сама анимация свинга занимает много времени; может быть около 80-90 кадров или около того. Таким образом, если агент решает раскачать летучую мышь, он иногда продолжает пытаться размахивать летучей мышью снова (например, он выбирает A снова и снова) , в то время как летучая мышь все еще качается с первого A-нажатия. В настоящее время я делаю что-то вроде следующего для реализации пропуска кадра:

# Main loop
for e in range(episodes):

    state = env.reset()
    ...

    while True:

        # Run agent
        action = agent.run(state=state)

        # 0 = SWING, 1 = WAIT

        # If we have a frame-skip, force the action to be WAIT and decrement
        if frame_skip != 0:
           action = 1
           frame_skip -= 1

        # If the action is a swing, set the frame skip
        if action = 0: 
           frame_skip = 90

        # Perform action
        next_state, reward, done, info = env.step(action=action)

        ...

Однако я беспокоюсь о том, что то, что я делаю, является нечетким и, вероятно, испортит модель. Фактически, действие, возвращаемое agent.run(), которое использует модель DQN для выбора случайного действия или действия, основанного на политике, эффективно игнорируется, когда происходит пропуск кадра.

Есть ли способ обойти это?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...