이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.
슬라이딩 로봇을 조종하도록 DDPG 에이전트 훈련시키기
이 예제에서는 Simulink®에서 모델링된 로봇 슬라이딩의 궤적을 @D 평면에 대한 마찰 없이 생성하도록 DDPG(심층 결정적 정책 경사법) 에이전트를 훈련시키는 방법을 보여줍니다. DDPG 에이전트에 대한 자세한 내용은 DDPG(심층 결정적 정책 경사법) 에이전트 항목을 참조하십시오.
비행 로봇 모델
이 예제의 강화 학습 환경은 반경이 15m인 원 주위로 초기 조건이 무작위 할당되는 슬라이딩 로봇입니다. 로봇의 방향도 무작위로 할당됩니다. 이 로봇은 로봇을 추진시키고 방향을 조정하는 데 사용되는 두 개의 추력기를 몸체 측면에 장착하고 있습니다. 훈련 목표는 로봇을 초기 조건에서 동쪽을 향하는 원점으로 움직이는 것입니다.
모델을 엽니다.
mdl = "rlFlyingRobotEnv";
open_system(mdl)
초기 모델 상태 변수를 설정합니다.
theta0 = 0; x0 = -15; y0 = 0;
샘플 시간 Ts
와 시뮬레이션 지속 시간 Tf
를 정의합니다.
Ts = 0.4; Tf = 30;
이 모델의 경우 다음이 적용됩니다.
목표 방향은
0
rad(로봇이 동쪽을 향함)입니다.각 액추에이터의 추력 범위는 -1N~1N입니다.
환경에서 관측하는 값은 로봇의 위치와 방향(방향의 사인과 코사인), 속도 및 각속도입니다.
매 시간 스텝마다 제공되는 보상 는 다음과 같습니다.
여기서 각 요소는 다음과 같습니다.
는 x축 상의 로봇의 위치입니다.
는 y축 상의 로봇의 위치입니다.
는 로봇의 방향입니다.
은 왼쪽 추력기의 제어 노력입니다.
은 오른쪽 추력기의 제어 노력입니다.
은 로봇이 목표에 근접할 때 주어지는 보상입니다.
는 로봇이 x 또는 y 방향으로 20m를 벗어나서 구동할 때 주어지는 벌점입니다. 이면 시뮬레이션이 종료됩니다.
은 목표로부터의 거리와 제어 노력에 벌점을 적용하는 QR 벌점입니다.
통합 모델 만들기
FlyingRobotEnv
모델에 대해 에이전트를 훈련시키기 위해, createIntegratedEnv
함수를 사용하여 훈련 준비가 된 RL Agent 블록이 포함된 Simulink 모델을 자동으로 생성합니다.
integratedMdl = "IntegratedFlyingRobot"; [~,agentBlk,obsInfo,actInfo] = ... createIntegratedEnv(mdl,integratedMdl);
행동 및 관측값
환경 객체를 만들기 전에 관측값 사양과 행동 사양의 이름을 지정하고 추력 행동의 범위를 -1~1로 지정합니다.
이 환경의 관측값 벡터는 입니다. 환경 관측값 채널에 이름을 할당합니다.
obsInfo.Name = "observations";
이 환경의 행동 벡터는 입니다. 환경 행동 채널에 이름과 함께 상한과 하한도 할당합니다.
actInfo.Name = "thrusts";
actInfo.LowerLimit = -ones(prod(actInfo.Dimension),1);
actInfo.UpperLimit = ones(prod(actInfo.Dimension),1);
prod(obsInfo.Dimension)
과 prod(actInfo.Dimension)
은 행 벡터, 열 벡터 또는 행렬로 정렬되는지에 관계없이 각각 관측값 공간과 행동 공간의 차원 수를 반환합니다.
환경 객체 만들기
통합 Simulink 모델을 사용하여 환경 객체를 만듭니다.
env = rlSimulinkEnv( ... integratedMdl, ... agentBlk, ... obsInfo, ... actInfo);
재설정 함수
사용자 지정 재설정 함수를 만들어서 로봇에게 반경이 15m인 원을 따르도록 하는 초기 위치와 초기 방향을 무작위로 할당합니다. 재설정 함수에 대한 자세한 내용은 flyingRobotResetFcn
을 참조하십시오.
env.ResetFcn = @(in) flyingRobotResetFcn(in);
재현이 가능하도록 난수 생성기 시드값을 고정합니다.
rng(0)
DDPG 에이전트 만들기
DDPG 에이전트는 파라미터화된 Q-값 함수 근사기를 사용하여 정책의 값을 추정합니다. Q-값 함수 크리틱은 현재 관측값과 행동을 입력값으로 받고 single형 스칼라를 출력값(현재 관측값에 해당하는 상태로부터 행동을 받고 그 후 정책을 따를 때 추정되는 감가된 누적 장기 보상)으로 반환합니다.
크리틱 내에서 파라미터화된 Q-값 함수를 모델링하려면 두 개의 입력 계층(obsInfo
로 지정된 대로 관측값 채널에 대한 입력 계층 및 actInfo
로 지정된 대로 행동 채널에 대한 입력 계층)과 (스칼라 값을 반환하는) 하나의 출력 계층을 갖는 신경망을 사용하십시오.
각 신경망 경로를 layer 객체로 구성된 배열로 정의합니다. 각 경로의 입력 계층과 출력 계층에 이름을 할당합니다. 이러한 이름을 사용하면 경로를 연결한 다음 나중에 신경망 입력 계층 및 출력 계층을 적절한 환경 채널과 명시적으로 연결할 수 있습니다.
% Specify the number of outputs for the hidden layers. hiddenLayerSize = 100; % Define observation path layers observationPath = [ featureInputLayer( ... prod(obsInfo.Dimension),Name="obsInLyr") fullyConnectedLayer(hiddenLayerSize) reluLayer fullyConnectedLayer(hiddenLayerSize) additionLayer(2,Name="add") reluLayer fullyConnectedLayer(hiddenLayerSize) reluLayer fullyConnectedLayer(1,Name="fc4") ]; % Define action path layers actionPath = [ featureInputLayer( ... prod(actInfo.Dimension), ... Name="actInLyr") fullyConnectedLayer(hiddenLayerSize,Name="fc5") ]; % Create the layer graph. criticNetwork = layerGraph(observationPath); criticNetwork = addLayers(criticNetwork,actionPath); % Connect actionPath to observationPath. criticNetwork = connectLayers(criticNetwork,"fc5","add/in2"); % Create dlnetwork from layer graph criticNetwork = dlnetwork(criticNetwork); % Display the number of parameters summary(criticNetwork)
Initialized: true Number of learnables: 21.4k Inputs: 1 'obsInLyr' 7 features 2 'actInLyr' 2 features
criticNetwork
, 환경 사양, 그리고 관측값 채널 및 행동 채널에 연결할 신경망 입력 계층의 이름을 사용하여 크리틱을 만듭니다. 자세한 내용은 rlQValueFunction
항목을 참조하십시오.
critic = rlQValueFunction(criticNetwork,obsInfo,actInfo,... ObservationInputNames="obsInLyr",ActionInputNames="actInLyr");
DDPG 에이전트는 연속 행동 공간에 대해 연속 결정적 액터가 학습한 파라미터화된 결정적 정책을 사용합니다. 이 액터는 현재 관측값을 입력값으로 받고 관측값의 결정적 함수인 행동을 출력값으로 반환합니다.
액터 내에서 파라미터화된 정책을 모델링하려면 (obsInfo
로 지정된 대로 환경 관측값 채널의 내용을 받는) 하나의 입력 계층과 (actInfo
로 지정된 대로 환경 행동 채널에 행동을 반환하는) 하나의 출력 계층을 갖는 신경망을 사용하십시오.
신경망을 layer 객체로 구성된 배열로 정의합니다.
actorNetwork = [ featureInputLayer(prod(obsInfo.Dimension)) fullyConnectedLayer(hiddenLayerSize) reluLayer fullyConnectedLayer(hiddenLayerSize) reluLayer fullyConnectedLayer(hiddenLayerSize) reluLayer fullyConnectedLayer(prod(actInfo.Dimension)) tanhLayer ];
layer 객체로 구성된 배열을 dlnetwork
객체로 변환하고 파라미터 개수를 표시합니다.
actorNetwork = dlnetwork(actorNetwork); summary(actorNetwork)
Initialized: true Number of learnables: 21.2k Inputs: 1 'input' 7 features
actorNetwork
를 사용하여 액터를 정의하고 행동 채널과 관측값 채널의 사양을 정의합니다. 자세한 내용은 rlContinuousDeterministicActor
항목을 참조하십시오.
actor = rlContinuousDeterministicActor(actorNetwork,obsInfo,actInfo);
rlOptimizerOptions
를 사용하여 크리틱과 액터에 대한 옵션을 지정합니다.
criticOptions = rlOptimizerOptions(LearnRate=1e-03,GradientThreshold=1); actorOptions = rlOptimizerOptions(LearnRate=1e-04,GradientThreshold=1);
rlDDPGAgentOptions
를 사용하여 DDPG 에이전트 옵션을 지정하고 액터와 크리틱의 훈련 옵션을 포함시킵니다.
agentOptions = rlDDPGAgentOptions(... SampleTime=Ts,... ActorOptimizerOptions=actorOptions,... CriticOptimizerOptions=criticOptions,... ExperienceBufferLength=1e6 ,... MiniBatchSize=256); agentOptions.NoiseOptions.Variance = 1e-1; agentOptions.NoiseOptions.VarianceDecayRate = 1e-6;
그런 다음 액터, 크리틱 및 에이전트 옵션을 사용하여 에이전트를 만듭니다. 자세한 내용은 rlDDPGAgent
항목을 참조하십시오.
agent = rlDDPGAgent(actor,critic,agentOptions);
또는 먼저 에이전트를 만든 다음, 에이전트의 option 객체에 액세스하고 점 표기법을 사용하여 옵션을 수정할 수 있습니다.
에이전트 훈련시키기
에이전트를 훈련시키려면 먼저 훈련 옵션을 지정하십시오. 이 예제에서는 다음 옵션을 사용합니다.
최대
20000
개의 에피소드에 대해 각각 훈련을 실행하며, 각 에피소드마다 최대ceil(Tf/Ts)
개의 시간 스텝이 지속됩니다.에피소드 관리자 대화 상자에 훈련 진행 상황을 표시하고(
Plots
옵션 설정) 명령줄 표시를 비활성화합니다(Verbose
옵션을false
로 설정).연속 10개의 에피소드 동안 에이전트가 받은 평균 누적 보상이
415
보다 크면 훈련을 중지합니다. 이 시점에서 에이전트는 슬라이딩 로봇을 목표 위치로 움직일 수 있습니다.누적 보상이
415
보다 큰 각 에피소드마다 에이전트의 복사본을 저장합니다.
자세한 내용은 rlTrainingOptions
항목을 참조하십시오.
maxepisodes = 20000; maxsteps = ceil(Tf/Ts); trainingOptions = rlTrainingOptions(... MaxEpisodes=maxepisodes,... MaxStepsPerEpisode=maxsteps,... StopOnError="on",... Verbose=false,... Plots="training-progress",... StopTrainingCriteria="AverageReward",... StopTrainingValue=415,... ScoreAveragingWindowLength=10,... SaveAgentCriteria="EpisodeReward",... SaveAgentValue=415);
train
함수를 사용하여 에이전트를 훈련시킵니다. 훈련은 완료하는 데 몇 시간이 소요되는 계산 집약적인 절차입니다. 이 예제를 실행하는 동안 시간을 절약하려면 doTraining
을 false
로 설정하여 사전 훈련된 에이전트를 불러오십시오. 에이전트를 직접 훈련시키려면 doTraining
을 true
로 설정하십시오.
doTraining = false; if doTraining % Train the agent. trainingStats = train(agent,env,trainingOptions); else % Load the pretrained agent for the example. load("FlyingRobotDDPG.mat","agent") end
DDPG 에이전트 시뮬레이션하기
훈련된 에이전트의 성능을 검증하려면 환경 내에서 에이전트를 시뮬레이션하십시오. 에이전트 시뮬레이션에 대한 자세한 내용은 rlSimulationOptions
항목과 sim
항목을 참조하십시오.
simOptions = rlSimulationOptions(MaxSteps=maxsteps); experience = sim(env,agent,simOptions);
참고 항목
함수
객체
rlDDPGAgent
|rlDDPGAgentOptions
|rlQValueFunction
|rlContinuousDeterministicActor
|rlTrainingOptions
|rlSimulationOptions
|rlOptimizerOptions
블록
관련 예제
- 카트-폴 시스템이 위쪽으로 똑바로 서서 균형을 유지하도록 DDPG 에이전트 훈련시키기
- Train DDPG Agent to Swing Up and Balance Pendulum with Image Observation
- Train PPO Agent for a Lander Vehicle
- Trajectory Optimization and Control of Flying Robot Using Nonlinear MPC (Model Predictive Control Toolbox)