我想使用 DQN 和样本来训练 RL 代理,而无需与环境交互。据我了解,DQN 是一种离策略算法,因此它似乎是可能的。(我说得对吗?)但是,到目前为止我还没有训练过。具体来说,每个状态的 argmax 的值是相同的。(在最优策略中应该是不同的。)
我的环境如下:
- 状态:4 个状态(
A
,B
,C
,D
) - 动作:3 个动作 (
Stay
,Up
,Down
) - Reward & Transition:
B
是终端状态。(括号中的表达式表示(状态、动作、奖励、下一个状态)。)- 当您
Stay
进入 时A
,您将进入A
并获得 0 (A
,Stay
, 0,A
) - 当您
Up
进入 时A
,您将进入B
并获得 0.33 (A
,Up
, 0.33,B
) - 当您
Down
进入 时A
,您将进入A
并获得 0 (A
,Down
, 0,A
) - 当您
Stay
进入 时B
,您将进入B
并获得 0.33 (B
,Stay
, 0.33,B
) - 当您
Up
进入 时B
,您将进入C
并获得 0.25 (B
,Up
, 0.25,C
) - 当您
Down
进入 时B
,您将进入A
并获得 0 (B
,Down
, 0,A
) - 当您
Stay
进入 时C
,您将进入C
并获得 0.25 (C
,Stay
, 0.25,C
) - 当您
Up
进入 时C
,您将进入D
并获得 0.2 (C
,Up
, 0.2,D
) - 当您
Down
进入 时C
,您将进入B
并获得 0.33 (C
,Down
, 0.33,B
) - 当您
Stay
进入 时D
,您将进入D
并获得 0.2 (D
,Stay
, 0.2,D
) - 当您
Up
进入 时D
,您将进入D
并获得 0.2 (D
,Up
, 0.2,D
) - 当您
Down
进入 时D
,您将进入C
并获得 0.25 (D
,Down
, 0.25,C
)
- 当您
我的训练方式:
- 我将上面的每个样本都放在缓冲存储器中。
- 然后我使用 DQN 进行训练。(不与环境交互)
杂项。
- 神经网络
- 两层(输入和输出层。它们之间没有隐藏层)
- 优化器:亚当
- 超参数
- 学习率:0.001
- 批量大小:在 2 到 12 之间变化
代码截图
结果
- 结果截图
- 列是动作。(0:
Stay
, 1:Up
, 2:Down
) - 行是状态。(有些是不同的,有些是相同的)。
- 每个状态的 argmax 为 1,这不是最优策略。
- 即使我更多地运行循环,结果也不会改变。