@HitGirl

Как использовать алгоритм Rainforce с отрицательными наградами?

Здравствуйте!
Пытаюсь реализовать торгового бота, используя алгоритм Rainforce. Агент может вернуть отрицательную награду за действие (торговля в убыток). Как модифицировать алгоритм Rainforce, чтобы он это учитывал?
Я пробовал добавлять к награде (r) фиксированное положительное число, но даже в этом случае агент не обучается.
def _calculateDiscountedReturns(self, rewards):
        print("Min",min([r for r in rewards if r < 0]))
        # получаем сумму наград
        discountedReturns = []
        for t in range(len(rewards)):
            G = 0.0
            for k, r in enumerate(rewards[t:]):
                G += (self.gamma ** k) * (r+100)


            discountedReturns.append(G)

        return discountedReturns

    def train(self, states, actions, rewards):
        # print(states, actions, rewards)
        discountedReturns = self._calculateDiscountedReturns(rewards)
        # обучаем нейронную сеть
        for state, action, G in zip(states, actions, discountedReturns):
            # вероятности
            probs = self.PN(state)
            # категориальное распределение
            dist = torch.distributions.Categorical(probs=probs)
            # возвращает логарифм от вероятности переданного действия
            
            log_prob = dist.log_prob(action)

            # # функция потерь
            loss = - log_prob * G


            # обновляем веса модели
            self.optimizer.zero_grad()
            loss.backward()
            self.optimizer.step()
  • Вопрос задан
  • 72 просмотра
Пригласить эксперта
Ответы на вопрос 1
@AlexSku
не буду отвечать из-за модератора
Примеры реализации Reinforcement Learning: плейлист
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы