협업 작업을 수행하도록 여러 에이전트 교육
이 예제는 Simulink® 환경에서 다중 에이전트 교육을 설정하는 방법을 보여줍니다. 이 예에서는 개체를 함께 이동하는 작업을 수행하도록 두 명의 에이전트를 교육했습니다.
이 예에서 환경은 원으로 표시되는 요소를 포함하는 마찰없는 2 차원 표면입니다. 대상 물체 C는 반경 2m의 파란색 원으로 표시되고 로봇 A ( 빨간색 ) 및 B ( 녹색 )는 반경 1m의 작은 원으로 표시됩니다. 로봇은 충돌 력을 통해 반경 8m의 원 밖으로 물체 C를 이동하려고합니다. 환경의 모든 요소는 질량을 가지며 뉴턴의 운동 법칙을 따릅니다. 또한 요소와 환경 경계 사이의 접촉력은 스프링 및 질량 댐퍼 시스템으로 모델링됩니다. 요소는 X 및 Y 방향으로 외부 힘을 적용하여 표면에서 이동할 수 있습니다. 3 차원에서는 움직임이 없으며 시스템의 전체 에너지가 보존됩니다.
이 예제에 필요한 매개 변수 세트를 작성하십시오.
rlCollaborativeTaskParams
Simulink 모델을 엽니 다.
mdl = "rlCollaborativeTask";
open_system(mdl)
이 환경의 경우 :
-
X 및 Y 방향의 2 차원 공간 범위는 –12m에서 12m입니다.
-
접촉 스프링의 강성 및 감쇠 값은 각각 100N / m 및 0.1N / m / s입니다.
-
에이전트는 A, B, C의 이전 시간 단계의 위치, 속도 및 동작 값에 대해 동일한 관찰 결과를 가지고 있습니다.
-
개체 C가 원 밖으로 이동하면 시뮬레이션이 종료됩니다.
-
각 단계에서 에이전트는 다음과 같은 보상을받습니다.
여기:
- r A r_A 아르 자형A그리고 r B r_B아르 자형B에이전트 A와 에이전트 B가 각각받는 보상입니다.
- rglobal r_ {global} 아르 자형g의 패 O B 리터팀 보상으로, 오브젝트 C가 링 경계에 가까워지면 두 에이전트 모두이 보상을 받게됩니다.
- rlocal, A r_ {local, A} 아르 자형L O C L ,和rlocal, B r_ {local, B}아르 자형L O C L , B에이전트 A와 에이전트 B가받는 로컬 페널티입니다. 페널티는 에이전트 A와 에이전트 B, 오브젝트 C 사이의 거리와 이전 시간 단계의 액션 크기를 기반으로합니다.
- d C d_C 디C개체 C에서 링 중심까지의 거리입니다.
- d AC d_ {AC} 디C그리고 d BC d_ {BC}디B C에이전트 A와 개체 C 사이, 에이전트 B와 개체 C 사이의 거리입니다.
- u A u_A 유A화 u B u_B유B이전 시간 단계에서 에이전트 A와 에이전트 B의 작업 값입니다.
이 예에서는 개별 운영 공간이있는 근거리 정책 최적화 (PPO) 에이전트를 사용합니다. PPO 에이전트에 대한 자세한 내용은 근거리 전략 최적화 에이전트 를 참조하십시오 . 에이전트는 로봇에 외력을 가하여 움직임을 유발합니다. 각 단계에서 에이전트는 수행 할 작업을 선택합니다. u A, B = [FX, FY] u_ {A, B} = [F_X, F_Y]유, B=[ F엑스,에프과] , 여기서FX, FY F_X, F_Y에프엑스,에프과다음 두 가지 외력 중 하나입니다.
환경 만들기
다중 에이전트 환경을 만들려면 문자열 배열을 사용하여 에이전트의 블록 경로를 지정합니다. 또한 셀형 배열을 사용하여 관찰 및 동작 지정 객체를 지정합니다. 셀형 배열에서 표준 객체의 순서는 블록 경로 배열에 지정된 순서와 일치해야합니다. 환경이 생성 될 때 MATLAB 작업 공간에서 에이전트를 사용할 수있는 경우 관찰 및 작업 사양 배열은 선택 사항입니다. 다중 에이전트 환경 만들기에 대한 자세한 내용은 rlSimulinkEnv를 참조하십시오 .
환경의 I / O 사양을 만듭니다. 이 예에서 에이전트는 동종이며 I / O 사양이 동일합니다.
% 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';
Simulink 환경 인터페이스 생성
blks = ["rlCollaborativeTask/Agent A", "rlCollaborativeTask/Agent B"];
obsInfos = {
oinfo,oinfo};
actInfos = {
ainfo,ainfo};
env = rlSimulinkEnv(mdl,blks,obsInfos,actInfos);
환경의 재설정 기능을 지정하십시오. 재설정 기능 resetRobots는 로봇이 각 에피소드의 시작 부분에서 임의의 초기 위치에서 시작하도록합니다.
env.ResetFcn = @(in) resetRobots(in,RA,RB,RC,boundaryR);
에이전트 만들기
PPO 에이전트는 최고의 전략을 배우기 위해 배우 및 해설자의 에이전트에 의존합니다. 이 예에서 에이전트는 배우와 댓글 작성자를 위해 신경망 기반 함수 근사치를 유지합니다.
신경망과 댓글 작성자의 표현을 만듭니다. 검토 자 네트워크의 출력은 상태 s 의 상태 값 함수 V (s) V (s) 입니다.V (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);
행위자 네트워크의 출력은 특정 상태 s에서 가능한 각 행동 쌍을 취할 확률 π (a ∣ s) π (a | s)입니다.π ( a ∣ s ) . 신경망과 행위자의 표현을 만듭니다.
% 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);
에이전트를 만듭니다. 두 에이전트 모두 동일한 옵션을 사용합니다.
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);
훈련 중에 에이전트는 256 단계의 경험 범위에 도달하거나 에피소드가 종료 될 때까지 경험을 수집 한 다음 64 개의 경험으로 구성된 작은 배치에서 훈련합니다. 이 예제에서는 훈련 안정성을 향상시키기 위해 0.125의 목적 함수 제한 계수를 사용하고 장기 보상을 장려하기 위해 0.9995의 할인 계수를 사용합니다.
교육 에이전트
에이전트를 훈련하려면 다음 훈련 옵션을 지정하십시오.
-
최대 1000 개의 에피소드를 훈련하고 각 에피소드는 최대 5000 개의 시간 단계로 진행됩니다.
-
연속 100 회 이상 에이전트의 평균 보상이 -10 이상이면 에이전트 교육을 중지합니다.
maxEpisodes = 1000;
maxSteps = 5e3;
trainOpts = rlTrainingOptions(...
'MaxEpisodes',maxEpisodes,...
'MaxStepsPerEpisode',maxSteps,...
'ScoreAveragingWindowLength',100,...
'Plots','training-progress',...
'StopTrainingCriteria','AverageReward',...
'StopTrainingValue',-10);
여러 에이전트를 훈련 시키려면 훈련 함수에 대한 에이전트 배열을 지정하십시오 . 어레이의 에이전트 순서는 환경 생성 중에 지정된 에이전트 블록 경로의 순서와 일치해야합니다. 이렇게하면 에이전트 개체가 환경의 해당 I / O 인터페이스에 연결됩니다. 이러한 에이전트 교육은 사용 가능한 컴퓨팅 성능에 따라 완료하는 데 몇 시간이 걸릴 수 있습니다.
MAT 파일 rlCollaborativeTaskAgents에는 사전 훈련 된 에이전트 세트가 포함되어 있습니다. 파일을로드하고 에이전트의 성능을 볼 수 있습니다. 에이전트를 직접 훈련하려면 doTraining을 true로 설정하십시오 .
doTraining = false;
if doTraining
stats = train([agentA, agentB],env,trainOpts);
else
load('rlCollaborativeTaskAgents.mat');
end
아래 그림은 교육 진행 상황의 스크린 샷을 보여줍니다. 훈련 과정의 무작위성으로 인해 다른 결과를 얻을 수 있습니다.
에이전트 시뮬레이션
시뮬레이션 된 환경에서 훈련 된 에이전트.
simOptions = rlSimulationOptions('MaxSteps',maxSteps);
exp = sim(env,[agentA agentB],simOptions);
에이전트 시뮬레이션에 대한 자세한 내용은 rlSimulationOptions 및 sim을 참조하십시오 .