스토리지에 강화 학습을 적용했다. 스토리지 상황은 2개 열 * 3개 행 = 6개 셀을 가지고 있다. 처음 셀(X1/Y2, X2/Y2, X3/Y2)에만 대차를 넣고 뺄 수 있다.
스토리지7에서 스토리지3, 4, 5으로 대차를 이동할 때 putX라 하고, 스토리지 3, 4, 5에서 스토리지 6으로 대차를 이동할 때 getX라 했다. 스토리지 7에서 스토리지 6으로 바로 가는 조건을 getX3Y3로 했다.
종료 조건은 스토리지 6에 대차 종류가 A이고 스토리 7에 대차가 없어야(종류 V) 한다. 이럴 경우 보상으로 100점을 얻고 종료한다. 비정상 종료는 모든 셀에 대차가 없는 경우 벌점 -100점을 받고, 매 스탭마다 80점씩 까이도록 했다. 셀에 대차가 있는데 put을 해버리면 벌점 100을 받고 종료 되도록 했다.
비교적 간단한 네트웍을 설정한 후 사골국(200,000회 정도? 학습)을 우려냈다. 한 에피소드가 끝나면 각 셀에 랜덤으로 대차 종류를 A, B, V(vacant)로 초기화 했다. 탐험 확률은 0.8에서 0.03까지 까이도록 했고, 0.03에 도달하면 더 안까이도록 유지되도록 했다. Q-table에 기반한 학습을 하고, 층이 3개정도네트웍으로 Approximation 했다.
여기 저리 많이 참조했다.
각 경우를 보면..
X2, Y2 셀 typeA를 call하고 X3, Y3셀 대차를 puy으로 밀어 넣어야 하는데, 공간이 없다. agent는 X3 열 셀을 모두 비워 A 대차를 X1, Y3로 옮긴 후 X3, Y3 대차를 3행으로 밀어 넣었다. 일단 agent가 바보 아닌 걸로…
episode 65920을 보면 X3, Y3 대차를 바로 call 하면 되는데, 셀에 있는 typeA 대차를 사용했다. 그리고 X3, Y3 대차를 put으로 비워진 셀에 넣었다.
에피소드 65924를 보면 X2, Y2번 셀 대차 typeA를 먼저 빼워 공간을 비운 뒤, X3, Y3 대차를 put했다. 내가 했어도 이 방법대로 했다.
episode 65944는 셀에 있는 대차 typeA를 사용하지 않고, X3, Y3 대차 typeA를 바로 돌려 사용하여 100점을 받았다. 정답.
안쪽에 typeA 대차가 쳐박혀 있다면, getX3 삽질만 하다 성공하지 못한다. 이 상태에 빠지면 헤어나올 수 없다. 구석에 쳐 박혀 있다면 이 케이스를 고정하여 학습을 시키면 몇 만회 정도 걸려 앞에 걸리는 대차를 치워 typeA를 빼 내도록 한다. 랜덤으로 초기화 시키면 대차가 안쪽에 들어가 있는 경우가 너무 드물어 학습을 잘 할 수 없다. 틀리는 문제만 집중적으로 풀도록 환경을 설정 해줘야 할 듯 하다.
업데이트.
한 번 학습을 잘못하면 구렁텅이로 빠져 들어 매 10,000회마다 탐험확율 epsilon을 0.8로 초기화 시켰다. typeA 대차가 앞에 있다면 한번의 동작으로 쉽게 점수를 얻을 수 있으나,typeA 대차가 뒤쪽에 있다면 성공할 확율이 낮아져 어느 방법이 좋은지 agent가 알 수 없다. 어려운 문제를 더 많이 풀도록 reset을 조정했다.
에피소드 38897을 보면 typeA가 구석에 있다. typeA를 빼기 위해서는 앞에 있는 typeV를 빼내야 하는데, X3/Y3셀에 typeV 가 있어 에피소드가 종료된다. 더 좋은 방법은 X1/Y2 셀 typeV를 바로 빼내어 벌점을 적게 받고 에피소드를 종료시키는 방법이 있다. 왠지 모르겠는데, 학습되지 않았다.
에피소드 38898을 보면 typeA 대차가 안쪽을 들어가 있다. X1/Y1 또는 X3/Y1 중 하나를 빼내야 하는데, agent는 X1/Y1을 선택했다. 전에 탐험 확율을 낮췄을 경우에는 항상 getX3을 실행했는데, 이번에는 getX1을 선택했다. X1 행을 모두 비운 뒤, X3/Y3 대차를 putX1으로 처리했다. 내가 했어도 비슷하게 했다.