Supongo que está preguntando sobre “condiciones previas de acción”: cuando el conjunto de acciones es una función del estado del entorno actual. Hay dos formas de preguntar cómo incorporarlos: (1) desde una perspectiva de ingeniería de software, cómo asegurarse de que esta información por estado esté disponible; o (2) cómo incorporar esta información de conjunto de acciones por estado en algoritmos RL.
Comencemos con el primero. Hay al menos dos formas en las que podría realizar la ingeniería de software. Lo que podría estar haciendo ahora es hacer que su entorno proporcione al agente algo como un “Espacio de acción” por adelantado que el agente recibe una vez y usa para siempre. Esto es efectivamente lo que hace la colección de entornos Open AI’s Gym. Sin embargo, en lugar de proporcionar un solo espacio de acción, haga que proporcione una función de espacio de acción. Esta función recibiría una observación y luego devolvería un espacio de acción para esa observación. Si normalmente tiene un espacio de acción discreto definido por un conjunto de enteros, en algunas observaciones esta función puede devolver un espacio que incluye las acciones 1, 2, 3 y 4, y tal vez en otros devuelva un espacio que incluya solo 1, 3 y 4 (indicando que la acción 2 no está disponible).
La otra forma de hacerlo es proporcionar un espacio y una función “disponible”. El espacio es solo el espacio de acción completo habitual (por ejemplo, incluye las acciones 1, 2, 3, 4). La función disponible recibe tanto una observación como una acción y devuelve un valor booleano que indica si esa acción se puede seleccionar o no. En este enfoque, el agente puede simplemente seleccionar una acción y luego consultar si realmente puede usarla o no antes de ejecutarla, manejando cualquier lógica después del hecho. Este enfoque es un poco más engorroso, pero una razón por la que es posible que desee utilizarlo es si tiene un espacio de acción infinito (por ejemplo, continuo), es posible que no pueda enumerar todas las acciones disponibles por adelantado y, en su lugar, tenga que verificar cualquier acciones individualmente.
- ¿Podrían usarse las redes neuronales para criar un perro al estilo de un campeón?
- Como estudiar sobre robot
- ¿Tienes miedo de la automatización y los robots que toman tu trabajo?
- ¿Cuáles son todas las referencias de Inteligencia Artificial en Ex Machina?
- ¿Aprendería AI más sobre los humanos analizando Quora en lugar de las redes sociales como Facebook o Twitter?
Para lo que vale, ambos enfoques para proporcionar información de condición previa de acción se utilizan en la biblioteca BURLAP RL.
Ahora consideremos el otro ángulo de cómo los algoritmos deberían incorporar la información de precondición, dado que se proporciona. Desearía poder darte una respuesta única, pero desafortunadamente, los enfoques dependen del algoritmo y, a veces, ¡hay más de una forma de hacerlo incluso para el mismo algoritmo! Sin embargo, describiré cómo podría hacerlo para dos clases comunes de algoritmos; métodos de función de acción y métodos de gradiente crítico / política del actor.
Consideremos primero cómo incorporarlo en métodos basados en la función de acción (p. Ej., Q-learning, SARSA y sus variantes) con acciones discretas y cuando se sigue una política de exploración como épsilon codicioso. En el lado de selección de acciones, debe filtrar los valores Q al conjunto de las acciones disponibles en la observación actual. Luego, tome el argumento max de ese conjunto filtrado o seleccione al azar de ese conjunto filtrado. En el lado del aprendizaje, cuando actualiza el valor Q para una acción seleccionada, si está usando algo como Q-learning, cuando realiza el operador máximo de los valores Q para el siguiente estado, en su lugar aplique el operador máximo sobre el conjunto filtrado para las acciones disponibles en el siguiente estado. ¡Eso es!
Para los métodos de gradiente de crítico / política del actor, necesitará algo un poco diferente. Asumamos nuevamente un conjunto de acciones discretas. En estos métodos, está aprendiendo directamente una red de políticas que genera probabilidades de selección de acciones, en cuyo caso lo que realmente necesita hacer es incorporar de alguna manera en la red de políticas las condiciones previas de acción. Afortunadamente, para acciones discretas, hay una forma bastante directa de hacerlo. Para acciones discretas, comience con lo que normalmente haría y haga que la salida de la red genere una distribución de probabilidad sobre todas las acciones posibles (a menudo haciendo que tenga una capa de red softmax en la parte superior). Sin embargo, esta distribución de probabilidad ya no será la distribución final. En su lugar, le aplicaremos una capa más. Esta capa realizará una operación de “activación normalizada”. Lo que haremos primero será multiplicar la distribución de probabilidad por un vector de activación binario con una dimensionalidad igual al número de acciones. En el vector de compuerta, cada elemento es un 1 si esa acción está disponible en el estado actual, y 0 si no está disponible. La consecuencia de esta multiplicación es que solo tendrá valores distintos de cero para las acciones disponibles. Sin embargo, no hemos terminado, porque el resultado de nuestra red de políticas debe ser una distribución de probabilidad adecuada. Por lo tanto, queremos normalizar estos valores para que sumen uno. Podemos hacerlo dividiendo cada elemento por la suma de la salida cerrada. Es decir,
[matemáticas] \ pi = \ frac {\ hat {\ pi} \ times G} {sum (\ hat {\ pi} \ times G)} [/ math]
donde [math] \ hat {\ pi} [/ math] es la distribución de probabilidad previa que la red genera en todo el espacio de acción, [math] G [/ math] es el vector de activación binario que define qué acciones están disponibles, [math ] sum [/ math] suma todos los elementos de un vector y [math] \ times [/ math] realiza una multiplicación por elementos en dos vectores. Naturalmente, crearía G cada paso en función de las acciones disponibles y lo introduciría junto con la observación a la red de políticas.
¡Ahora el resultado final será una distribución de probabilidad sobre acciones que nunca selecciona acciones que no están disponibles en el estado actual y puede usar algoritmos de gradiente de crítico / política de actor sobre esta salida como lo haría normalmente!