Я пытаюсь создать модель обучения Q для блэкджека и не понимаю, как можно выполнить более двух действий. Я получаю действие с этим на самом деле:
def get_action(self, state):
rewards = self._model.predict([np.array([state])], batch_size=1)
print(state)
print(rewards)
quit()
if np.random.uniform(0,1) < self._epsilon or self._learning == False:
if rewards[0][0] > rewards[0][1]:
action = Constants.hit
else:
action = Constants.stay
else:
action = np.random.choice([Constants.hit, Constants.stay])
self._last_state = state
self._last_action = action
self._last_target = rewards
Для обновления модели:
def update(self,new_state,reward):
if self._learning:
rewards = self._model.predict([np.array([new_state])], batch_size=1)
maxQ = rewards[0][0] if rewards[0][0] > rewards[0][1] else rewards[0][1]
new = self._discount * maxQ
if self._last_action == Constants.hit:
self._last_target[0][0] = reward+new
else:
self._last_target[0][1] = reward+new
# Update model
self._model.fit(np.array([self._last_state]), self._last_target, batch_size=1, nb_epoch=1, verbose=0)
И инициализация модели:
model = Sequential()
model.add(Dense(2, init='lecun_uniform', input_shape=(2,)))
model.add(Activation('relu'))
model.add(Dense(10, init='lecun_uniform'))
model.add(Activation('relu'))
model.add(Dense(4, init='lecun_uniform'))
model.add(Activation('linear'))
rms = RMSprop()
model.compile(loss='mse', optimizer=rms)
На самом деле я у меня есть возможность для удара или подставки, и я смогу реализовать дубль, как я могу это сделать? заранее спасибо и извините за мой бедный англи sh.