Main Content

이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.

RL Agent

강화 학습 에이전트

  • RL Agent block

라이브러리:
Reinforcement Learning Toolbox

설명

RL Agent 블록을 사용하여 Simulink®에서 강화 학습 에이전트를 시뮬레이션하고 훈련시킵니다. 이 블록을 MATLAB® 작업 공간 또는 데이터 사전에 저장된 에이전트(예: rlACAgent 또는 rlDDPGAgent 객체)와 연결합니다. 이 블록이 관측값과 계산된 보상을 받을 수 있도록 연결합니다. 예를 들어, rlSimplePendulumModel 모델의 블록 다이어그램이 다음과 같다고 가정하겠습니다.

RL Agent 블록의 observation 입력 포트는 진자의 순시각(instantaneous angle)과 각속도에서 도출되는 신호를 받습니다. reward 포트는 이 두 개의 동일한 값과 적용된 행동으로부터 계산된 보상을 받습니다. 이 시스템에 적합한 관측값과 보상 계산은 사용자가 구성합니다.

이 블록은 에이전트를 사용하여 사용자가 제공하는 관측값과 보상에 기반한 행동을 생성합니다. action 출력 포트를 사용자의 시스템에 들어가는 입력으로 적절하게 연결합니다. 예를 들어, rlSimplePendulumModel에서 action 출력 포트는 진자 시스템에 적용되는 토크입니다. 이 모델에 대한 자세한 내용은 진자가 위쪽으로 똑바로 서서 균형을 유지하도록 DQN 에이전트 훈련시키기 항목을 참조하십시오.

Simulink에서 강화 학습 에이전트를 훈련시키려면 Simulink 모델에서 환경을 생성하십시오. 그 다음, 에이전트를 만들고 구성하여 이 환경에 대해 훈련시킵니다. 자세한 내용은 Create Custom Simulink Environments 항목을 참조하십시오. 해당 환경을 사용하여 train을 호출하면 train은 모델을 시뮬레이션하고 이 블록과 연결된 에이전트를 업데이트합니다.

예제

포트

입력

모두 확장

이 포트는 환경으로부터 관측값 신호를 받습니다. 관측값 신호는 측정값이나 시스템의 순시 데이터를 나타냅니다. 관측값이 여러 개인 경우 Mux 블록을 사용하여 이 관측값들을 벡터 신호로 결합할 수 있습니다. 비가상 버스 신호를 사용하려면 bus2RLSpec 함수를 사용하십시오.

이 포트는 관측값 데이터에 기반하여 계산하는 보상 신호를 받습니다. 보상 신호는 에이전트를 훈련하는 동안 장기 보상의 기대값을 최대화하는 데 사용됩니다.

이 신호를 사용하여 훈련 에피소드를 종료하는 조건을 지정합니다. 에피소드를 종료하는 조건을 결정하려면 사용자의 시스템에 적합하게 논리를 구성해야 합니다. 한 응용 사례는 훈련이 잘 되는 에피소드를 종료하거나 잘 안되는 에피소드를 종료하는 것입니다. 예를 들어, 에이전트가 목표에 도달한 에피소드를 종료하거나 목표에서 지나치게 멀어진 에피소드를 종료할 수 있습니다.

이 신호를 사용하여 블록에 외부 행동을 전달합니다. 이 신호는 인간 전문가로부터 전달되는 제어 행동이 될 수 있으며, 안전 학습이나 모방 학습 응용 분야에서 사용될 수 있습니다. use external action 신호의 값이 1이면, RL Agent 블록은 action 출력 포트를 통해 external action 신호를 환경으로 전달합니다. 블록은 또한 외부 행동을 사용하여 결과 관측값과 보상을 기반으로 에이전트 정책을 업데이트합니다.

종속 관계

이 포트를 활성화하려면 외부 행동 입력 파라미터를 선택하십시오.

어떤 응용 사례에서는 환경에 적용되는 행동이 RL Agent 블록에서 출력되는 행동과 다를 수 있습니다. 예를 들어, Simulink 모델이 행동 출력 신호에 Saturation 블록을 포함할 수 있습니다.

이 경우 오프-폴리시 에이전트의 학습 결과를 개선하기 위해, 이 입력 포트를 활성화하고 실제 환경에 적용되는 실제 행동 신호를 하나의 샘플 시간만큼 지연하여 연결할 수 있습니다. 예제는 Custom Training Loop with Simulink Action Noise 항목을 참조하십시오.

참고

last action 포트는 오직 오프-폴리시(off-policy) 에이전트와 사용해야 합니다. 그렇지 않으면 훈련에서 예기치 않은 결과가 도출될 수 있습니다.

종속 관계

이 포트를 활성화하려면 마지막 행동 입력 파라미터를 선택하십시오.

이 신호를 사용하여 external action 신호를 환경으로 전달합니다.

use external action 신호의 값이 1이면, 블록은 external action 신호를 환경으로 전달합니다. 블록은 또한 외부 행동을 사용하여 에이전트 정책을 업데이트합니다.

use external action 신호의 값이 0이면, 블록은 external action 신호를 환경으로 전달하지 않으며 외부 행동을 사용하여 정책을 업데이트하지 않습니다. 그 대신, 블록으로부터 오는 행동은 에이전트 정책으로부터 오는 행동을 사용합니다.

종속 관계

이 포트를 활성화하려면 외부 행동 입력 파라미터를 선택하십시오.

출력

모두 확장

관측값과 보상 입력값에 기반하여 에이전트에 의해 계산되는 행동입니다. 이 포트를 환경의 입력에 연결하십시오. 비가상 버스 신호를 사용하려면 bus2RLSpec 함수를 사용하십시오.

참고

rlACAgent, rlPGAgent 또는 rlPPOAgent 같은 연속 행동-공간 에이전트(rlContinuousGaussianActor 객체를 사용하는 에이전트)는 행동 사양에 의해 설정된 제약 조건을 강제로 적용하지 않습니다. 이러한 경우에는 사용자가 행동 공간 제약 조건을 환경 내에 강제로 적용해야 합니다.

시뮬레이션하는 동안 누적된 보상 신호의 합입니다. 이 신호를 관측하거나 기록하여 시간에 따라 누적 보상이 어떻게 변화하는지 추적합니다.

종속 관계

이 포트를 활성화하려면 누적 보상 출력 파라미터를 선택하십시오.

파라미터

모두 확장

MATLAB 작업 공간이나 데이터 사전에 저장된 agent 객체의 이름을 입력합니다(예: rlACAgent 또는 rlDDPGAgent). agent 객체에 대한 내용은 강화 학습 에이전트 항목을 참조하십시오.

RL Agent 블록이 Triggered Subsystem (Simulink) 또는 Function-Call Subsystem (Simulink) 같은 조건부 실행 서브시스템 내에 있는 경우, 블록이 부모 서브시스템의 샘플 시간을 상속할 수 있도록 agent 객체의 샘플 시간을 -1로 지정해야 합니다.

프로그래밍 방식 사용

블록 파라미터: Agent
유형: string형, 문자형 벡터
디폴트 값: "agentObj"

generatePolicyBlock 블록 함수를 호출하여, Agent 객체에 지정된 에이전트에 대해 그리디 정책을 구현하는 Policy 블록을 생성합니다. 이 블록은 그리디 정책을 생성하기 위해 Policy 블록을 생성하기 전에 에이전트의 UseExplorationPolicy 속성을 false로 설정합니다.

생성된 블록은 새 Simulink 모델에 추가되고, 정책 데이터는 현재 작업 폴더의 MAT 파일에 저장됩니다.

이 파라미터를 선택하여 external actionuse external action 블록 입력 포트를 활성화합니다.

프로그래밍 방식 사용

블록 파라미터: ExternalActionAsInput
유형: string형, 문자형 벡터
값: "off" | "on"
디폴트 값: "off"

이 파라미터를 선택하여 last action 블록 입력 포트를 활성화합니다.

프로그래밍 방식 사용

블록 파라미터: ProvideLastAction
유형: string형, 문자형 벡터
값: "off" | "on"
디폴트 값: "off"

cumulative reward 블록 출력을 활성화하려면 이 파라미터를 선택합니다.

프로그래밍 방식 사용

블록 파라미터: ProvideCumRwd
유형: string형, 문자형 벡터
값: "off" | "on"
디폴트 값: "off"

관측값 데이터형을 적용하려면 이 파라미터를 선택합니다. 이 경우 observation 입력 포트에 연결된 신호의 데이터형이 에이전트의 ObservationInfo 속성에 있는 데이터형과 일치하지 않으면, 블록은 신호를 올바른 데이터형으로 형변환하려고 시도합니다. 데이터의 형변환이 가능하지 않으면 블록은 오류를 생성합니다.

엄격한 데이터형을 적용할 경우:

  • 블록이 올바른 데이터형을 갖는지 검증할 수 있습니다.

  • 다른 블록이 observation 포트에서 데이터형을 상속할 수 있습니다.

프로그래밍 방식 사용

블록 파라미터: UseStrictObservationDataTypes
유형: string형, 문자형 벡터
값: "off" | "on"
디폴트 값: "off"

버전 내역

R2019a에 개발됨