Получите больше, чем 2 действия возможно с q learning - PullRequest
0 голосов
/ 31 марта 2020

Я пытаюсь создать модель обучения 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.

...