Какой алгоритм обучения с подкреплением (или метод без RL) лучше всего подойдет для этой задачи с (технически) пространством переменных действий? - PullRequest
0 голосов
/ 08 апреля 2020

У меня есть среда, в которой агент должен на каждом временном шаге принимать решение о том, открывать или закрывать ряд независимых процессов где каждый процесс имеет известную вероятность сбоя или успешного завершения через определенное время. Так, например, процесс, открытый в момент времени t , имеет вероятность p t ' успешного завершения во время t + t' и вероятность q t ' неудачи в момент t + t' . Эти распределения вероятностей p и q известны и зафиксированы в моделировании. Симуляция заканчивается после успешного завершения процессов N , где N - фиксированное число, определенное в точке обучения.

Пространство действия является переменным, поскольку в каждый момент времени Шаг агент может открыть любое количество новых процессов, но также закрыть любой из открытых в данный момент процессов (то есть тех, которые не "отказали" и, таким образом, удалены из среды).

Пространство наблюдения состоит из текущий возраст моделирования (начиная с t = 0 каждый раз), число сбойных процессов, количество открытых процессов и возраст каждого открытого процесса.

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

Я скопировал ниже пример сценария где условие завершения - успешное завершение двух процессов (извините, если я не выполнил правильное соглашение для диаграмм последовательности).

Example scenario for completion of two processes


Я попытался упростить проблему, заменив вектор переменной длины действий True / False (соответствующий тому, закрывать или нет текущие открытые процессы) простым целым числом x , где соответствующее действие " закройте x самые старые открытые процессы ", однако это не очень хорошо работает при обучении (пока только на обычном DQN с затухающим эпсилон-жадным исследованием), и я считаю, что оно эффективно игнорирует сложную вероятность дистрибутивы для каждого процесса, завершающего / не выполняющего.

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

...