我的目標是開發一個DQN代理,它將根據特定的策略/策略選擇其操作。我以前使用OpenAi健身房環境,但現在我想創建自己的RL環境。在此階段,代理應選擇隨機操作或根據深度神經網絡(在DQN類中定義)給出的預測選擇其操作。到目前為止,我已經設置了神經網絡模型和我的環境。NN 應接收狀態作為其輸入。這些狀態表示 11 個可能的標量值,范圍從 9.5 到 10.5(9.5、9.6、...、10.4、10.5)。由于我們正在處理RL,因此代理在訓練過程中生成其數據。輸出應為 0 和 1,對應于建議的操作?,F在,我想給我的代理一個標量值:例如,一個樣本狀態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
提交
取消