Main Content

createGridWorld

강화 학습을 위한 2차원 그리드 월드 만들기

설명

예제

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이 주어집니다.

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

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

          GridSize: [5 5]
      CurrentState: "[1,1]"
            States: [25x1 string]
           Actions: [4x1 string]
                 T: [25x25x4 double]
                 R: [25x25x4 double]
    ObstacleStates: [0x1 string]
    TerminalStates: [0x1 string]

이제 초기 상태, 종료 상태, 장애물 상태를 설정합니다.

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: [1x1 rl.env.GridWorld]
    ResetFcn: []

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

plot(env)

입력 인수

모두 축소

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

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

행동 이름으로, 'Standard' 또는 'Kings'로 지정됩니다. moves가 다음과 같이 설정될 때, 행동은 다음과 같습니다.

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

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

출력 인수

모두 축소

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

그리드 월드의 크기로, [m,n] 벡터로 지정됩니다.

현재 상태의 이름으로, string형으로 지정됩니다.

상태 이름으로, 길이가 m*n인 string형 벡터로 지정됩니다.

행동 이름으로, string형 벡터로 지정됩니다. Actions 벡터의 길이는 moves 인수에 의해 결정됩니다.

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

  • moves'Standard'로 지정된 경우 4.

  • moves'Kings'로 지정된 경우 8.

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

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

T는 다음과 같습니다.

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

  • moves'Kings'로 지정된 경우 K×K×8 배열.

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

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

R은 다음과 같습니다.

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

  • moves'Kings'로 지정된 경우 K×K×8 배열.

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

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

버전 내역

R2019a에 개발됨