MATLAB Aprendizaje por refuerzo de combate (8) entrenando a múltiples agentes para realizar tareas colaborativas

Capacite a múltiples agentes para realizar tareas colaborativas

Este ejemplo muestra cómo configurar la formación de varios agentes en el entorno de Simulink®. En este ejemplo, entrenó a dos agentes para realizar la tarea de mover objetos juntos.

Inserte la descripción de la imagen aquí
En este ejemplo, el entorno es una superficie bidimensional sin fricción que contiene elementos representados por círculos . El objeto objetivo C está representado por un círculo azul con un radio de 2 m , y los robots A ( rojo ) y B ( verde ) están representados por círculos más pequeños con un radio de 1 m. El robot intenta mover el objeto C fuera del círculo con un radio de 8 m a través de la fuerza de colisión. Todos los elementos del entorno tienen masa y obedecen las leyes de movimiento de Newton. Además, la fuerza de contacto entre el elemento y el límite ambiental se modela como un sistema amortiguador de resorte y masa. Los elementos pueden moverse en la superficie aplicando fuerzas externas en las direcciones X e Y. No hay movimiento en tres dimensiones y se conserva la energía total del sistema.

Cree el conjunto de parámetros necesario para este ejemplo.

rlCollaborativeTaskParams

Abra el modelo de Simulink.

mdl = "rlCollaborativeTask";
open_system(mdl)

Inserte la descripción de la imagen aquí
Para este entorno:

  1. El rango del espacio bidimensional en las direcciones X e Y es de –12 ma 12 m.

  2. Los valores de rigidez y amortiguación del resorte de contacto son 100 N / my 0,1 N / m / s, respectivamente.

  3. El agente tiene los mismos resultados de observación para la posición, la velocidad y el valor de acción del paso de tiempo anterior de A, B y C.

  4. Cuando el objeto C se mueve fuera del círculo, la simulación termina.

  5. En cada paso de tiempo, el agente recibirá las siguientes recompensas:

Inserte la descripción de la imagen aquí

Aquí:

  1. r A r_A rlaY r B r_BrBEstas son las recompensas recibidas por el agente A y el agente B, respectivamente.
  2. rglobal r_ {global} rg l o b un lEs una recompensa de equipo.Cuando el objeto C está cerca del límite del anillo, ambos agentes obtendrán esta recompensa.
  3. rlocal, A r_ {local, A} rl o c a l , Arlocal, B r_ {local, B}rl o c a l , BEs la penalización local recibida por el agente A y el agente B. La penalización se basa en la distancia entre el agente A y el agente B y el objeto C y el tamaño de la acción del paso de tiempo anterior.
  4. d C d_C DCEs la distancia del objeto C al centro del anillo.
  5. d AC d_ {AC} DA CY d BC d_ {BC}DB CEstas son las distancias entre el agente A y el objeto C, y entre el agente B y el objeto C.
  6. u A u_A tulaSuma u B u_BtuBEs el valor de acción del agente A y del agente B en el paso de tiempo anterior.

Este ejemplo utiliza un agente de optimización de políticas de extremo cercano (PPO) con un espacio operativo discreto. Para obtener más información sobre el agente PPO, consulte el agente de optimización de la estrategia de extremo cercano . El agente aplica una fuerza externa al robot, lo que provoca el movimiento. En cada paso de tiempo, el agente elegirá la acción que desea realizar u A, B = [FX, FY] u_ {A, B} = [F_X, F_Y]tuA , B=[ FX,FY] , DondeFX, FY F_X, F_YFX,FYEs una de las siguientes dos fuerzas externas.
Inserte la descripción de la imagen aquí

Crea el medio ambiente

Para crear un entorno de agentes múltiples, utilice una matriz de cadenas para especificar la ruta del bloque del agente. Además, utilice matrices de celdas para especificar objetos de observación y acción especificados. El orden de los objetos canónicos en la matriz de celdas debe coincidir con el orden especificado en la matriz de ruta del bloque. Cuando un agente está disponible en el espacio de trabajo de MATLAB cuando se crea el entorno, las matrices de especificación de observación y operación son opcionales. Para obtener más información sobre cómo crear un entorno de agentes múltiples, consulte rlSimulinkEnv .

Cree la especificación de E / S del entorno. En este ejemplo, los agentes son homogéneos y tienen las mismas especificaciones de E / S.

% Number of observations
numObs = 16;

% Number of actions
numAct = 2;

% Maximum value of externally applied force (N)
maxF = 1.0;

% I/O specifications for each agent
oinfo = rlNumericSpec([numObs,1]);
ainfo = rlFiniteSetSpec({
    
    
    [-maxF -maxF]
    [-maxF  0   ]
    [-maxF  maxF]
    [ 0    -maxF]
    [ 0     0   ]
    [ 0     maxF]
    [ maxF -maxF]
    [ maxF  0   ]
    [ maxF  maxF]});
oinfo.Name = 'observations';
ainfo.Name = 'forces';

Crear interfaz de entorno Simulink

blks = ["rlCollaborativeTask/Agent A", "rlCollaborativeTask/Agent B"];
obsInfos = {
    
    oinfo,oinfo};
actInfos = {
    
    ainfo,ainfo};
env = rlSimulinkEnv(mdl,blks,obsInfos,actInfos);

Especifique la función de reinicio del entorno. La función de reinicio resetRobots asegura que el robot comience desde una posición inicial aleatoria al comienzo de cada episodio.

env.ResetFcn = @(in) resetRobots(in,RA,RB,RC,boundaryR);

Crea un agente

Los agentes de PPO confían en los agentes de los actores y comentaristas para aprender la mejor estrategia. En este ejemplo, el agente mantiene un aproximador de funciones basado en redes neuronales para actores y comentaristas.

Crea una red neuronal y una representación de comentaristas. La salida de la red del revisor es la función de valor de estado V (s) V (s) del estado sV s

% Reset the random seed to improve reproducibility
rng(0)

% Critic networks
criticNetwork = [...
    featureInputLayer(oinfo.Dimension(1),'Normalization','none','Name','observation')
    fullyConnectedLayer(128,'Name','CriticFC1','WeightsInitializer','he')
    reluLayer('Name','CriticRelu1')
    fullyConnectedLayer(64,'Name','CriticFC2','WeightsInitializer','he')
    reluLayer('Name','CriticRelu2')
    fullyConnectedLayer(32,'Name','CriticFC3','WeightsInitializer','he')
    reluLayer('Name','CriticRelu3')
    fullyConnectedLayer(1,'Name','CriticOutput')];

% Critic representations
criticOpts = rlRepresentationOptions('LearnRate',1e-4);
criticA = rlValueRepresentation(criticNetwork,oinfo,'Observation',{
    
    'observation'},criticOpts);
criticB = rlValueRepresentation(criticNetwork,oinfo,'Observation',{
    
    'observation'},criticOpts);

La salida de la red de actores es la probabilidad π (a ∣ s) π (a | s) de tomar cada posible par de acciones en un cierto estado sπ ( una s ) . Crear redes neuronales y representaciones de actores.

% Actor networks
actorNetwork = [...
    featureInputLayer(oinfo.Dimension(1),'Normalization','none','Name','observation')
    fullyConnectedLayer(128,'Name','ActorFC1','WeightsInitializer','he')
    reluLayer('Name','ActorRelu1')
    fullyConnectedLayer(64,'Name','ActorFC2','WeightsInitializer','he')
    reluLayer('Name','ActorRelu2')
    fullyConnectedLayer(32,'Name','ActorFC3','WeightsInitializer','he')
    reluLayer('Name','ActorRelu3')
    fullyConnectedLayer(numel(ainfo.Elements),'Name','Action')
    softmaxLayer('Name','SM')];

% Actor representations
actorOpts = rlRepresentationOptions('LearnRate',1e-4);
actorA = rlStochasticActorRepresentation(actorNetwork,oinfo,ainfo,...
    'Observation',{
    
    'observation'},actorOpts);
actorB = rlStochasticActorRepresentation(actorNetwork,oinfo,ainfo,...
    'Observation',{
    
    'observation'},actorOpts);

Crea un agente. Ambos agentes usan las mismas opciones.

agentOptions = rlPPOAgentOptions(...
    'ExperienceHorizon',256,...
    'ClipFactor',0.125,...
    'EntropyLossWeight',0.001,...
    'MiniBatchSize',64,...
    'NumEpoch',3,...
    'AdvantageEstimateMethod','gae',...
    'GAEFactor',0.95,...
    'SampleTime',Ts,...
    'DiscountFactor',0.9995);
agentA = rlPPOAgent(actorA,criticA,agentOptions);
agentB = rlPPOAgent(actorB,criticB,agentOptions);

Durante el entrenamiento, el agente recopila experiencia hasta que alcanza el rango de experiencia de 256 pasos o el episodio termina, y luego se entrena a partir de un pequeño lote de 64 experiencias. Este ejemplo utiliza un factor limitante de función objetivo de 0,125 para mejorar la estabilidad del entrenamiento y un factor de descuento de 0,9995 para fomentar las recompensas a largo plazo.

Agente de formación

Especifique las siguientes opciones de capacitación para capacitar al agente.

  1. Entrena hasta 1000 episodios, y cada episodio dura hasta 5000 pasos de tiempo.

  2. Cuando la recompensa promedio del agente por más de 100 veces consecutivas sea -10 o más, deje de entrenar al agente.

maxEpisodes = 1000;
maxSteps = 5e3;
trainOpts = rlTrainingOptions(...
    'MaxEpisodes',maxEpisodes,...
    'MaxStepsPerEpisode',maxSteps,...
    'ScoreAveragingWindowLength',100,...
    'Plots','training-progress',...
    'StopTrainingCriteria','AverageReward',...
    'StopTrainingValue',-10);

Para capacitar a varios agentes, especifique una matriz de agentes para la función de capacitación . El orden de los agentes en la matriz debe coincidir con el orden de las rutas de bloqueo del agente especificado durante la creación del entorno. Al hacerlo, se asegura de que el objeto de agente esté vinculado a la interfaz de E / S correspondiente en el entorno. La formación de estos agentes puede tardar varias horas en completarse, según la potencia informática disponible.

El archivo MAT rlCollaborativeTaskAgents contiene un conjunto de agentes entrenados previamente. Puede cargar el archivo y ver el desempeño del agente. Para capacitar al agente usted mismo, configure doTraining en verdadero .

doTraining = false;
if doTraining
    stats = train([agentA, agentB],env,trainOpts);
else
    load('rlCollaborativeTaskAgents.mat');
end

La siguiente figura muestra una captura de pantalla del progreso del entrenamiento. Debido a la aleatoriedad del proceso de entrenamiento, es posible que obtenga resultados diferentes.
Inserte la descripción de la imagen aquí

Simulación de agentes

Un agente capacitado en un entorno simulado.

simOptions = rlSimulationOptions('MaxSteps',maxSteps);
exp = sim(env,[agentA agentB],simOptions);

Inserte la descripción de la imagen aquí
Para obtener más información sobre la simulación de agentes, consulte rlSimulationOptions y sim .

Supongo que te gusta

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