我的目标是开发一个DQN代理,它将根据特定的策略/策略选择其操作。我以前使用OpenAi健身房环境,但现在我想创建自己的RL环境。在此阶段,代理应选择随机操作或根据深度神经网络(在DQN类中定义)给出的预测选择其操作。到目前为止,我已经设置了神经网络模型和我的环境。NN 应接收状态作为其输入。这些状态表示 11 个可能的标量值,范围从 9.5 到 10.5(9.5、9.6、...、10.4、10.5)。由于我们正在处理RL,因此代理在训练过程中生成其数据。输出应为 0 和 1,对应于建议的操作。现在,我想给我的代理一个标量值:例如,一个样本状态x = 10,让他决定要执行的操作(调用Agent.select_action()),我遇到了与输入形状/输入维度相关的问题。代码如下:1. DQN 类:class DQN(): def __init__(self, state_size, action_size, lr): self.state_size = state_size self.action_size = action_size self.lr = lr self.model = Sequential() self.model.add(Dense(128, input_dim=self.state_size, activation='relu')) self.model.add(Dense(128, activation='relu')) self.model.add(Dense(self.action_size, activation='linear')) self.model.compile(optimizer=Adam(lr=self.lr), loss='mse') self.model.summary() def model_info(self): model_description = '\n\n---Model_INFO Summary: The model was passed {} state sizes,\ \n {} action sizes and a learning rate of {} -----'\ .format(self.state_size, self.action_size, self.lr) return model_description def predict(self, state): return self.model.predict(state) def train(self, state, q_values): self.state = state self.q_values = q_values return self.model.fit(state, q_values, verbose=0) def load_weights(self, path): self.model.load_weights(path) def save_weights(self, path): self.model.save_weights(path)2. 代理类:NUM_EPISODES = 100MAX_STEPS_PER_EPISODE = 100EPSILON = 0.5 EPSILON_DECAY_RATE = 0.001EPSILON_MIN = 0.01EPSILON_MAX = 1DISCOUNT_FACTOR = 0.99REPLAY_MEMORY_SIZE = 50000BATCH_SIZE = 50TRAIN_START = 100ACTION_SPACE = [0, 1]STATE_SIZE = 11 LEARNING_RATE = 0.01
1 回答
大话西游666
TA贡献1817条经验 获得超14个赞
这里有几个问题。首先,您所说的实际上是一个状态空间,即您的代理可以处于的所有可能状态的集合。状态大小实际上是 1,因为只有一个参数要作为状态传递。state_size
在此处定义输入图层时:
self.model.add(Dense(128, input_dim=self.state_size, activation='relu'))
您说输入维度将等于 11,但当您调用预测时,您将它传递给 1 个数字 (10)。
因此,您要么需要修改以仅接收一个数字,要么可以定义状态向量,例如,每个数字对应于一个可能的状态(从9.5到10.5)。因此,当状态为 9.5 时,您的状态向量为 9.5,依此类推。input_dim
state = np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
[1, 0, 0, ...0]
第二个问题是,当你定义你的状态时,你应该把方括号
state = np.array([10])
否则数组的形状是(),我相信你已经发现了。
希望它有帮助!如果您需要任何澄清,请告诉我。
添加回答
举报
0/150
提交
取消