0

Я занимаюсь политическим градиентом, и я пытаюсь выяснить, что является лучшей целевой функцией для задачи. Задачей является открытая ai CartPole-v0 среда, в которой агент получает вознаграждение 1 за каждый оставшийся период времени, а также вознаграждение 0 после прекращения. Я пытаюсь выяснить, что является лучшим способом моделирования целевой функции. Я пришел с 3-х возможных функций:Какова лучшая объектная функция задачи CartPole?

def total_reward_objective_function(self, episode_data) : 
    return sum([timestep_data['reward'] for timestep_data in timestep_data]) 

def average_reward_objective_function(self, episode_data): 
    return total_reward_objective_function(episode_data)/len(episode_data) 

def sum_of_discounted_rewards_objective_function(self, episode_data, discount_rate=0.7) 
    return sum([episode_data[timestep]['reward'] * pow(discount_rate, timestep) 
     for timestep in enumerate(episode_data)]) 

Обратите внимание, что для средней награды целевая функция всегда будет возвращать 1, если я не вмешиваться и изменять функцию вознаграждения возвращать отрицательное значение по окончании. Причина, по которой я прошу, а не просто запустить несколько экспериментов, заключается в том, что в других случаях есть ошибки. Поэтому, если кто-то может указать мне на хорошую практику в этой области, я мог бы сосредоточиться на более значительных ошибках в алгоритме.

ответ

2

Вы должны использовать последнюю (сумму льготных вознаграждений), так как проблема с тележкой - это бесконечный горизонт MDP (вы хотите сбалансировать полюс, сколько сможете). The answer to this question объясняет, почему вы должны использовать коэффициент дисконтирования в бесконечных горизонтах MDP.

Первый, вместо этого, представляет собой недисконтированную сумму вознаграждений, которые могут быть использованы, если эпизоды имеют фиксированную длину (например, в случае, если робот выполняет 10-секундную траекторию). Второй, как правило, используется в MDP с конечным горизонтом, но я не очень хорошо знаком с ним.

Для полюса тележки коэффициент дисконтирования 0,9 должен работать (или, в зависимости от используемого алгоритма, вы можете искать научные статьи и использовать используемый коэффициент дисконтирования).

Последнее примечание. Функция вознаграждения, которую вы описали (+1 за каждый временной интервал), не единственная, которая используется в литературе. Обычный (и, я думаю, также «оригинальный») дает 0 при каждом временном значении и -1, если полюс падает. Другие функции вознаграждения связаны с углом между полюсом и тележкой.