我的目标是开发一个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 = 100
MAX_STEPS_PER_EPISODE = 100
EPSILON = 0.5
EPSILON_DECAY_RATE = 0.001
EPSILON_MIN = 0.01
EPSILON_MAX = 1
DISCOUNT_FACTOR = 0.99
REPLAY_MEMORY_SIZE = 50000
BATCH_SIZE = 50
TRAIN_START = 100
ACTION_SPACE = [0, 1]
STATE_SIZE = 11
LEARNING_RATE = 0.01
大话西游666
相关分类