Main Content

rlSimulinkEnv

Simulink에서 구현된 동적 모델을 사용하여 강화 학습 환경 만들기

설명

rlSimulinkEnv 함수는 Simulink® 모델에서 강화 학습 환경 객체를 만듭니다. 환경 객체는 인터페이스로 동작하기 때문에 sim 또는 train을 호출하면 이 함수에서 다시 Simulink 모델을 호출하여 에이전트의 경험을 생성합니다.

예제

env = rlSimulinkEnv(mdl,agentBlocks)는 Simulink 모델 mdl에 대한 강화 학습 환경 객체 env를 생성합니다. agentBlocksmdl에 있는 하나 이상의 강화 학습 에이전트 블록에 대한 경로를 포함합니다. 이 구문을 사용하는 경우 각 에이전트 블록은 이미 MATLAB® 작업 공간에 있는 agent 객체를 참조해야 합니다.

예제

env = rlSimulinkEnv(mdl,agentBlocks,obsInfo,actInfo)는 모델 mdl에 대한 강화 학습 환경 객체 env를 만듭니다. 두 셀형 배열 obsInfoactInfomdl의 각 에이전트 블록에 대한 관측값 사양과 행동 사양을 포함해야 하며, 이때 순서는 agentBlocks에 나타나는 것과 일치해야 합니다.

env = rlSimulinkEnv(___,'UseFastRestart',fastRestartToggle)은 강화 학습 환경 객체 env를 만들고, 추가적으로 빠른 재시작을 활성화합니다. 이 구문은 위에 열거된 구문에 나와 있는 입력 인수 다음에 사용하십시오.

예제

모두 축소

Simulink 환경 만들기 및 에이전트 훈련시키기 예제에서 훈련된 에이전트와 해당 Simulink 모델을 사용하여 Simulink 환경을 만듭니다.

MATLAB® 작업 공간에 에이전트를 불러옵니다.

load rlWaterTankDDPGAgent

RL Agent 블록이 포함된 rlwatertank 모델의 환경을 만듭니다. 블록에 사용되는 에이전트가 이미 작업 공간에 있으므로 환경을 만들 때 관측값 사양과 행동 사양을 전달할 필요가 없습니다.

env = rlSimulinkEnv('rlwatertank','rlwatertank/RL Agent')
env = 
SimulinkEnvWithAgent with properties:

           Model : rlwatertank
      AgentBlock : rlwatertank/RL Agent
        ResetFcn : []
  UseFastRestart : on

2개 샘플 시간에 대해 짧은 시뮬레이션을 수행하여 환경을 검증합니다.

validateEnvironment(env)

이제 trainsim을 각각 사용하여 환경 내에서 에이전트를 훈련시키고 시뮬레이션할 수 있습니다.

이 예제에서는 Simulink 모델 rlSimplePendulumModel이 있다고 가정해 보겠습니다. 이 모델은 처음에 아래쪽을 향해 매달려 있는 마찰 없는 단순 진자입니다.

모델을 엽니다.

mdl = 'rlSimplePendulumModel';
open_system(mdl)

관측값과 행동 정보에 대해 각각 rlNumericSpecrlFiniteSetSpec 객체를 만듭니다.

관측값은 각도의 사인, 코사인 및 시간 도함수에 해당하는 3개의 신호를 포함하는 벡터입니다.

obsInfo = rlNumericSpec([3 1]) 
obsInfo = 
  rlNumericSpec with properties:

     LowerLimit: -Inf
     UpperLimit: Inf
           Name: [0×0 string]
    Description: [0×0 string]
      Dimension: [3 1]
       DataType: "double"

행동은 토크를 표현하는 스칼라이며 -2Nm, 0Nm, 2Nm의 3개 값 중 하나일 수 있습니다.

actInfo = rlFiniteSetSpec([-2 0 2])
actInfo = 
  rlFiniteSetSpec with properties:

       Elements: [3×1 double]
           Name: [0×0 string]
    Description: [0×0 string]
      Dimension: [1 1]
       DataType: "double"

점 표기법을 사용하여 rlNumericSpecrlFiniteSetSpec 객체에 대한 속성값을 할당할 수 있습니다.

obsInfo.Name = 'observations';
actInfo.Name = 'torque';

에이전트 블록 경로 정보를 할당하고, 이전 단계에서 추출된 정보를 사용하여 Simulink 모델에 대한 강화 학습 환경을 만듭니다.

agentBlk = [mdl '/RL Agent'];
env = rlSimulinkEnv(mdl,agentBlk,obsInfo,actInfo)
env = 
SimulinkEnvWithAgent with properties:

           Model : rlSimplePendulumModel
      AgentBlock : rlSimplePendulumModel/RL Agent
        ResetFcn : []
  UseFastRestart : on

점 표기법을 사용하여 재설정 함수를 포함할 수도 있습니다. 이 예제에서는 모델 작업 공간에서 theta0을 임의로 초기화합니다.

env.ResetFcn = @(in) setVariable(in,'theta0',randn,'Workspace',mdl)
env = 
SimulinkEnvWithAgent with properties:

           Model : rlSimplePendulumModel
      AgentBlock : rlSimplePendulumModel/RL Agent
        ResetFcn : @(in)setVariable(in,'theta0',randn,'Workspace',mdl)
  UseFastRestart : on

예제 여러 개의 에이전트가 협업해서 작업을 수행하도록 훈련시키기의 Simulink 모델에 대한 환경을 만듭니다.

MATLAB 작업 공간에서 에이전트를 불러옵니다.

load rlCollaborativeTaskAgents

두 에이전트 블록을 갖는 rlCollaborativeTask 모델의 환경을 만듭니다. 두 블록(agentAagentB)에 사용되는 에이전트가 이미 작업 공간에 있으므로 환경을 만들 때 관측값 사양과 행동 사양을 전달할 필요가 없습니다.

env = rlSimulinkEnv( ...
    'rlCollaborativeTask', ...
    ["rlCollaborativeTask/Agent A","rlCollaborativeTask/Agent B"])
env = 
SimulinkEnvWithAgent with properties:

           Model : rlCollaborativeTask
      AgentBlock : [
                     rlCollaborativeTask/Agent A
                     rlCollaborativeTask/Agent B
                   ]
        ResetFcn : []
  UseFastRestart : on

이제 환경 내에서 sim 또는 train을 각각 사용하여 에이전트를 시뮬레이션하거나 훈련시킬 수 있습니다.

입력 인수

모두 축소

Simulink 모델 이름으로, string형 또는 문자형 벡터로 지정됩니다. 모델은 적어도 하나의 RL Agent 블록을 포함해야 합니다.

에이전트 블록 경로로, string형, 문자형 벡터 또는 string형 배열로 지정됩니다.

mdl에 한 개의 RL Agent 블록이 포함된 경우 agentBlocks를 블록 경로를 포함하는 string형 또는 문자형 벡터로 지정하십시오.

mdl에 여러 개의 RL Agent 블록이 포함된 경우 agentBlocks를 각 요소에 하나의 에이전트 블록의 경로가 포함된 string형 배열로 지정하십시오.

mdlagentBlocks에 경로가 포함되지 않은 RL Agent 블록을 포함할 수 있습니다. 이러한 에이전트 블록은 환경의 일부로 동작하면서 현재 정책을 기반으로 행동을 선택합니다. sim 또는 train을 호출했을 때 이러한 에이전트의 경험은 반환되지 않으며 정책이 업데이트되지 않습니다.

MATLAB 환경에는 다중 에이전트 시뮬레이션이 지원되지 않습니다.

에이전트 블록은 모델 참조의 내부에 있을 수 있습니다. 강화 학습을 위해 에이전트 블록을 구성하는 방법에 대한 자세한 내용은 RL Agent 항목을 참조하십시오.

관측값 정보로, 사양 객체, 사양 객체로 구성된 배열 또는 셀형 배열로 지정됩니다.

mdl에 한 개의 에이전트 블록이 포함된 경우, obsInforlNumericSpec 객체나 rlFiniteSetSpec 객체, 또는 이러한 객체가 혼합된 배열로 지정하십시오.

mdl에 여러 개의 에이전트 블록이 포함된 경우 obsInfo를 셀형 배열로 지정하십시오. 여기서 각 셀에는 agentBlocks에서 대응하는 블록의 사양 객체 또는 사양 객체로 구성된 배열이 포함됩니다.

자세한 내용은 getObservationInfo 항목을 참조하십시오.

행동 정보로, 사양 객체 또는 셀형 배열로 지정됩니다.

mdl에 한 개의 에이전트 블록이 포함된 경우, actInforlNumericSpec 객체나 rlFiniteSetSpec 객체로 지정하십시오.

mdl에 여러 개의 에이전트 블록이 포함된 경우 actInfo를 셀형 배열로 지정하십시오. 여기서 각 셀에는 agentBlocks에서 대응하는 블록의 사양 객체가 포함됩니다.

자세한 내용은 getActionInfo 항목을 참조하십시오.

빠른 재시작을 켜거나 끄는 옵션으로, 'on' 또는 'off'로 지정됩니다. 빠른 재시작을 사용하면 매번 모델을 컴파일하거나 시뮬레이션을 종료하지 않고도 반복 시뮬레이션을 수행할 수 있습니다.

빠른 재시작에 대한 자세한 내용은 How Fast Restart Improves Iterative Simulations (Simulink) 항목을 참조하십시오.

출력 인수

모두 축소

강화 학습 환경으로, SimulinkEnvWithAgent 객체로 반환됩니다.

강화 학습 환경에 대한 자세한 내용은 Simulink 강화 학습 환경 만들기 항목을 참조하십시오.

버전 내역

R2019a에 개발됨