이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.
SimulinkEnvWithAgent
Simulink에서 구현된 동적 모델을 사용하는 강화 학습 환경
설명
생성
SimulinkEnvWithAgent
객체를 만들려면 다음 함수 중 하나를 사용하십시오.
rlSimulinkEnv
— 적어도 하나의 RL Agent 블록을 가진 Simulink 모델을 사용하여 환경을 생성합니다.createIntegratedEnv
— 참조 모델을 강화 학습 환경으로 사용합니다.rlPredefinedEnv
— 미리 정의된 강화 학습 환경을 만듭니다.
속성
Model
— Simulink 모델 이름
string형 | 문자형 벡터
Simulink 모델 이름으로, string형 또는 문자형 벡터로 지정됩니다. 지정된 모델은 RL Agent 블록을 하나 이상 포함해야 합니다.
AgentBlock
— 에이전트 블록 경로
string형 | string형 배열
에이전트 블록 경로로, string형 또는 string형 배열로 지정됩니다.
Model
에 훈련을 위한 한 개의 RL Agent 블록이 포함된 경우 AgentBlock
은 블록 경로를 포함하는 string형입니다.
Model
에 훈련을 위한 여러 개의 RL Agent 블록이 포함된 경우 AgentBlock
은 각 요소에 하나의 에이전트 블록의 경로가 포함된 string형 배열입니다.
Model
은 AgentBlock
에 경로가 포함되지 않은 RL Agent 블록을 포함할 수 있습니다. 이러한 에이전트 블록은 환경의 일부로 동작하고 현재 정책을 기반으로 행동을 선택합니다. sim
또는 train
을 호출했을 때 이러한 에이전트의 경험은 반환되지 않으며 정책이 업데이트되지 않습니다.
에이전트 블록은 모델 참조의 내부에 있을 수 있습니다. 강화 학습을 위해 에이전트 블록을 구성하는 방법에 대한 자세한 내용은 RL Agent 항목을 참조하십시오.
ResetFcn
— 환경에 대한 재설정 동작
함수 핸들 | 익명 함수 핸들
환경에 대한 재설정 동작으로, 함수 핸들 또는 익명 함수 핸들로 지정됩니다. 이 함수는 하나의 Simulink.SimulationInput
입력 인수와 하나의 Simulink.SimulationInput
출력 인수를 가져야 합니다.
재설정 함수는 Simulink 환경의 초기 상태를 설정합니다. 예를 들어, 각 훈련 에피소드가 매번 다른 초기 조건에서 시작하도록 특정 블록 상태를 무작위로 할당하는 재설정 함수를 만들 수 있습니다.
MATLAB® 경로에 기존 재설정 함수 myResetFunction
이 있는 경우 그 함수에 대한 핸들을 사용하여 ResetFcn
을 설정하십시오.
env.ResetFcn = @(in)myResetFunction(in);
재설정 동작이 간단한 경우 익명 함수 핸들을 사용하여 동작을 구현할 수 있습니다. 예를 들어 다음 코드는 변수 x0
을 난수 값으로 설정합니다.
env.ResetFcn = @(in) setVariable(in,'x0',rand());
sim
함수는 각 시뮬레이션이 시작될 때 재설정 함수를 호출하여 환경을 재설정하고, train
함수는 각 훈련 에피소드가 시작될 때 재설정 함수를 호출합니다.
UseFastRestart
— 빠른 재시작을 켜거나 끄는 옵션
"on"
(디폴트 값) | "off"
빠른 재시작을 켜거나 끄는 옵션으로, "on"
또는 "off"
로 지정됩니다. 빠른 재시작을 사용하면 매번 모델을 컴파일하거나 시뮬레이션을 종료하지 않고도 반복 시뮬레이션을 수행할 수 있습니다.
빠른 재시작에 대한 자세한 내용은 How Fast Restart Improves Iterative Simulations (Simulink) 항목을 참조하십시오.
객체 함수
train | Train reinforcement learning agents within a specified environment |
sim | Simulate trained reinforcement learning agents within specified environment |
getObservationInfo | 강화 학습 환경, 에이전트 또는 경험 버퍼에서 관측값 데이터 사양 가져오기 |
getActionInfo | 강화 학습 환경, 에이전트 또는 경험 버퍼에서 행동 데이터 사양 가져오기 |
예제
작업 공간에 있는 에이전트를 사용하여 Simulink 환경 만들기
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)
이제 train
과 sim
을 각각 사용하여 환경 내에서 에이전트를 훈련시키고 시뮬레이션할 수 있습니다.
Simulink 모델에 대한 강화 학습 환경 만들기
이 예제에서는 Simulink® 모델 rlSimplePendulumModel
이 있다고 가정해 보겠습니다. 이 모델은 처음에 아래쪽을 향해 매달려 있는 마찰 없는 단순 진자입니다.
모델을 엽니다.
mdl = "rlSimplePendulumModel";
open_system(mdl)
관측값과 행동 정보에 대해 각각 rlNumericSpec
및 rlFiniteSetSpec
객체를 만듭니다.
관측값은 각도의 사인, 코사인 및 시간 도함수에 해당하는 3개의 신호를 포함하는 벡터입니다.
obsInfo = rlNumericSpec([3 1])
obsInfo = rlNumericSpec with properties: LowerLimit: -Inf UpperLimit: Inf Name: [0x0 string] Description: [0x0 string] Dimension: [3 1] DataType: "double"
행동은 토크를 표현하는 스칼라이며 -2
Nm, 0
Nm, 2
Nm의 3개 값 중 하나일 수 있습니다.
actInfo = rlFiniteSetSpec([-2 0 2])
actInfo = rlFiniteSetSpec with properties: Elements: [3x1 double] Name: [0x0 string] Description: [0x0 string] Dimension: [1 1] DataType: "double"
점 표기법을 사용하여 rlNumericSpec
및 rlFiniteSetSpec
객체에 대한 속성값을 할당할 수 있습니다.
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 환경 만들기
예제 여러 개의 에이전트가 협업해서 작업을 수행하도록 훈련시키기의 Simulink 모델에 대한 환경을 만듭니다.
MATLAB 작업 공간에서 에이전트를 불러옵니다.
load rlCollaborativeTaskAgents
두 에이전트 블록을 갖는 rlCollaborativeTask
모델의 환경을 만듭니다. 두 블록(agentA
와 agentB
)에 사용되는 에이전트가 이미 작업 공간에 있으므로 환경을 만들 때 관측값 사양과 행동 사양을 전달할 필요가 없습니다.
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
을 각각 사용하여 에이전트를 시뮬레이션하거나 훈련시킬 수 있습니다.
연속 단진자 모델 환경 만들기
미리 정의된 "SimplePendulumModel-Continuous"
키워드를 사용하여 연속 단진자 모델 강화 학습 환경을 만듭니다.
env = rlPredefinedEnv("SimplePendulumModel-Continuous")
env = SimulinkEnvWithAgent with properties: Model : rlSimplePendulumModel AgentBlock : rlSimplePendulumModel/RL Agent ResetFcn : [] UseFastRestart : on
Simulink 모델로부터 환경 만들기
이 예제에서는 에이전트가 상호 작용하는 시스템을 구현하고 에이전트 블록을 갖지 않는 Simulink 모델에서 시작하여 createIntegratedEnv
를 사용하여 환경 객체를 만드는 방법을 보여줍니다. 이러한 시스템은 흔히 플랜트, 개루프 시스템 또는 기준 시스템이라고 하고, 에이전트를 포함하는 전체 (통합) 시스템은 흔히 폐루프 시스템이라고 합니다.
이 예제에서는 슬라이딩 로봇을 조종하도록 DDPG 에이전트 훈련시키기에 설명된 비행 로봇 모델을 기준 (개루프) 시스템으로 사용합니다.
비행 로봇 모델을 엽니다.
open_system("rlFlyingRobotEnv")
상태 변수와 샘플 시간을 초기화합니다.
% initial model state variables theta0 = 0; x0 = -15; y0 = 0; % sample time Ts = 0.4;
비행 로봇 모델을 포함하는 Simulink 모델 myIntegratedEnv
인데 폐루프에서 에이전트 블록에 연결되는 모델을 만듭니다. 이 함수는 훈련에 사용할 강화 학습 환경 객체 env
도 반환합니다.
env = createIntegratedEnv( ... "rlFlyingRobotEnv", ... "myIntegratedEn")
env = SimulinkEnvWithAgent with properties: Model : myIntegratedEn AgentBlock : myIntegratedEn/RL Agent ResetFcn : [] UseFastRestart : on
이 함수는 새로운 통합 모델의 RL Agent 블록에 대한 블록 경로뿐 아니라 참조 모델의 관측값 사양 및 행동 사양을 반환할 수도 있습니다.
[~,agentBlk,observationInfo,actionInfo] = ... createIntegratedEnv( ... "rlFlyingRobotEnv","myIntegratedEnv")
agentBlk = "myIntegratedEnv/RL Agent"
observationInfo = rlNumericSpec with properties: LowerLimit: -Inf UpperLimit: Inf Name: "observation" Description: [0x0 string] Dimension: [7 1] DataType: "double"
actionInfo = rlNumericSpec with properties: LowerLimit: -Inf UpperLimit: Inf Name: "action" Description: [0x0 string] Dimension: [2 1] DataType: "double"
블록 경로와 사양을 반환하면 observationInfo
와 actionInfo
의 설명, 제한값 또는 이름을 수정해야 하는 경우에 유용합니다. 사양을 수정한 후에 rlSimulinkEnv
함수를 사용하여 통합 모델 IntegratedEnv
로부터 환경을 만들 수 있습니다.
버전 내역
R2019a에 개발됨
참고 항목
함수
객체
블록
MATLAB 명령
다음 MATLAB 명령에 해당하는 링크를 클릭했습니다.
명령을 실행하려면 MATLAB 명령 창에 입력하십시오. 웹 브라우저는 MATLAB 명령을 지원하지 않습니다.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)