Utilice Q-learning y SARSA en un entorno de red
caso de estudio
El entorno del mundo de la red tiene las siguientes configuraciones y reglas:
1. El mundo de la cuadrícula es de 5 x 5 y está delimitado por fronteras Hay cuatro acciones posibles (Norte = 1, Sur = 2, Este = 3, Oeste = 4).
2. El agente comienza en la celda [2,1] (segunda fila, primera columna).
3. Si el agente alcanza el estado final (azul) de la celda [5,5], el agente obtendrá una recompensa de +10.
4. El entorno contiene un salto especial de la celda [2,4] a la celda [4,4], y la recompensa es +5.
5. El agente está bloqueado por un obstáculo (cuadrícula negra).
6. Todas las demás acciones darán como resultado una recompensa de -1.
Crear un entorno mundial de cuadrícula
Crear un entorno mundial de cuadrícula básico
env = rlPredefinedEnv("BasicGridWorld");
Para especificar que el estado inicial del agente es siempre [2,1], cree una función de reinicio para devolver el número de estado del estado inicial del agente. Esta función se llamará al comienzo de cada entrenamiento y simulación. La numeración comienza desde la posición [1,1]. Cuando baje la primera columna y luego en cada columna subsiguiente, el número de estado aumentará. Por lo tanto, cree un identificador de función anónimo que establezca el estado inicial en 2.
env.ResetFcn = @() 2;
Corrija la semilla del generador aleatorio para mejorar la repetibilidad.
rng(0)
Crear agente de aprendizaje Q
Para crear un agente de Q-learning, primero use las especificaciones de observación y operación en el entorno del mundo de la cuadrícula para crear una tabla Q. Establezca la tasa de aprendizaje indicada en 1.
qTable = rlTable(getObservationInfo(env),getActionInfo(env));
qRepresentation = rlQValueRepresentation(qTable,getObservationInfo(env),getActionInfo(env));
qRepresentation.Options.LearnRate = 1;
A continuación, utilice esta tabla para representar la creación de un agente de aprendizaje Q y configure la exploración ávida de épsilon.
agentOpts = rlQAgentOptions;
agentOpts.EpsilonGreedyExploration.Epsilon = .04;
qAgent = rlQAgent(qRepresentation,agentOpts);
Agente de aprendizaje de Train Q
Para entrenar al agente, primero especifique las opciones de entrenamiento. Para este ejemplo, use las siguientes opciones:
1. El entrenamiento es de hasta 200 episodios. Especifique que cada episodio dura hasta 50 pasos de tiempo.
2. Cuando la recompensa acumulada promedio obtenida por el agente en 30 episodios consecutivos sea superior a 10, detenga el entrenamiento.
trainOpts = rlTrainingOptions;
trainOpts.MaxStepsPerEpisode = 50;
trainOpts.MaxEpisodes= 200;
trainOpts.StopTrainingCriteria = "AverageReward";
trainOpts.StopTrainingValue = 11;
trainOpts.ScoreAveragingWindowLength = 30;
Utilice esta función de tren para entrenar al agente de aprendizaje Q. La formación puede tardar unos minutos en completarse. Para ahorrar tiempo de ejecución de este ejemplo, cargue el agente previamente entrenado como falso configurando doTraining en. Para capacitar al agente usted mismo, configure doTraining en verdadero.
doTraining = false;
if doTraining
% Train the agent.
trainingStats = train(qAgent,env,trainOpts);
else
% Load the pretrained agent for the example.
load('basicGWQAgent.mat','qAgent')
end
La ventana "Administrador de escenarios" se abrirá y mostrará el progreso del entrenamiento.
Verificar los resultados del aprendizaje de Q
Para verificar los resultados del entrenamiento, simule al agente en el entorno de entrenamiento.
Antes de ejecutar la simulación, visualice el entorno y configure la visualización para realizar un seguimiento del estado del agente.
plot(env)
env.Model.Viewer.ShowTrace = true;
env.Model.Viewer.clearTrace;
Utilice la función de simulación para simular al agente en el entorno.
sim(qAgent,env)
El seguimiento del agente muestra que el agente ha encontrado con éxito el salto de la unidad [2,4] a la unidad [4,4].
Crear y capacitar agentes de SARSA
Para crear un agente de SARSA, use la misma representación de tabla Q y la misma configuración codiciosa de épsilon que el agente de aprendizaje Q.
agentOpts = rlSARSAAgentOptions;
agentOpts.EpsilonGreedyExploration.Epsilon = 0.04;
sarsaAgent = rlSARSAAgent(qRepresentation,agentOpts);
Utilice esta función de tren para capacitar a los agentes de SARSA. La formación puede tardar unos minutos en completarse. Para ahorrar tiempo de ejecución de este ejemplo, cargue el agente previamente entrenado como falso configurando doTraining en. Para capacitar al agente usted mismo, configure doTraining en verdadero.
doTraining = false;
if doTraining
% Train the agent.
trainingStats = train(sarsaAgent,env,trainOpts);
else
% Load the pretrained agent for the example.
load('basicGWSarsaAgent.mat','sarsaAgent')
end
Validar la formación SARSA
Para verificar los resultados del entrenamiento, simule al agente en el entorno de entrenamiento.
plot(env)
env.Model.Viewer.ShowTrace = true;
env.Model.Viewer.clearTrace;
Simular al agente en el entorno.
sim(sarsaAgent,env)
El agente de SARSA encuentra la misma solución de mundo de cuadrícula que el agente de aprendizaje Q.