我构建了一个自定义强化学习环境并使用 PPO 来训练我的代理。以下是训练循环的片段。
environment = Environment.create(environment=networkEnvironment, max_episode_timesteps=8)
#rlAgent = Agent.create(agent='ppo', environment=environment, batch_size=16, learning_rate=1e-3, update_frequency=16, saver=dict(directory='impactAgent', unit='episodes', frequency=20, max_checkpoints=20))
rlAgent = Agent.load(directory='impactAgent', format='checkpoint', environment=environment)
for _ in range(300):
totalReward = 0
states = environment.reset()
while not terminal:
actions = rlAgent.act(states=states)
states, terminal, reward = environment.execute(actions=actions)
totalReward = totalReward + reward
rlAgent.observe(terminal=terminal, reward=reward)
该循环按预期进行训练并收敛于接近最优的策略。然而,每当我想运行评估循环时,它都不使用预期的策略,并且执行得很糟糕,每次都选择一个单一的操作。评估循环如下:
for _ in range(3):
sum_rewards = 0.0
states = environment.reset()
internals = rlAgent.initial_internals()
terminal = False
while not terminal:
actions, internals = rlAgent.act(states=states, internals=internals, independent=True, deterministic=True)
states, terminal, reward = environment.execute(actions)
在一些重要的背景下,代理正在阻止环境中的多阶段攻击,因此最优策略通常不是代理在训练期间理解的单一操作(找到并重复良好的操作序列)。然而,在评估过程中,智能体仅在每个时间步重复单个动作,直到情节完成。选择的动作通常很差,并且不符合训练期间发现的“良好”动作顺序。
我在设置评估时遗漏了什么吗?
您是否找到了解决方案,因为这与我目前遇到的问题相同?