주요 콘텐츠

사용자 지정 Simulink 환경 만들기

사용자 지정 Simulink® 환경을 만들려면 먼저 에이전트가 인식하는 세계를 나타내는 Simulink 환경 모델을 만듭니다. 이러한 시스템은 흔히 플랜트 시스템 또는 개루프 시스템이라고 하고, 에이전트와 환경 모두를 포함하는 전체 (통합) 시스템은 흔히 폐루프 시스템이라고 합니다.

환경 모델에는 입력 신호인 행동이 있어야 하며, 이는 (이산, 연속 또는 혼합 동특성을 통해) 다음 내부 상태와 출력값(예: 관측값, 보상, is-done 신호)에 영향을 미칩니다. is-done 신호는 에피소드의 종료를 나타내는 스칼라이며, 값이 true이면 시뮬레이션이 중지됩니다.

참고

강화 학습 환경에서는 일반적으로 현재 행동에서 현재 관측값으로의 관계가 엄격하게 인과적이라고 가정합니다. 즉, 현재 관측값이 현재 행동의 영향을 받지 않는다고 가정합니다(하지만 다음 상태는 일반적으로 영향을 받음). 다시 말해서, 현재 행동과 현재 관측값 사이에 직접 피드스루가 없어야 합니다.

참고

시간 t에서의 보상 신호는 시간 t-1에서의 관측값 출력값과 시간 t에서의 관측값 출력값 사이의 천이에 대응하는 신호여야 합니다.

관측값에 여러 채널이 포함된 경우 채널을 통해 전달되는 신호를 단일 관측값 버스로 그룹화하십시오. 마찬가지로 하이브리드 환경의 경우 행동은 이산(첫 번째) 행동 채널과 연속(두 번째) 행동 채널을 모두 포함하는 요소를 2개 가진 버스여야 합니다. 버스 신호에 대한 자세한 내용은 Simulink Bus Capabilities (Simulink) 항목을 참조하십시오.

사용자 지정 환경에서 보상 신호와 관측값 신호를 정의할 때의 주요 고려 사항은 Define Observation and Reward Signals in Custom Environments 항목을 참조하십시오.

환경을 표현하는 Simulink 모델을 만든 후에는 해당 모델에 RL Agent 블록을 추가해야 합니다. 자동으로 또는 수동으로 추가할 수 있습니다.

  • RL Agent 블록을 포함하고 Environment 블록에서 환경 모델을 참조하는 새로운 폐루프 Simulink 모델을 자동으로 만들려면 createIntegratedEnv를 사용하여 기존 환경 모델과, 에이전트를 포함하는 새롭게 생성할 폐루프 모델의 이름을 모두 지정합니다.

    환경 모델에서 행동, 관측값, is-done, 보상 포트의 이름을 입력 인수로 지정할 수 있습니다. 행동 또는 관측값 공간이 유한한 경우, 이들의 가능한 값을 지정할 수도 있습니다(그렇지 않으면 신호는 연속이라고 간주됨).

    이 함수는 에이전트의 블록 경로와 환경 관측값 및 행동 사양뿐만 아니라 환경 객체도 반환합니다. 모델 참조에 대한 자세한 내용은 Model Reference Behavior and Capabilities (Simulink) 항목을 참조하십시오.

  • 모델에 에이전트를 직접 추가하려면 강화 학습 Simulink 라이브러리에서 RL Agent 블록을 끌어서 놓습니다. 행동, 관측값, 보상, is-done 신호를 블록의 적절한 출력 포트 및 입력 포트에 연결합니다.

    MATLAB® 작업 공간에 아직 이 환경에 대한 에이전트 객체가 없는 경우 rlNumericSpec(연속 신호의 경우) 또는 rlFiniteSetSpec(이산 신호의 경우)를 사용하여 행동 및 관측값 신호에 대한 사양 객체를 만들어야 합니다. 버스 신호의 경우 bus2RLSpec를 사용하여 사양을 만듭니다.

    블록을 연결한 후 rlSimulinkEnv를 사용하여 환경 객체를 만들고 모델 파일 이름, 모델 내 RL Agent에 대한 블록 경로, 관측값 및 행동 채널에 대한 사양 객체를 각각 지정합니다. 에이전트 블록이 MATLAB 작업 공간에 있는 에이전트 객체를 이미 참조하는 경우 사양 객체를 입력 인수로 제공할 필요가 없습니다.

    예제는 물탱크 강화 학습 환경 모델 항목과 DDPG 에이전트를 사용하여 탱크의 수위 제어하기 항목을 참조하십시오.

rlSimulinkEnvcreateIntegratedEnv는 모두 사용자 지정 Simulink 환경을 SimulinkEnvWithAgent 객체로 반환합니다. 이 환경 객체는 인터페이스 역할을 하기 때문에 sim 또는 train을 호출하면 이러한 함수는 다시 이 객체와 연결된 (컴파일된) Simulink 모델을 호출하여 에이전트의 경험을 생성합니다. 이 객체를 사용하면 다른 환경과 동일한 방식으로 에이전트를 훈련하고 시뮬레이션할 수 있습니다.

참고

Simulink 환경 내에서 에이전트를 훈련시키거나 시뮬레이션하기 전에 RL Agent 블록이 의도된 샘플 시간에서 실행되도록 하려면 agent 객체의 SampleTime 속성을 적절히 설정하십시오.

다중 에이전트 Simulink 환경을 만들 수도 있습니다. 이렇게 하려면 먼저 각 에이전트마다 하나의 행동 입력값과 한 세트의 출력값(관측값, 보상, is-done)을 갖는 Simulink 모델을 만드십시오. 그런 다음 각 에이전트에 대해 에이전트 블록을 수동으로 추가하십시오. 블록을 연결한 후 rlSimulinkEnv를 사용하여 환경 객체를 만드십시오. 각 에이전트 블록이 MATLAB 작업 공간에 있는 agent 객체를 아직 참조하고 있지 않다면, 관측값 행동 사양 객체가 포함된 두 셀형 배열을 rlSimulinkEnv에 입력 인수로 각각 제공해야 합니다. 예제는 여러 개의 에이전트가 협업해서 작업을 수행하도록 훈련시키기 항목을 참조하십시오.

환경은 타사 기능을 포함할 수도 있습니다. 자세한 내용은 외부 툴의 컴포넌트 통합하기 (Simulink) 항목을 참조하십시오.

환경과 에이전트 사이의 대수 루프

(해를 구하지 못할 수 있는) 대수 루프를 방지하려면 행동에서 관측값 출력 신호로의 직접 피드스루(동일한 시간 스텝에서의 직접적인 종속성)를 피해야 합니다. 그 이유는 에이전트 블록의 Simulink 구현에서, 주어진 시간 스텝에서의 행동이 동일한 시간 스텝에서의 관측값에 의존하게 되기 때문입니다. 즉, 에이전트 블록이 관측값 입력으로부터 행동 출력으로의 직접 피드스루를 갖게 됩니다(출력 피드백 제어기와 유사함).

행동에서 관측값 출력 신호로의 직접 피드스루를 피한다는 것은, 강화 학습 환경의 마르코프 결정 과정으로의 표준 형식화가 현재 행동에서 현재 관측값으로의 엄격한 인과 관계를 뜻한다는 점과도 부합합니다. 마르코프 결정 과정에서는 현재 상태가 현재 행동의 영향을 받지 않는다고 가정하기 때문입니다(반면, 다음 상태는 일반적으로 현재 행동의 영향을 받음).

하지만 createIntegratedEnv를 사용하여 만든 모델의 경우 환경 블록은 참조된 서브시스템이라는 점에 유의하십시오. 일반적으로 참조된 서브시스템에서 대수 루프 발생 최소화 파라미터를 활성화화지 않는 경우, 그 참조된 서브시스템은 직접 피드스루 블록(행동에서 관측값까지의 경로 포함)으로 간주됩니다. 참조된 모델에 인위적 대수 루프에 참여하는 입력 포트로부터 출력 포트로 이어지는 직접 피드스루가 전혀 없는 경우, 이 파라미터를 활성화하면 해당 모델과 관련된 인위적 대수 루프를 제거할 수 있습니다.

일반적으로 에이전트 블록과 환경 블록 사이의 행동 신호에 Delay (Simulink) 블록이나 Memory (Simulink) 블록을 추가하면 대수 루프가 제거됩니다. 행동 지연을 추가할 경우 각 훈련 또는 시뮬레이션 에피소드의 시작 부분에서 호출되는 재설정 함수가 지연을 실현 가능한 값으로 초기화하는지 확인하십시오.

또는 환경 블록 다음의 모든 환경 출력 신호에 지연 블록을 추가할 수 있습니다. 그럴 경우 재설정 함수가 지연을 환경의 초기 상태와도 일치하는 실현 가능한 값으로 초기화하는지 확인하십시오.

참고

일반적으로 대수 루프의 해를 구하기 위해 지연을 추가할 경우 루프 동특성을 수정해야 하므로 매우 신중해야 합니다.

(단일 스텝 함수 대신) 별도의 상태 함수와 출력 함수를 사용하는 경우 개별 MATLAB Function (Simulink) 블록을 사용하여 이를 호출하고 지연을 사용하여 환경 상태를 표현할 수 있습니다. 이렇게 할 경우, 재설정 함수는 상태를 초기화하기만 하면 됩니다.

대수 루프와 이를 제거하는 방법에 대한 자세한 내용은 대수 루프 개념 (Simulink) 항목과 Remove Algebraic Loops (Simulink) 항목을 참조하십시오. Simulink에 구현된 강화 학습 루프에서 지연을 사용하는 것과 관련된 예제는 Create and Simulate Same Environment in Both MATLAB and Simulink 항목을 참조하십시오.

참고 항목

함수

객체

도움말 항목