Caja de herramientas de aprendizaje por refuerzo de MATLAB (1): uso de Q-learning y SARSA en un entorno de cuadrícula

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.

Inserte la descripción de la imagen aquí

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.
Inserte la descripción de la imagen aquí

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)

Inserte la descripción de la imagen aquí
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

Inserte la descripción de la imagen aquí

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)

Inserte la descripción de la imagen aquí
El agente de SARSA encuentra la misma solución de mundo de cuadrícula que el agente de aprendizaje Q.

Supongo que te gusta

Origin blog.csdn.net/wangyifan123456zz/article/details/109395054
Recomendado
Clasificación