주요 콘텐츠

createGridWorld

2차원 그리드 월드 객체 만들기

설명

그리드 월드는 2차원 그리드로, 여기서 각 위치는 에이전트가 점유할 수 있는 상태입니다. 에이전트가 시도할 수 있는 행동은 한 위치에서 다음 위치로의 이동을 나타냅니다. 많은 강화 학습 예제에서 강화 학습을 소개하는 용도로 그리드 월드를 사용합니다. createGridWorld 함수를 사용하여 지정된 크기와 이동 유형을 갖는 GridWorld 객체를 만들 수 있습니다. 그런 다음 객체의 속성 중 일부를 수정하고 이 객체를 rlMDPEnv에 전달하여 에이전트가 상호 작용할 수 있는 환경을 만들 수 있습니다. 자세한 내용은 Create Custom Grid World Environments 항목을 참조하십시오.

GW = createGridWorld(m,n)은 디폴트 행동 ['N';'S';'E';'W']를 갖는 크기 m×n의 그리드 월드 GW를 만듭니다.

예제

GW = createGridWorld(m,n,moves)moves로 지정된 행동을 갖는 크기 m×n의 그리드 월드 GW를 만듭니다.

예제

모두 축소

이 예제에서는 다음 규칙을 갖는 5×5 그리드 월드가 있다고 가정해 보겠습니다.

  1. 테두리로 경계가 지어진 5×5 그리드 월드는 4가지 가능한 행동, 즉 북쪽 = 1, 남쪽 = 2, 동쪽 = 3, 서쪽 = 4를 가집니다.

  2. 에이전트는 셀 [2,1](두 번째 행, 첫 번째 열 - 아래 그림에서 빨간색 원으로 표시됨)부터 시작합니다.

  3. 에이전트가 셀 [5,5](파란색 셀)의 종료 상태에 도달하면 보상으로 +10을 받습니다.

  4. 환경에는 셀 [2,4]에서 셀 [4,4]로의 특별한 점프가 포함되어 있으며, 보상으로 +5(파란색 화살표)가 주어집니다.

  5. 에이전트는 셀 [3,3], [3,4], [3,5], [4,3](검은색 셀)에서 장애물로 막혀 있습니다.

  6. 다른 모든 행동에서는 보상으로 –1이 주어집니다.

Basic five-by-five grid world with agent (indicated by a red circle) positioned on the top left corner, terminal location (indicated by a light blue square) in the bottom right corner, and four obstacle squares, in black, in the middle.

먼저, createGridWorld 함수를 사용하여 GridWorld 객체를 만듭니다.

GW = createGridWorld(5,5)
GW = 
  GridWorld with properties:

                GridSize: [5 5]
            CurrentState: "[1,1]"
                  States: [25×1 string]
                 Actions: [4×1 string]
                       T: [25×25×4 double]
                       R: [25×25×4 double]
          ObstacleStates: [0×1 string]
          TerminalStates: [0×1 string]
    ProbabilityTolerance: 8.8818e-16

그런 다음 초기 상태, 종료 상태, 장애물 상태를 설정합니다.

GW.CurrentState = "[2,1]";
GW.TerminalStates = "[5,5]";
GW.ObstacleStates = ["[3,3]";"[3,4]";"[3,5]";"[4,3]"];

장애물 상태에 대한 상태 천이 행렬을 업데이트하고, 장애물 상태에 대해 점프 규칙을 설정합니다.

updateStateTranstionForObstacles(GW)
GW.T(state2idx(GW,"[2,4]"),:,:) = 0;
GW.T(state2idx(GW,"[2,4]"),state2idx(GW,"[4,4]"),:) = 1;

그런 다음, 보상 천이 행렬로 보상을 정의합니다.

nS = numel(GW.States);
nA = numel(GW.Actions);
GW.R = -1*ones(nS,nS,nA);
GW.R(state2idx(GW,"[2,4]"),state2idx(GW,"[4,4]"),:) = 5;
GW.R(:,state2idx(GW,GW.TerminalStates),:) = 10;

이제 rlMDPEnvGridWorld 객체 GW를 사용하여 그리드 월드 환경을 만듭니다.

env = rlMDPEnv(GW)
env = 
  rlMDPEnv with properties:

       Model: [1×1 rl.env.GridWorld]
    ResetFcn: []

plot 함수를 사용하여 그리드 월드 환경을 시각화할 수 있습니다.

plot(env)

Figure contains an axes object. The hidden axes object contains 7 objects of type line, patch.

getActionInfo 함수와 getObservationInfo 함수를 사용하여 환경에서 행동 사양 객체와 관측값 사양 객체를 추출합니다.

actInfo = getActionInfo(env)
actInfo = 
  rlFiniteSetSpec with properties:

       Elements: [4×1 double]
           Name: "MDP Actions"
    Description: [0×0 string]
      Dimension: [1 1]
       DataType: "double"

obsInfo = getObservationInfo(env)
obsInfo = 
  rlFiniteSetSpec with properties:

       Elements: [25×1 double]
           Name: "MDP Observations"
    Description: [0×0 string]
      Dimension: [1 1]
       DataType: "double"

이제 행동 사양과 관측값 사양을 사용하여 환경에 대한 에이전트를 만든 다음 train 함수와 sim 함수를 사용하여 환경 내에서 에이전트를 훈련시키고 시뮬레이션할 수 있습니다.

입력 인수

모두 축소

그리드 월드 행 개수로, 양의 정수로 지정됩니다.

예: 5

그리드 월드 열 개수로, 양의 정수로 지정됩니다.

예: 5

행동 이름으로, "Standard" 또는 "Kings"로 지정됩니다.

  • moves"Standard"로 설정될 경우 행동은 ["N";"S";"E";"W"]입니다.

  • moves"Kings"로 설정될 경우 행동은 ["N";"S";"E";"W";"NE";"NW";"SE";"SW"]입니다.

예: "Kings"

출력 인수

모두 축소

2차원 그리드 월드로, 아래 나열된 속성을 갖는 GridWorld 객체로 반환됩니다. 자세한 내용은 Create Custom Grid World Environments 항목을 참조하십시오.

그리드 월드의 크기로, 행 벡터로 지정됩니다. 첫 번째 요소는 그리드 행의 개수인 m이고, 두 번째 요소는 그리드 열의 개수인 n입니다. 이 속성은 읽기 전용입니다.

예: GW.GridSize=[5 5]

현재 상태의 이름으로, string형으로 지정됩니다. 이 이름은 그리드에서 현재 에이전트 위치에 해당하며, string형이나 문자형 벡터(예: "[a,b]")로 지정됩니다.

이 속성에 대한 자세한 내용은 Create Custom Grid World Environments 항목의 CurrentState 속성을 참조하십시오.

예: GW.CurrentState="[2,3]"

상태 이름으로, 길이가 m*n인 string형 벡터로 지정됩니다. 각 상태 이름은 CurrentState에 표시된 대로 지정된 string형입니다. 이 속성은 읽기 전용입니다.

이 속성에 대한 자세한 내용은 Create Custom Grid World Environments 항목의 States 속성을 참조하십시오.

행동 이름으로, string형 벡터로 지정됩니다. 이 속성은 읽기 전용입니다.

Actions 벡터의 길이는 moves 인수에 의해 결정됩니다.

Actions는 다음 길이의 string형 벡터입니다.

  • moves"Standard"로 지정된 경우 4

  • moves"Kings"로 지정된 경우 8

이 속성에 대한 자세한 내용은 Create Custom Grid World Environments 항목의 Actions 속성을 참조하십시오.

상태 천이 행렬로, 3차원 배열로 지정됩니다. 여기서 각 페이지의 모든 행은 음이 아닌 숫자를 포함하며, 이 숫자의 합은 1이어야 합니다.

상태 천이 행렬 T는 에이전트가 행동 a를 수행하여 현재 상태 s에서 가능한 다음 상태 s'으로 이동할 가능성을 나타내는 확률 행렬입니다. T는 다음과 같이 지정됩니다.

T(s,s',a) = probability(s'|s,a)

여기서

  • moves"Standard"로 지정된 경우 TK×K×4 배열입니다. 여기서 K = m*n입니다.

  • moves"Kings"로 지정된 경우 TK×K×8 배열입니다.

그리드 월드 객체를 만들 때, 천이 행렬은 에이전트가 실행할 수 있는 4개 또는 8개 행동에 해당하는 표준 결정적 천이를 포함합니다.

이 속성에 대한 자세한 내용은 Create Custom Grid World Environments 항목의 T 속성을 참조하십시오.

보상 천이 행렬로, 3차원 배열로 지정됩니다. 이는 에이전트가 환경에서 행동을 수행한 후에 받는 보상의 양을 결정합니다. R의 크기와 형태는 상태 천이 행렬 T와 동일합니다. 보상 천이 행렬 R은 다음과 같이 지정됩니다.

r = R(s,s',a).

여기서

  • moves"Standard"로 지정된 경우 RK×K×4 배열입니다. 여기서 K = m*n입니다.

  • moves"Kings"로 지정된 경우 RK×K×8 배열입니다.

그리드 월드 객체를 만들 경우 보상 행렬은 0입니다.

이 속성에 대한 자세한 내용은 Create Custom Grid World Environments 항목의 R 속성을 참조하십시오.

그리드 월드에서 도달할 수 없는 상태 이름으로, string형 벡터로 지정됩니다.

이 속성에 대한 자세한 내용은 Create Custom Grid World Environments 항목의 ObstacleStates 속성을 참조하십시오.

예: GW.ObstacleStates = ["[3,3]";"[3,4]";"[3,5]";"[4,3]"];

그리드 월드의 종료 상태 이름으로, string형 벡터로 지정됩니다.

이 속성에 대한 자세한 내용은 Create Custom Grid World Environments 항목의 TerminalStates 속성을 참조하십시오.

예: GW.TerminalStates = "[5,5]";

버전 내역

R2019a에 개발됨