Caja de herramientas de aprendizaje por refuerzo de MATLAB (2) -capacitación del aprendizaje Q en el entorno MDP

Este ejemplo muestra cómo entrenar a un agente de Q-learning para resolver un entorno general de proceso de decisión de Markov (MDP).
Inserte la descripción de la imagen aquí
Aquí:

  1. Cada círculo representa un estado.

  2. En cada estado, hay una decisión que determina el ascenso o la caída.

  3. El agente comienza desde el estado 1.

  4. El agente recibe una recompensa igual a cada valor de transición en el gráfico.

  5. El objetivo del entrenamiento es obtener la mayor recompensa acumulada.

Crear un entorno de agente MDP

Cree un modelo MDP con ocho estados y dos acciones ("arriba" y "abajo")

MDP = createMDP(8,["up";"down"]);

Para modelar la transición de la figura anterior, modifique la matriz de transición de estado y la matriz de recompensa del MDP. Por defecto, estas matrices contienen ceros.
Especifique la transición de estado y la matriz de recompensas del MDP. Por ejemplo, en el siguiente comando:

1. Las dos primeras líneas especifican la transición del estado 1 al estado 2 tomando la acción 1 ("arriba") y proporcionan una recompensa de +3 por esta transición.

2. Las siguientes dos líneas especifican la transición del estado 1 al estado 3 tomando la acción 2 ("presionar") y especificando una recompensa de +1.

MDP.T(1,2,1) = 1;
MDP.R(1,2,1) = 3;
MDP.T(1,3,2) = 1;
MDP.R(1,3,2) = 1;

De manera similar, especifique las transiciones de estado y las recompensas para las reglas restantes del diagrama.

% State 2 transition and reward
MDP.T(2,4,1) = 1;
MDP.R(2,4,1) = 2;
MDP.T(2,5,2) = 1;
MDP.R(2,5,2) = 1;
% State 3 transition and reward
MDP.T(3,5,1) = 1;
MDP.R(3,5,1) = 2;
MDP.T(3,6,2) = 1;
MDP.R(3,6,2) = 4;
% State 4 transition and reward
MDP.T(4,7,1) = 1;
MDP.R(4,7,1) = 3;
MDP.T(4,8,2) = 1;
MDP.R(4,8,2) = 2;
% State 5 transition and reward
MDP.T(5,7,1) = 1;
MDP.R(5,7,1) = 1;
MDP.T(5,8,2) = 1;
MDP.R(5,8,2) = 9;
% State 6 transition and reward
MDP.T(6,7,1) = 1;
MDP.R(6,7,1) = 5;
MDP.T(6,8,2) = 1;
MDP.R(6,8,2) = 1;
% State 7 transition and reward
MDP.T(7,7,1) = 1;
MDP.R(7,7,1) = 0;
MDP.T(7,7,2) = 1;
MDP.R(7,7,2) = 0;
% State 8 transition and reward
MDP.T(8,8,1) = 1;
MDP.R(8,8,1) = 0;
MDP.T(8,8,2) = 1;
MDP.R(8,8,2) = 0;

Especifique el estado "s7" y "s8" como estado terminal del MDP.

MDP.TerminalStates = ["s7";"s8"];

Cree un entorno MDP de aprendizaje reforzado para este modelo de proceso.

env = rlMDPEnv(MDP);

Para especificar que el estado inicial del agente es siempre el estado 1, especifique una función de reinicio para volver al estado inicial del agente. Esta función se llamará al comienzo de cada entrenamiento y simulación. Cree un identificador de función anónimo con el estado inicial establecido en 1.

env.ResetFcn = @() 1;

Corrija la semilla del generador aleatorio para mejorar la repetibilidad.

rng(0)

Crear agente de aprendizaje Q

Para crear un agente de aprendizaje Q, primero use las especificaciones de observación y operación en el entorno MDP para crear una tabla Q. Establezca la tasa de aprendizaje indicada en 1.

obsInfo = getObservationInfo(env);
actInfo = getActionInfo(env);
qTable = rlTable(obsInfo, actInfo);
qRepresentation = rlQValueRepresentation(qTable, obsInfo, actInfo);
qRepresentation.Options.LearnRate = 1;

A continuación, use esta representación de tabla para crear un agente de aprendizaje Q y configurar la exploración ávida de épsilon.

agentOpts = rlQAgentOptions;
agentOpts.DiscountFactor = 1;
agentOpts.EpsilonGreedyExploration.Epsilon = 0.9;
agentOpts.EpsilonGreedyExploration.EpsilonDecay = 0.01;
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 veces y 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 = 13;
trainOpts.ScoreAveragingWindowLength = 30;

Utilice la función de tren para entrenar al agente. Esto 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 pretrained agent for the example.
    load('genericMDPQAgent.mat','qAgent');
end

Inserte la descripción de la imagen aquí

Verificar los resultados del aprendizaje de Q

Para verificar los resultados del entrenamiento, use la función de simulación para simular un agente en el entorno de entrenamiento. El agente encuentra con éxito el mejor camino que conduce a la recompensa acumulativa13.

Data = sim(qAgent,env);
cumulativeReward = sum(Data.Reward)

Recompensa acumulada = 13
Dado que el factor de descuento se establece en 1, el valor en la tabla Q del agente capacitado coincide con el rendimiento no descontado del entorno.

QTable = getLearnableParameters(getCritic(qAgent));
QTable{
    
    1}

Inserte la descripción de la imagen aquí

TrueTableValues = [13,12;5,10;11,9;3,2;1,9;5,1;0,0;0,0]

Inserte la descripción de la imagen aquí

Supongo que te gusta

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