Slide 46
Slide 46 text
コードによる確認
46
class Gridworld:
def __init__(self, size=6, traps=[]):
self.size = size
self.traps = traps
self.start = (0, 0)
self.goal = (size-1, size-1)
self.states = [(x, y) for x in range(size) for y in range(size)]
self.actions = [(-1, 0), (0, -1), (1, 0), (0, 1)]
self.policy = {}
for s in self.states:
self.policy[(s, (-1, 0))] = 0
self.policy[(s, (0, -1))] = 0
self.policy[(s, (1, 0))] = 1/2
self.policy[(s, (0, 1))] = 1/2
self.value = {}
for s in self.states:
self.value[s] = 0
def move(self, s, a):
if s == self.goal:
return 0, s # Reward, Next state
s_new = (s[0] + a[0], s[1] + a[1])
if s_new not in self.states:
return 0, s # Reward, Next state
if s_new in self.traps:
return -1, self.start # Reward, Next state
return -1, s_new # Reward, Next state
行動ポリシー を Python
のディクショナリーとして定義
状態価値関数 を Python
のディクショナリーとして定義
今の場合は、確率的な状態変化を伴わない
環境なので、(確率 1 で得られる)
報酬 r と次の状態 s' を返却
終了状態は任意のアクションに対
して、報酬 0 と同じ状態を返す
環境を表すクラス 条件付き確率 に基づいて
報酬 r と次の状態 s' を返却