Внедрение иерархического обучения

Может ли кто-нибудь порекомендовать библиотеку или среду обучения для подкрепления, которая может обрабатывать большие пространства состояний, абстрагируя их?

Я пытаюсь применить интеллект для маленького агента в игровом мире. Агент представлен маленьким двухколесным роботом, который может двигаться вперед и назад и поворачиваться влево и вправо. Он имеет пару датчиков для обнаружения границы на земле, пару ультразвуковых датчиков для обнаружения объектов на большом расстоянии и пару датчиков удара для обнаружения контакта с объектом или противником. Он также может сделать несколько простых расчетов, чтобы оценить свою позицию в мире, используя свою исходную позицию в качестве ориентира. Итак, все доступные ему функции состояния:

edge_detected=0|1
edge_left=0|1
edge_right=0|1
edge_both=0|1
sonar_detected=0|1
sonar_left=0|1
sonar_left_dist=near|far|very_far
sonar_right=0|1
sonar_right_dist=near|far|very_far
sonar_both=0|1
contact_detected=0|1
contact_left=0|1
contact_right=0|1
contact_both=0|1
estimated_distance_from_edge_in_front=near|far|very_far
estimated_distance_from_edge_in_back=near|far|very_far
estimated_distance_from_edge_to_left=near|far|very_far
estimated_distance_from_edge_to_right=near|far|very_far

Цель состоит в том, чтобы идентифицировать состояние, в котором получен сигнал вознаграждения, и изучить политику, чтобы получить это вознаграждение как можно быстрее. В традиционной марковской модели это пространство состояний, представленное дискретно, будет иметь 2985984 возможных значений, что слишком много, чтобы исследовать каждый из них, используя что-то вроде Q-learning или SARSA.

Может ли кто-нибудь порекомендовать библиотеку подкрепления, подходящую для этого домена (предпочтительно с привязками Python) или неосуществленный алгоритм, который я мог бы реализовать самостоятельно?

1 ответ

Ваше реальное состояние - это положение и ориентация робота в мире. Использование этих показаний датчика является приблизительным, поскольку оно может сделать многие состояния неразличимыми.

Теперь, если вы пойдете по этому пути, вы можете использовать приближение линейной функции. Тогда это всего лишь 24 двоичных объекта (12 0|1 + 6*2 около | далеко | очень_фара). Это настолько мало, что вы могли бы даже использовать все пары функций для обучения. Дальше по этому пути находится онлайн-обнаружение зависимостей объектов (см., Например, статью Альборза Герамифарда). Это напрямую связано с вашим интересом к иерархическому обучению.

Альтернативой является использование обычного алгоритма для отслеживания положения робота и использования положения в качестве входных данных для RL.

Другие вопросы по тегам