我正在尝试针对以下问题实施深度强化学习算法: 我有一个简单的足球模拟器:点球大战游戏(2D)。 强化学习者是踢腿者,他必须学习如何得分。踢手可以使球绕120度(-60°; + 60°)旋转。 在第一个版本中,射门的力量是恒定的,守门员不会移动。守门员的位置在-50到+50之间。 然后,代理的作用是在-60°和+ 60°之间选择一个位置。 作为环境信息,座席将获得守门员的位置。 射击后,特工会得到奖励。
我正在使用Keras。 我不使用CNN,目的是仅使用数值数据(射击角度,守门员位置,奖励)
我创建了一个模型:
model = Sequential()
model.add(Dense(1, input_dim=1, activation='relu'))
model.add(Dense(10, activation='relu'))
model.add(Dense(1, activation='linear'))
model.compile(loss='mse', optimizer='adam')
第一层的尺寸为1,因为环境只有一个输入:守门员位置。 我任意选择第二个大小为10的图层。 输出层的尺寸为1,因为只有一个输出,代理的一种可能动作是射击角度。
对于输入和输出层,是否正确? RL算法是否可以返回例如-60至+60(或0至120)之间的值?还是我可以使用大小为100的输入层(每个可能的位置一个节点)和大小为120的输出层(每个可能的角度一个节点)?
每次拍摄后,我都更新了模型:
model.fit([0], reward, epochs=1, verbose=0)
predict = model.predict([0, 1])
在fit命令中,“ [0]”是守门员的位置,“奖励”是最后获得的奖励。 在预测命令中,我不能只为门将的位置写“ [0]”(我有执行错误),我必须写“ [0,1]”。 1代表什么都没有...
请帮助我实施这种深度强化学习算法?