def setUp(self): primitivePolicies = { 'up': (0, 1), 'down': (0, -1), 'right': (1, 0), 'left': (-1, 0) } stateSet = [(i, j) for i in range(2) for j in range(2)] getNextState = targetCode.getNextState primitiveSPrime = targetCode.GetPrimitiveSPrime( primitivePolicies, stateSet, getNextState) optionTerminations = { "LL": (0, 0), "UL": (0, 1), "LR": (1, 0), "UR": (1, 1) } landmarkSPrime = targetCode.GetLandmarkSPrime(optionTerminations) optionSPrime = { 'up': primitiveSPrime, 'down': primitiveSPrime, 'left': primitiveSPrime, 'right': primitiveSPrime, 'LL': landmarkSPrime, 'UL': landmarkSPrime, 'LR': landmarkSPrime, 'UR': landmarkSPrime } self.transitionFunction = targetCode.TransitionFunction(optionSPrime)
def setUp(self): primitivePolicies = { 'up': (0, 1), 'down': (0, -1), 'right': (1, 0), 'left': (-1, 0) } stateSet = [(i, j) for i in range(2) for j in range(2)] getNextState = targetCode.getNextState self.getSPrime = targetCode.GetPrimitiveSPrime(primitivePolicies, stateSet, getNextState)
def setUp(self): stateSet = [(i,j) for i in range(2) for j in range(2)] getNextState = tf.getNextState primitivePolicies = {'up': (0,1), 'down': (0,-1), 'right': (1,0), 'left': (-1,0)} primitiveSPrime = tf.GetPrimitiveSPrime(primitivePolicies, stateSet, getNextState) optionTerminations = {"h1": (0,0)} landmarkSPrime = tf.GetLandmarkSPrime(optionTerminations) optionSPrime = {'up': primitiveSPrime, 'down':primitiveSPrime, 'left': primitiveSPrime, 'right': primitiveSPrime,'h1': landmarkSPrime} transitionFunction = tf.TransitionFunction(optionSPrime) self.getSPrime = targetCode.GetSPrime(transitionFunction, stateSet)
def setUp(self): gamma = 0.9 convergenceTolerance = 0.00001 stateSet = [(i, j) for i in range(2) for j in range(2)] landmarkLocation = {"h1": (0, 0)} landmarkStateSet = {"h1": stateSet} getNextState = tf.getNextState primitiveOptions = { "up": (0, 1), "down": (0, -1), "left": (-1, 0), "right": (1, 0) } primitiveSPrime = tf.GetPrimitiveSPrime(primitiveOptions, stateSet, getNextState) optionSPrime = { option: primitiveSPrime for option in primitiveOptions.keys() } transitionFunction = tf.TransitionFunction(optionSPrime) actionCost = -1 moveCost = -3 goalStates = [(0, 0)] goalReward = 10 primitiveReward = rf.GetPrimitiveOptionReward(actionCost, moveCost, goalStates, goalReward, primitiveSPrime) optionReward = { option: primitiveReward for option in primitiveOptions.keys() } rewardFunction = rf.RewardFunction(optionReward) getLandmarkPolicy = targetCode.GetLandmarkPolicy( gamma, convergenceTolerance) merge = targetCode.merge landmarkSetUp = targetCode.SetUpLandmark( landmarkLocation, landmarkStateSet, primitiveOptions, transitionFunction, rewardFunction, getLandmarkPolicy, merge) existingOptions = {} self.result = landmarkSetUp(existingOptions)
def main(): stateSet = [(i,j) for i in range(5) for j in range(10)] getNextState = tf.getNextState primitivePolicies = {'up': (0,1), 'down':(0,-1), 'left': (-1,0), 'right': (1,0), 'ul': (-1,1), 'ur': (1,1), 'll': (-1,-1), 'lr': (1,-1)} primitiveSPrime = tf.GetPrimitiveSPrime(primitivePolicies, stateSet, getNextState) optionTerminations = {'L': (4,9), 'R': (0,9)} landmarkSPrime = tf.GetLandmarkSPrime(optionTerminations) optionSPrime = {'S': landmarkSPrime, 'L': landmarkSPrime, 'R': landmarkSPrime} transitionFunction = tf.TransitionFunction(optionSPrime) actionCost = -1 moveCost = -3 goalStates = [(0,9)] goalReward = 10 primitiveReward = rf.GetPrimitiveOptionReward(actionCost, moveCost, goalStates, goalReward, primitiveSPrime) landmarkPolicies = {'L': {(0, 0): {(0, 1): 0.5, (1, 1): 0.5}, (0, 1): {(0, 1): 0.5, (1, 1): 0.5}, (0, 2): {(0, 1): 0.5, (1, 1): 0.5}, (0, 3): {(0, 1): 0.5, (1, 1): 0.5}, (0, 4): {(0, 1): 0.5, (1, 1): 0.5}, (0, 5): {(1, 1): 1.0}, (0, 6): {(1, 0): 0.5, (1, 1): 0.5}, (0, 7): {(1, 0): 0.3333333333333333, (1, 1): 0.3333333333333333, (1, -1): 0.3333333333333333}, (0, 8): {(1, 0): 0.3333333333333333, (1, 1): 0.3333333333333333, (1, -1): 0.3333333333333333}, (0, 9): {(1, 0): 0.5, (1, -1): 0.5}, (1, 0): {(0, 1): 0.3333333333333333, (1, 1): 0.3333333333333333, (-1, 1): 0.3333333333333333}, (1, 1): {(0, 1): 0.3333333333333333, (1, 1): 0.3333333333333333, (-1, 1): 0.3333333333333333}, (1, 2): {(0, 1): 0.3333333333333333, (1, 1): 0.3333333333333333, (-1, 1): 0.3333333333333333}, (1, 3): {(0, 1): 0.3333333333333333, (1, 1): 0.3333333333333333, (-1, 1): 0.3333333333333333}, (1, 4): {(0, 1): 0.3333333333333333, (1, 1): 0.3333333333333333, (-1, 1): 0.3333333333333333}, (1, 5): {(0, 1): 0.5, (1, 1): 0.5}, (1, 6): {(1, 1): 1.0}, (1, 7): {(1, 0): 0.5, (1, 1): 0.5}, (1, 8): {(1, 0): 0.3333333333333333, (1, 1): 0.3333333333333333, (1, -1): 0.3333333333333333}, (1, 9): {(1, 0): 0.5, (1, -1): 0.5}, (2, 0): {(0, 1): 0.3333333333333333, (1, 1): 0.3333333333333333, (-1, 1): 0.3333333333333333}, (2, 1): {(0, 1): 0.3333333333333333, (1, 1): 0.3333333333333333, (-1, 1): 0.3333333333333333}, (2, 2): {(0, 1): 0.3333333333333333, (1, 1): 0.3333333333333333, (-1, 1): 0.3333333333333333}, (2, 3): {(0, 1): 0.3333333333333333, (1, 1): 0.3333333333333333, (-1, 1): 0.3333333333333333}, (2, 4): {(0, 1): 0.3333333333333333, (1, 1): 0.3333333333333333, (-1, 1): 0.3333333333333333}, (2, 5): {(0, 1): 0.3333333333333333, (1, 1): 0.3333333333333333, (-1, 1): 0.3333333333333333}, (2, 6): {(0, 1): 0.5, (1, 1): 0.5}, (2, 7): {(1, 1): 1.0}, (2, 8): {(1, 0): 0.5, (1, 1): 0.5}, (2, 9): {(1, 0): 0.5, (1, -1): 0.5}, (3, 0): {(0, 1): 0.3333333333333333, (1, 1): 0.3333333333333333, (-1, 1): 0.3333333333333333}, (3, 1): {(0, 1): 0.3333333333333333, (1, 1): 0.3333333333333333, (-1, 1): 0.3333333333333333}, (3, 2): {(0, 1): 0.3333333333333333, (1, 1): 0.3333333333333333, (-1, 1): 0.3333333333333333}, (3, 3): {(0, 1): 0.3333333333333333, (1, 1): 0.3333333333333333, (-1, 1): 0.3333333333333333}, (3, 4): {(0, 1): 0.3333333333333333, (1, 1): 0.3333333333333333, (-1, 1): 0.3333333333333333}, (3, 5): {(0, 1): 0.3333333333333333, (1, 1): 0.3333333333333333, (-1, 1): 0.3333333333333333}, (3, 6): {(0, 1): 0.3333333333333333, (1, 1): 0.3333333333333333, (-1, 1): 0.3333333333333333}, (3, 7): {(0, 1): 0.5, (1, 1): 0.5}, (3, 8): {(1, 1): 1.0}, (3, 9): {(1, 0): 1.0}, (4, 0): {(0, 1): 0.5, (-1, 1): 0.5}, (4, 1): {(0, 1): 0.5, (-1, 1): 0.5}, (4, 2): {(0, 1): 0.5, (-1, 1): 0.5}, (4, 3): {(0, 1): 0.5, (-1, 1): 0.5}, (4, 4): {(0, 1): 0.5, (-1, 1): 0.5}, (4, 5): {(0, 1): 0.5, (-1, 1): 0.5}, (4, 6): {(0, 1): 0.5, (-1, 1): 0.5}, (4, 7): {(0, 1): 0.5, (-1, 1): 0.5}, (4, 8): {(0, 1): 1.0}, (4, 9): {(0, 1): 0.2, (1, 0): 0.2, (1, 1): 0.2, (-1, 1): 0.2, (1, -1): 0.2}}, 'R': {(0, 5): {(0, 1): 0.5, (1, 1): 0.5}, (0, 6): {(0, 1): 0.5, (1, 1): 0.5}, (0, 7): {(0, 1): 0.5, (1, 1): 0.5}, (0, 8): {(0, 1): 1.0}, (0, 9): {(0, 1): 0.2, (-1, 0): 0.2, (1, 1): 0.2, (-1, 1): 0.2, (-1, -1): 0.2}, (1, 5): {(0, 1): 0.3333333333333333, (1, 1): 0.3333333333333333, (-1, 1): 0.3333333333333333}, (1, 6): {(0, 1): 0.3333333333333333, (1, 1): 0.3333333333333333, (-1, 1): 0.3333333333333333}, (1, 7): {(0, 1): 0.5, (-1, 1): 0.5}, (1, 8): {(-1, 1): 1.0}, (1, 9): {(-1, 0): 1.0}, (2, 5): {(0, 1): 0.3333333333333333, (1, 1): 0.3333333333333333, (-1, 1): 0.3333333333333333}, (2, 6): {(0, 1): 0.5, (-1, 1): 0.5}, (2, 7): {(-1, 1): 1.0}, (2, 8): {(-1, 0): 0.5, (-1, 1): 0.5}, (2, 9): {(-1, 0): 0.5, (-1, -1): 0.5}, (3, 5): {(0, 1): 0.5, (-1, 1): 0.5}, (3, 6): {(-1, 1): 1.0}, (3, 7): {(-1, 0): 0.5, (-1, 1): 0.5}, (3, 8): {(-1, 0): 0.3333333333333333, (-1, 1): 0.3333333333333333, (-1, -1): 0.3333333333333333}, (3, 9): {(-1, 0): 0.5, (-1, -1): 0.5}, (4, 5): {(-1, 1): 1.0}, (4, 6): {(-1, 0): 0.5, (-1, 1): 0.5}, (4, 7): {(-1, 0): 0.3333333333333333, (-1, 1): 0.3333333333333333, (-1, -1): 0.3333333333333333}, (4, 8): {(-1, 0): 0.3333333333333333, (-1, 1): 0.3333333333333333, (-1, -1): 0.3333333333333333}, (4, 9): {(-1, 0): 0.5, (-1, -1): 0.5}}} landmarkReward = rf.GetLandmarkOptionReward(actionCost, moveCost, goalStates, goalReward, landmarkPolicies, landmarkSPrime, getNextState) optionReward = {'S': landmarkReward, 'L': landmarkReward, 'R': landmarkReward} rewardFunction = rf.RewardFunction(optionReward) optionSpace = {(0, 0): ['L'], (0, 1): ['L'], (0, 2): ['L'], (0, 3): ['L'], (0, 4): ['L'], (0, 5): ['L', 'R'], (0, 6): ['L', 'R'], (0, 7): ['L', 'R'], (0, 8): ['L', 'R'], (0, 9): ['L', 'R'], (1, 0): ['L'], (1, 1): ['L'], (1, 2): ['L'], (1, 3): ['L'], (1, 4): ['L'], (1, 5): ['L', 'R'], (1, 6): ['L', 'R'], (1, 7): ['L', 'R'], (1, 8): ['L', 'R'], (1, 9): ['L', 'R'], (2, 0): ['L'], (2, 1): ['L'], (2, 2): ['L'], (2, 3): ['L'], (2, 4): ['L'], (2, 5): ['L', 'R'], (2, 6): ['L', 'R'], (2, 7): ['L', 'R'], (2, 8): ['L', 'R'], (2, 9): ['L', 'R'], (3, 0): ['L'], (3, 1): ['L'], (3, 2): ['L'], (3, 3): ['L'], (3, 4): ['L'], (3, 5): ['L', 'R'], (3, 6): ['L', 'R'], (3, 7): ['L', 'R'], (3, 8): ['L', 'R'], (3, 9): ['L', 'R'], (4, 0): ['L'], (4, 1): ['L'], (4, 2): ['L'], (4, 3): ['L'], (4, 4): ['L'], (4, 5): ['L', 'R'], (4, 6): ['L', 'R'], (4, 7): ['L', 'R'], (4, 8): ['L', 'R'], (4, 9): ['L', 'R']} optionSpaceFunction = lambda x: optionSpace[x] gamma = 0.9 convergenceTolerance = 0.00001 smdpResult = smdp.SemiMDP(gamma, convergenceTolerance) V, policy = smdpResult(stateSet, transitionFunction, rewardFunction, optionSpaceFunction) normalPathSetUp = GetNormalPath(landmarkPolicies, policy, optionTerminations, getNextState, goalStates, stateSet) checkCondition = io.CheckCondition(optionSpaceFunction) interruptedPathSetUp = GetInterruptedPath(checkCondition, landmarkPolicies, policy, optionTerminations, getNextState, goalStates, stateSet) agentStartingLocation = (4,0) normalPath = normalPathSetUp(agentStartingLocation) interruptedPath = interruptedPathSetUp(agentStartingLocation) print("Original Path: ", normalPath) print ("Interrupted Path: ", interruptedPath)
def setUp(self): gamma = 0.9 convergenceTolerance = 0.001 stateSet = [(i, j) for i in range(2) for j in range(2)] actionCost = -1 moveCost = -3 goalReward = 10 goalStates = [(0, 0)] getNextState = tf.getNextState primitiveOptions = { "up": (0, 1), "down": (0, -1), "left": (-1, 0), "right": (1, 0) } primitiveSPrime = tf.GetPrimitiveSPrime(primitiveOptions, stateSet, getNextState) optionSPrime = { option: primitiveSPrime for option in primitiveOptions.keys() } transitionFunction = tf.TransitionFunction(optionSPrime) primitiveReward = rf.GetPrimitiveOptionReward(actionCost, moveCost, goalStates, goalReward, primitiveSPrime) optionReward = { option: primitiveReward for option in primitiveOptions.keys() } rewardFunction = rf.RewardFunction(optionReward) actions = list(primitiveOptions.keys()) actionSpace = {state: actions for state in stateSet} actionSpaceFunction = lambda x: actionSpace[x] setUp = targetCode.GetLandmarkPolicy(gamma, convergenceTolerance) self.policy = setUp(transitionFunction, rewardFunction, stateSet, actionSpaceFunction)
def main(): fullGrid = [(i, j) for i in range(13) for j in range(13)] border = [(0, 12), (1, 12), (2, 12), (3, 12), (4, 12), (5, 12), (6, 12), (7, 12), (8, 12), (9, 12), (10, 12), (11, 12), (12, 12), (0, 0), (1, 0), (2, 0), (3, 0), (4, 0), (5, 0), (6, 0), (7, 0), (8, 0), (9, 0), (10, 0), (11, 0), (12, 0), (0, 1), (0, 2), (0, 3), (0, 4), (0, 5), (0, 6), (0, 7), (0, 8), (0, 9), (0, 10), (0, 11), (12, 1), (12, 2), (12, 3), (12, 4), (12, 5), (12, 6), (12, 7), (12, 8), (12, 9), (12, 10), (12, 11)] hallways = [(6, 1), (6, 3), (6, 4), (6, 5), (6, 6), (11, 6), (9, 6), (8, 6), (7, 6), (5, 6), (4, 6), (2, 6), (1, 6), (7, 7), (7, 8), (7, 10), (7, 11)] for state in border: fullGrid.remove(state) for state in hallways: fullGrid.remove(state) stateSet = fullGrid getNextState = tf.getNextState primitivePolicies = { 'up': (0, 1), 'down': (0, -1), 'right': (1, 0), 'left': (-1, 0) } primitiveSPrime = tf.GetPrimitiveSPrime(primitivePolicies, stateSet, getNextState) optionTerminations = { "h1": (6, 2), "h2": (10, 6), "h3": (3, 6), "h4": (7, 9), "goal": (9, 9) } landmarkSPrime = tf.GetLandmarkSPrime(optionTerminations) optionSPrime = { 'up': primitiveSPrime, 'down': primitiveSPrime, 'left': primitiveSPrime, 'right': primitiveSPrime, 'h1': landmarkSPrime, 'h2': landmarkSPrime, 'h3': landmarkSPrime, 'h4': landmarkSPrime, 'goal': landmarkSPrime } transitionFunction = tf.TransitionFunction(optionSPrime) availableOptions = list(optionSPrime.keys()) actionCost = -1 moveCost = -3 goalStates = [(9, 9)] goalReward = 10 primitiveReward = rf.GetPrimitiveOptionReward(actionCost, moveCost, goalStates, goalReward, primitiveSPrime) #need to add landmark policy for goal state: h1 h2 h3 h4 goal #new change = add neighboring landmarks into the stateset of the current so will not get stuck when in the location of a landmark landmarkPolicies = { 'h1': { (1, 1): { (0, 1): 0.5, (1, 0): 0.5 }, (1, 2): { (1, 0): 1.0 }, (1, 3): { (0, -1): 0.5, (1, 0): 0.5 }, (1, 4): { (0, -1): 0.5, (1, 0): 0.5 }, (1, 5): { (0, -1): 0.5, (1, 0): 0.5 }, (2, 1): { (0, 1): 0.5, (1, 0): 0.5 }, (2, 2): { (1, 0): 1.0 }, (2, 3): { (0, -1): 0.5, (1, 0): 0.5 }, (2, 4): { (0, -1): 0.5, (1, 0): 0.5 }, (2, 5): { (0, -1): 0.5, (1, 0): 0.5 }, (3, 1): { (0, 1): 0.5, (1, 0): 0.5 }, (3, 2): { (1, 0): 1.0 }, (3, 3): { (0, -1): 0.5, (1, 0): 0.5 }, (3, 4): { (0, -1): 0.5, (1, 0): 0.5 }, (3, 5): { (0, -1): 0.5, (1, 0): 0.5 }, (4, 1): { (0, 1): 0.5, (1, 0): 0.5 }, (4, 2): { (1, 0): 1.0 }, (4, 3): { (0, -1): 0.5, (1, 0): 0.5 }, (4, 4): { (0, -1): 0.5, (1, 0): 0.5 }, (4, 5): { (0, -1): 0.5, (1, 0): 0.5 }, (5, 1): { (0, 1): 1.0 }, (5, 2): { (1, 0): 1.0 }, (5, 3): { (0, -1): 1.0 }, (5, 4): { (0, -1): 1.0 }, (5, 5): { (0, -1): 1.0 }, (7, 1): { (0, 1): 1.0 }, (7, 2): { (-1, 0): 1.0 }, (7, 3): { (0, -1): 1.0 }, (7, 4): { (0, -1): 1.0 }, (7, 5): { (0, -1): 1.0 }, (8, 1): { (0, 1): 0.5, (-1, 0): 0.5 }, (8, 2): { (-1, 0): 1.0 }, (8, 3): { (0, -1): 0.5, (-1, 0): 0.5 }, (8, 4): { (0, -1): 0.5, (-1, 0): 0.5 }, (8, 5): { (0, -1): 0.5, (-1, 0): 0.5 }, (9, 1): { (0, 1): 0.5, (-1, 0): 0.5 }, (9, 2): { (-1, 0): 1.0 }, (9, 3): { (0, -1): 0.5, (-1, 0): 0.5 }, (9, 4): { (0, -1): 0.5, (-1, 0): 0.5 }, (9, 5): { (0, -1): 0.5, (-1, 0): 0.5 }, (10, 1): { (0, 1): 0.5, (-1, 0): 0.5 }, (10, 2): { (-1, 0): 1.0 }, (10, 3): { (0, -1): 0.5, (-1, 0): 0.5 }, (10, 4): { (0, -1): 0.5, (-1, 0): 0.5 }, (10, 5): { (0, -1): 0.5, (-1, 0): 0.5 }, (11, 1): { (0, 1): 0.5, (-1, 0): 0.5 }, (11, 2): { (-1, 0): 1.0 }, (11, 3): { (0, -1): 0.5, (-1, 0): 0.5 }, (11, 4): { (0, -1): 0.5, (-1, 0): 0.5 }, (11, 5): { (0, -1): 0.5, (-1, 0): 0.5 }, (6, 2): { (0, 1): 0.5, (0, -1): 0.5 }, (10, 6): { (0, -1): 1.0 }, (3, 6): { (0, -1): 1.0 } }, 'h2': { (7, 1): { (0, 1): 0.5, (1, 0): 0.5 }, (7, 2): { (0, 1): 0.5, (1, 0): 0.5 }, (7, 3): { (0, 1): 0.5, (1, 0): 0.5 }, (7, 4): { (0, 1): 0.5, (1, 0): 0.5 }, (7, 5): { (1, 0): 1.0 }, (8, 1): { (0, 1): 0.5, (1, 0): 0.5 }, (8, 2): { (0, 1): 0.5, (1, 0): 0.5 }, (8, 3): { (0, 1): 0.5, (1, 0): 0.5 }, (8, 4): { (0, 1): 0.5, (1, 0): 0.5 }, (8, 5): { (1, 0): 1.0 }, (9, 1): { (0, 1): 0.5, (1, 0): 0.5 }, (9, 2): { (0, 1): 0.5, (1, 0): 0.5 }, (9, 3): { (0, 1): 0.5, (1, 0): 0.5 }, (9, 4): { (0, 1): 0.5, (1, 0): 0.5 }, (9, 5): { (1, 0): 1.0 }, (10, 1): { (0, 1): 1.0 }, (10, 2): { (0, 1): 1.0 }, (10, 3): { (0, 1): 1.0 }, (10, 4): { (0, 1): 1.0 }, (10, 5): { (0, 1): 1.0 }, (11, 1): { (0, 1): 0.5, (-1, 0): 0.5 }, (11, 2): { (0, 1): 0.5, (-1, 0): 0.5 }, (11, 3): { (0, 1): 0.5, (-1, 0): 0.5 }, (11, 4): { (0, 1): 0.5, (-1, 0): 0.5 }, (11, 5): { (-1, 0): 1.0 }, (8, 7): { (1, 0): 1.0 }, (8, 8): { (0, -1): 0.5, (1, 0): 0.5 }, (8, 9): { (0, -1): 0.5, (1, 0): 0.5 }, (8, 10): { (0, -1): 0.5, (1, 0): 0.5 }, (8, 11): { (0, -1): 0.5, (1, 0): 0.5 }, (9, 7): { (1, 0): 1.0 }, (9, 8): { (0, -1): 0.5, (1, 0): 0.5 }, (9, 9): { (0, -1): 0.5, (1, 0): 0.5 }, (9, 10): { (0, -1): 0.5, (1, 0): 0.5 }, (9, 11): { (0, -1): 0.5, (1, 0): 0.5 }, (10, 7): { (0, -1): 1.0 }, (10, 8): { (0, -1): 1.0 }, (10, 9): { (0, -1): 1.0 }, (10, 10): { (0, -1): 1.0 }, (10, 11): { (0, -1): 1.0 }, (11, 7): { (-1, 0): 1.0 }, (11, 8): { (0, -1): 0.5, (-1, 0): 0.5 }, (11, 9): { (0, -1): 0.5, (-1, 0): 0.5 }, (11, 10): { (0, -1): 0.5, (-1, 0): 0.5 }, (11, 11): { (0, -1): 0.5, (-1, 0): 0.5 }, (10, 6): { (1, 0): 0.5, (-1, 0): 0.5 }, (6, 2): { (1, 0): 1.0 }, (7, 9): { (1, 0): 1.0 } }, 'h3': { (1, 1): { (0, 1): 0.5, (1, 0): 0.5 }, (1, 2): { (0, 1): 0.5, (1, 0): 0.5 }, (1, 3): { (0, 1): 0.5, (1, 0): 0.5 }, (1, 4): { (0, 1): 0.5, (1, 0): 0.5 }, (1, 5): { (1, 0): 1.0 }, (2, 1): { (0, 1): 0.5, (1, 0): 0.5 }, (2, 2): { (0, 1): 0.5, (1, 0): 0.5 }, (2, 3): { (0, 1): 0.5, (1, 0): 0.5 }, (2, 4): { (0, 1): 0.5, (1, 0): 0.5 }, (2, 5): { (1, 0): 1.0 }, (3, 1): { (0, 1): 1.0 }, (3, 2): { (0, 1): 1.0 }, (3, 3): { (0, 1): 1.0 }, (3, 4): { (0, 1): 1.0 }, (3, 5): { (0, 1): 1.0 }, (4, 1): { (0, 1): 0.5, (-1, 0): 0.5 }, (4, 2): { (0, 1): 0.5, (-1, 0): 0.5 }, (4, 3): { (0, 1): 0.5, (-1, 0): 0.5 }, (4, 4): { (0, 1): 0.5, (-1, 0): 0.5 }, (4, 5): { (-1, 0): 1.0 }, (5, 1): { (0, 1): 0.5, (-1, 0): 0.5 }, (5, 2): { (0, 1): 0.5, (-1, 0): 0.5 }, (5, 3): { (0, 1): 0.5, (-1, 0): 0.5 }, (5, 4): { (0, 1): 0.5, (-1, 0): 0.5 }, (5, 5): { (-1, 0): 1.0 }, (1, 7): { (1, 0): 1.0 }, (1, 8): { (0, -1): 0.5, (1, 0): 0.5 }, (1, 9): { (0, -1): 0.5, (1, 0): 0.5 }, (1, 10): { (0, -1): 0.5, (1, 0): 0.5 }, (1, 11): { (0, -1): 0.5, (1, 0): 0.5 }, (2, 7): { (1, 0): 1.0 }, (2, 8): { (0, -1): 0.5, (1, 0): 0.5 }, (2, 9): { (0, -1): 0.5, (1, 0): 0.5 }, (2, 10): { (0, -1): 0.5, (1, 0): 0.5 }, (2, 11): { (0, -1): 0.5, (1, 0): 0.5 }, (3, 7): { (0, -1): 1.0 }, (3, 8): { (0, -1): 1.0 }, (3, 9): { (0, -1): 1.0 }, (3, 10): { (0, -1): 1.0 }, (3, 11): { (0, -1): 1.0 }, (4, 7): { (-1, 0): 1.0 }, (4, 8): { (0, -1): 0.5, (-1, 0): 0.5 }, (4, 9): { (0, -1): 0.5, (-1, 0): 0.5 }, (4, 10): { (0, -1): 0.5, (-1, 0): 0.5 }, (4, 11): { (0, -1): 0.5, (-1, 0): 0.5 }, (5, 7): { (-1, 0): 1.0 }, (5, 8): { (0, -1): 0.5, (-1, 0): 0.5 }, (5, 9): { (0, -1): 0.5, (-1, 0): 0.5 }, (5, 10): { (0, -1): 0.5, (-1, 0): 0.5 }, (5, 11): { (0, -1): 0.5, (-1, 0): 0.5 }, (6, 7): { (-1, 0): 1.0 }, (6, 8): { (0, -1): 0.5, (-1, 0): 0.5 }, (6, 9): { (0, -1): 0.5, (-1, 0): 0.5 }, (6, 10): { (0, -1): 0.5, (-1, 0): 0.5 }, (6, 11): { (0, -1): 0.5, (-1, 0): 0.5 }, (3, 6): { (1, 0): 0.5, (-1, 0): 0.5 }, (6, 2): { (-1, 0): 1.0 }, (7, 9): { (-1, 0): 1.0 } }, 'h4': { (8, 7): { (0, 1): 1.0 }, (8, 8): { (0, 1): 1.0 }, (8, 9): { (-1, 0): 1.0 }, (8, 10): { (0, -1): 1.0 }, (8, 11): { (0, -1): 1.0 }, (9, 7): { (0, 1): 0.5, (-1, 0): 0.5 }, (9, 8): { (0, 1): 0.5, (-1, 0): 0.5 }, (9, 9): { (-1, 0): 1.0 }, (9, 10): { (0, -1): 0.5, (-1, 0): 0.5 }, (9, 11): { (0, -1): 0.5, (-1, 0): 0.5 }, (10, 7): { (0, 1): 0.5, (-1, 0): 0.5 }, (10, 8): { (0, 1): 0.5, (-1, 0): 0.5 }, (10, 9): { (-1, 0): 1.0 }, (10, 10): { (0, -1): 0.5, (-1, 0): 0.5 }, (10, 11): { (0, -1): 0.5, (-1, 0): 0.5 }, (11, 7): { (0, 1): 0.5, (-1, 0): 0.5 }, (11, 8): { (0, 1): 0.5, (-1, 0): 0.5 }, (11, 9): { (-1, 0): 1.0 }, (11, 10): { (0, -1): 0.5, (-1, 0): 0.5 }, (11, 11): { (0, -1): 0.5, (-1, 0): 0.5 }, (1, 7): { (0, 1): 0.5, (1, 0): 0.5 }, (1, 8): { (0, 1): 0.5, (1, 0): 0.5 }, (1, 9): { (1, 0): 1.0 }, (1, 10): { (0, -1): 0.5, (1, 0): 0.5 }, (1, 11): { (0, -1): 0.5, (1, 0): 0.5 }, (2, 7): { (0, 1): 0.5, (1, 0): 0.5 }, (2, 8): { (0, 1): 0.5, (1, 0): 0.5 }, (2, 9): { (1, 0): 1.0 }, (2, 10): { (0, -1): 0.5, (1, 0): 0.5 }, (2, 11): { (0, -1): 0.5, (1, 0): 0.5 }, (3, 7): { (0, 1): 0.5, (1, 0): 0.5 }, (3, 8): { (0, 1): 0.5, (1, 0): 0.5 }, (3, 9): { (1, 0): 1.0 }, (3, 10): { (0, -1): 0.5, (1, 0): 0.5 }, (3, 11): { (0, -1): 0.5, (1, 0): 0.5 }, (4, 7): { (0, 1): 0.5, (1, 0): 0.5 }, (4, 8): { (0, 1): 0.5, (1, 0): 0.5 }, (4, 9): { (1, 0): 1.0 }, (4, 10): { (0, -1): 0.5, (1, 0): 0.5 }, (4, 11): { (0, -1): 0.5, (1, 0): 0.5 }, (5, 7): { (0, 1): 0.5, (1, 0): 0.5 }, (5, 8): { (0, 1): 0.5, (1, 0): 0.5 }, (5, 9): { (1, 0): 1.0 }, (5, 10): { (0, -1): 0.5, (1, 0): 0.5 }, (5, 11): { (0, -1): 0.5, (1, 0): 0.5 }, (6, 7): { (0, 1): 1.0 }, (6, 8): { (0, 1): 1.0 }, (6, 9): { (1, 0): 1.0 }, (6, 10): { (0, -1): 1.0 }, (6, 11): { (0, -1): 1.0 }, (7, 9): { (0, 1): 0.5, (0, -1): 0.5 }, (3, 6): { (0, 1): 1.0 }, (10, 6): { (0, 1): 1.0 } }, 'goal': { (8, 7): { (0, 1): 0.5, (1, 0): 0.5 }, (8, 8): { (0, 1): 0.5, (1, 0): 0.5 }, (8, 9): { (1, 0): 1.0 }, (8, 10): { (0, -1): 0.5, (1, 0): 0.5 }, (8, 11): { (0, -1): 0.5, (1, 0): 0.5 }, (9, 7): { (0, 1): 1.0 }, (9, 8): { (0, 1): 1.0 }, (9, 9): { (0, 1): 0.25, (0, -1): 0.25, (1, 0): 0.25, (-1, 0): 0.25 }, (9, 10): { (0, -1): 1.0 }, (9, 11): { (0, -1): 1.0 }, (10, 7): { (0, 1): 0.5, (-1, 0): 0.5 }, (10, 8): { (0, 1): 0.5, (-1, 0): 0.5 }, (10, 9): { (-1, 0): 1.0 }, (10, 10): { (0, -1): 0.5, (-1, 0): 0.5 }, (10, 11): { (0, -1): 0.5, (-1, 0): 0.5 }, (11, 7): { (0, 1): 0.5, (-1, 0): 0.5 }, (11, 8): { (0, 1): 0.5, (-1, 0): 0.5 }, (11, 9): { (-1, 0): 1.0 }, (11, 10): { (0, -1): 0.5, (-1, 0): 0.5 }, (11, 11): { (0, -1): 0.5, (-1, 0): 0.5 }, (10, 6): { (0, 1): 1.0 }, (7, 9): { (1, 0): 1.0 } } } #old landmark policies without goal #landmarkPolicies = {'h1': {(1, 1): {(0, 1): 0.5, (1, 0): 0.5}, (1, 2): {(1, 0): 1.0}, (1, 3): {(0, -1): 0.5, (1, 0): 0.5}, (1, 4): {(0, -1): 0.5, (1, 0): 0.5}, (1, 5): {(0, -1): 0.5, (1, 0): 0.5}, (2, 1): {(0, 1): 0.5, (1, 0): 0.5}, (2, 2): {(1, 0): 1.0}, (2, 3): {(0, -1): 0.5, (1, 0): 0.5}, (2, 4): {(0, -1): 0.5, (1, 0): 0.5}, (2, 5): {(0, -1): 0.5, (1, 0): 0.5}, (3, 1): {(0, 1): 0.5, (1, 0): 0.5}, (3, 2): {(1, 0): 1.0}, (3, 3): {(0, -1): 0.5, (1, 0): 0.5}, (3, 4): {(0, -1): 0.5, (1, 0): 0.5}, (3, 5): {(0, -1): 0.5, (1, 0): 0.5}, (4, 1): {(0, 1): 0.5, (1, 0): 0.5}, (4, 2): {(1, 0): 1.0}, (4, 3): {(0, -1): 0.5, (1, 0): 0.5}, (4, 4): {(0, -1): 0.5, (1, 0): 0.5}, (4, 5): {(0, -1): 0.5, (1, 0): 0.5}, (5, 1): {(0, 1): 1.0}, (5, 2): {(1, 0): 1.0}, (5, 3): {(0, -1): 1.0}, (5, 4): {(0, -1): 1.0}, (5, 5): {(0, -1): 1.0}, (7, 1): {(0, 1): 1.0}, (7, 2): {(-1, 0): 1.0}, (7, 3): {(0, -1): 1.0}, (7, 4): {(0, -1): 1.0}, (7, 5): {(0, -1): 1.0}, (8, 1): {(0, 1): 0.5, (-1, 0): 0.5}, (8, 2): {(-1, 0): 1.0}, (8, 3): {(0, -1): 0.5, (-1, 0): 0.5}, (8, 4): {(0, -1): 0.5, (-1, 0): 0.5}, (8, 5): {(0, -1): 0.5, (-1, 0): 0.5}, (9, 1): {(0, 1): 0.5, (-1, 0): 0.5}, (9, 2): {(-1, 0): 1.0}, (9, 3): {(0, -1): 0.5, (-1, 0): 0.5}, (9, 4): {(0, -1): 0.5, (-1, 0): 0.5}, (9, 5): {(0, -1): 0.5, (-1, 0): 0.5}, (10, 1): {(0, 1): 0.5, (-1, 0): 0.5}, (10, 2): {(-1, 0): 1.0}, (10, 3): {(0, -1): 0.5, (-1, 0): 0.5}, (10, 4): {(0, -1): 0.5, (-1, 0): 0.5}, (10, 5): {(0, -1): 0.5, (-1, 0): 0.5}, (11, 1): {(0, 1): 0.5, (-1, 0): 0.5}, (11, 2): {(-1, 0): 1.0}, (11, 3): {(0, -1): 0.5, (-1, 0): 0.5}, (11, 4): {(0, -1): 0.5, (-1, 0): 0.5}, (11, 5): {(0, -1): 0.5, (-1, 0): 0.5}, (6, 2): {(0, 1): 0.5, (0, -1): 0.5}}, 'h2': {(7, 1): {(0, 1): 0.5, (1, 0): 0.5}, (7, 2): {(0, 1): 0.5, (1, 0): 0.5}, (7, 3): {(0, 1): 0.5, (1, 0): 0.5}, (7, 4): {(0, 1): 0.5, (1, 0): 0.5}, (7, 5): {(1, 0): 1.0}, (8, 1): {(0, 1): 0.5, (1, 0): 0.5}, (8, 2): {(0, 1): 0.5, (1, 0): 0.5}, (8, 3): {(0, 1): 0.5, (1, 0): 0.5}, (8, 4): {(0, 1): 0.5, (1, 0): 0.5}, (8, 5): {(1, 0): 1.0}, (9, 1): {(0, 1): 0.5, (1, 0): 0.5}, (9, 2): {(0, 1): 0.5, (1, 0): 0.5}, (9, 3): {(0, 1): 0.5, (1, 0): 0.5}, (9, 4): {(0, 1): 0.5, (1, 0): 0.5}, (9, 5): {(1, 0): 1.0}, (10, 1): {(0, 1): 1.0}, (10, 2): {(0, 1): 1.0}, (10, 3): {(0, 1): 1.0}, (10, 4): {(0, 1): 1.0}, (10, 5): {(0, 1): 1.0}, (11, 1): {(0, 1): 0.5, (-1, 0): 0.5}, (11, 2): {(0, 1): 0.5, (-1, 0): 0.5}, (11, 3): {(0, 1): 0.5, (-1, 0): 0.5}, (11, 4): {(0, 1): 0.5, (-1, 0): 0.5}, (11, 5): {(-1, 0): 1.0}, (8, 7): {(1, 0): 1.0}, (8, 8): {(0, -1): 0.5, (1, 0): 0.5}, (8, 9): {(0, -1): 0.5, (1, 0): 0.5}, (8, 10): {(0, -1): 0.5, (1, 0): 0.5}, (8, 11): {(0, -1): 0.5, (1, 0): 0.5}, (9, 7): {(1, 0): 1.0}, (9, 8): {(0, -1): 0.5, (1, 0): 0.5}, (9, 9): {(0, -1): 0.5, (1, 0): 0.5}, (9, 10): {(0, -1): 0.5, (1, 0): 0.5}, (9, 11): {(0, -1): 0.5, (1, 0): 0.5}, (10, 7): {(0, -1): 1.0}, (10, 8): {(0, -1): 1.0}, (10, 9): {(0, -1): 1.0}, (10, 10): {(0, -1): 1.0}, (10, 11): {(0, -1): 1.0}, (11, 7): {(-1, 0): 1.0}, (11, 8): {(0, -1): 0.5, (-1, 0): 0.5}, (11, 9): {(0, -1): 0.5, (-1, 0): 0.5}, (11, 10): {(0, -1): 0.5, (-1, 0): 0.5}, (11, 11): {(0, -1): 0.5, (-1, 0): 0.5}, (10, 6): {(1, 0): 0.5, (-1, 0): 0.5}}, 'h3': {(1, 1): {(0, 1): 0.5, (1, 0): 0.5}, (1, 2): {(0, 1): 0.5, (1, 0): 0.5}, (1, 3): {(0, 1): 0.5, (1, 0): 0.5}, (1, 4): {(0, 1): 0.5, (1, 0): 0.5}, (1, 5): {(1, 0): 1.0}, (2, 1): {(0, 1): 0.5, (1, 0): 0.5}, (2, 2): {(0, 1): 0.5, (1, 0): 0.5}, (2, 3): {(0, 1): 0.5, (1, 0): 0.5}, (2, 4): {(0, 1): 0.5, (1, 0): 0.5}, (2, 5): {(1, 0): 1.0}, (3, 1): {(0, 1): 1.0}, (3, 2): {(0, 1): 1.0}, (3, 3): {(0, 1): 1.0}, (3, 4): {(0, 1): 1.0}, (3, 5): {(0, 1): 1.0}, (4, 1): {(0, 1): 0.5, (-1, 0): 0.5}, (4, 2): {(0, 1): 0.5, (-1, 0): 0.5}, (4, 3): {(0, 1): 0.5, (-1, 0): 0.5}, (4, 4): {(0, 1): 0.5, (-1, 0): 0.5}, (4, 5): {(-1, 0): 1.0}, (5, 1): {(0, 1): 0.5, (-1, 0): 0.5}, (5, 2): {(0, 1): 0.5, (-1, 0): 0.5}, (5, 3): {(0, 1): 0.5, (-1, 0): 0.5}, (5, 4): {(0, 1): 0.5, (-1, 0): 0.5}, (5, 5): {(-1, 0): 1.0}, (1, 7): {(1, 0): 1.0}, (1, 8): {(0, -1): 0.5, (1, 0): 0.5}, (1, 9): {(0, -1): 0.5, (1, 0): 0.5}, (1, 10): {(0, -1): 0.5, (1, 0): 0.5}, (1, 11): {(0, -1): 0.5, (1, 0): 0.5}, (2, 7): {(1, 0): 1.0}, (2, 8): {(0, -1): 0.5, (1, 0): 0.5}, (2, 9): {(0, -1): 0.5, (1, 0): 0.5}, (2, 10): {(0, -1): 0.5, (1, 0): 0.5}, (2, 11): {(0, -1): 0.5, (1, 0): 0.5}, (3, 7): {(0, -1): 1.0}, (3, 8): {(0, -1): 1.0}, (3, 9): {(0, -1): 1.0}, (3, 10): {(0, -1): 1.0}, (3, 11): {(0, -1): 1.0}, (4, 7): {(-1, 0): 1.0}, (4, 8): {(0, -1): 0.5, (-1, 0): 0.5}, (4, 9): {(0, -1): 0.5, (-1, 0): 0.5}, (4, 10): {(0, -1): 0.5, (-1, 0): 0.5}, (4, 11): {(0, -1): 0.5, (-1, 0): 0.5}, (5, 7): {(-1, 0): 1.0}, (5, 8): {(0, -1): 0.5, (-1, 0): 0.5}, (5, 9): {(0, -1): 0.5, (-1, 0): 0.5}, (5, 10): {(0, -1): 0.5, (-1, 0): 0.5}, (5, 11): {(0, -1): 0.5, (-1, 0): 0.5}, (6, 7): {(-1, 0): 1.0}, (6, 8): {(0, -1): 0.5, (-1, 0): 0.5}, (6, 9): {(0, -1): 0.5, (-1, 0): 0.5}, (6, 10): {(0, -1): 0.5, (-1, 0): 0.5}, (6, 11): {(0, -1): 0.5, (-1, 0): 0.5}, (3, 6): {(1, 0): 0.5, (-1, 0): 0.5}}, 'h4': {(8, 7): {(0, 1): 1.0}, (8, 8): {(0, 1): 1.0}, (8, 9): {(-1, 0): 1.0}, (8, 10): {(0, -1): 1.0}, (8, 11): {(0, -1): 1.0}, (9, 7): {(0, 1): 0.5, (-1, 0): 0.5}, (9, 8): {(0, 1): 0.5, (-1, 0): 0.5}, (9, 9): {(-1, 0): 1.0}, (9, 10): {(0, -1): 0.5, (-1, 0): 0.5}, (9, 11): {(0, -1): 0.5, (-1, 0): 0.5}, (10, 7): {(0, 1): 0.5, (-1, 0): 0.5}, (10, 8): {(0, 1): 0.5, (-1, 0): 0.5}, (10, 9): {(-1, 0): 1.0}, (10, 10): {(0, -1): 0.5, (-1, 0): 0.5}, (10, 11): {(0, -1): 0.5, (-1, 0): 0.5}, (11, 7): {(0, 1): 0.5, (-1, 0): 0.5}, (11, 8): {(0, 1): 0.5, (-1, 0): 0.5}, (11, 9): {(-1, 0): 1.0}, (11, 10): {(0, -1): 0.5, (-1, 0): 0.5}, (11, 11): {(0, -1): 0.5, (-1, 0): 0.5}, (1, 7): {(0, 1): 0.5, (1, 0): 0.5}, (1, 8): {(0, 1): 0.5, (1, 0): 0.5}, (1, 9): {(1, 0): 1.0}, (1, 10): {(0, -1): 0.5, (1, 0): 0.5}, (1, 11): {(0, -1): 0.5, (1, 0): 0.5}, (2, 7): {(0, 1): 0.5, (1, 0): 0.5}, (2, 8): {(0, 1): 0.5, (1, 0): 0.5}, (2, 9): {(1, 0): 1.0}, (2, 10): {(0, -1): 0.5, (1, 0): 0.5}, (2, 11): {(0, -1): 0.5, (1, 0): 0.5}, (3, 7): {(0, 1): 0.5, (1, 0): 0.5}, (3, 8): {(0, 1): 0.5, (1, 0): 0.5}, (3, 9): {(1, 0): 1.0}, (3, 10): {(0, -1): 0.5, (1, 0): 0.5}, (3, 11): {(0, -1): 0.5, (1, 0): 0.5}, (4, 7): {(0, 1): 0.5, (1, 0): 0.5}, (4, 8): {(0, 1): 0.5, (1, 0): 0.5}, (4, 9): {(1, 0): 1.0}, (4, 10): {(0, -1): 0.5, (1, 0): 0.5}, (4, 11): {(0, -1): 0.5, (1, 0): 0.5}, (5, 7): {(0, 1): 0.5, (1, 0): 0.5}, (5, 8): {(0, 1): 0.5, (1, 0): 0.5}, (5, 9): {(1, 0): 1.0}, (5, 10): {(0, -1): 0.5, (1, 0): 0.5}, (5, 11): {(0, -1): 0.5, (1, 0): 0.5}, (6, 7): {(0, 1): 1.0}, (6, 8): {(0, 1): 1.0}, (6, 9): {(1, 0): 1.0}, (6, 10): {(0, -1): 1.0}, (6, 11): {(0, -1): 1.0}, (7, 9): {(0, 1): 0.5, (0, -1): 0.5}}} landmarkReward = rf.GetLandmarkOptionReward(actionCost, moveCost, goalStates, goalReward, landmarkPolicies, landmarkSPrime, getNextState) optionReward = { 'up': primitiveReward, 'down': primitiveReward, 'left': primitiveReward, 'right': primitiveReward, 'h1': landmarkReward, 'h2': landmarkReward, 'h3': landmarkReward, 'h4': landmarkReward, 'goal': landmarkReward } rewardFunction = rf.RewardFunction(optionReward) #optionSpace = {state: ['up', 'down', 'left', 'right'] for state in stateSet} #for primitive options only #landmarkOptions (including goal) ONLY optionSpace = { (1, 1): ['h1', 'h3'], (1, 2): ['h1', 'h3'], (1, 3): ['h1', 'h3'], (1, 4): ['h1', 'h3'], (1, 5): ['h1', 'h3'], (1, 7): ['h3', 'h4'], (1, 8): ['h3', 'h4'], (1, 9): ['h3', 'h4'], (1, 10): ['h3', 'h4'], (1, 11): ['h3', 'h4'], (2, 1): ['h1', 'h3'], (2, 2): ['h1', 'h3'], (2, 3): ['h1', 'h3'], (2, 4): ['h1', 'h3'], (2, 5): ['h1', 'h3'], (2, 7): ['h3', 'h4'], (2, 8): ['h3', 'h4'], (2, 9): ['h3', 'h4'], (2, 10): ['h3', 'h4'], (2, 11): ['h3', 'h4'], (3, 1): ['h1', 'h3'], (3, 2): ['h1', 'h3'], (3, 3): ['h1', 'h3'], (3, 4): ['h1', 'h3'], (3, 5): ['h1', 'h3'], (3, 6): ['h3', 'h1', 'h4'], (3, 7): ['h3', 'h4'], (3, 8): ['h3', 'h4'], (3, 9): ['h3', 'h4'], (3, 10): ['h3', 'h4'], (3, 11): ['h3', 'h4'], (4, 1): ['h1', 'h3'], (4, 2): ['h1', 'h3'], (4, 3): ['h1', 'h3'], (4, 4): ['h1', 'h3'], (4, 5): ['h1', 'h3'], (4, 7): ['h3', 'h4'], (4, 8): ['h3', 'h4'], (4, 9): ['h3', 'h4'], (4, 10): ['h3', 'h4'], (4, 11): ['h3', 'h4'], (5, 1): ['h1', 'h3'], (5, 2): ['h1', 'h3'], (5, 3): ['h1', 'h3'], (5, 4): ['h1', 'h3'], (5, 5): ['h1', 'h3'], (5, 7): ['h3', 'h4'], (5, 8): ['h3', 'h4'], (5, 9): ['h3', 'h4'], (5, 10): ['h3', 'h4'], (5, 11): ['h3', 'h4'], (6, 2): ['h1', 'h2', 'h3'], (6, 7): ['h3', 'h4'], (6, 8): ['h3', 'h4'], (6, 9): ['h3', 'h4'], (6, 10): ['h3', 'h4'], (6, 11): ['h3', 'h4'], (7, 1): ['h1', 'h2'], (7, 2): ['h1', 'h2'], (7, 3): ['h1', 'h2'], (7, 4): ['h1', 'h2'], (7, 5): ['h1', 'h2'], (7, 9): ['h4', 'h2', 'h3', 'goal'], (8, 1): ['h1', 'h2'], (8, 2): ['h1', 'h2'], (8, 3): ['h1', 'h2'], (8, 4): ['h1', 'h2'], (8, 5): ['h1', 'h2'], (8, 7): ['h2', 'h4', 'goal'], (8, 8): ['h2', 'h4', 'goal'], (8, 9): ['h2', 'h4', 'goal'], (8, 10): ['h2', 'h4', 'goal'], (8, 11): ['h2', 'h4', 'goal'], (9, 1): ['h1', 'h2'], (9, 2): ['h1', 'h2'], (9, 3): ['h1', 'h2'], (9, 4): ['h1', 'h2'], (9, 5): ['h1', 'h2'], (9, 7): ['h2', 'h4', 'goal'], (9, 8): ['h2', 'h4', 'goal'], (9, 9): ['h2', 'h4', 'goal'], (9, 10): ['h2', 'h4', 'goal'], (9, 11): ['h2', 'h4', 'goal'], (10, 1): ['h1', 'h2'], (10, 2): ['h1', 'h2'], (10, 3): ['h1', 'h2'], (10, 4): ['h1', 'h2'], (10, 5): ['h1', 'h2'], (10, 6): ['h2', 'h1', 'h4', 'goal'], (10, 7): ['h2', 'h4', 'goal'], (10, 8): ['h2', 'h4', 'goal'], (10, 9): ['h2', 'h4', 'goal'], (10, 10): ['h2', 'h4', 'goal'], (10, 11): ['h2', 'h4', 'goal'], (11, 1): ['h1', 'h2'], (11, 2): ['h1', 'h2'], (11, 3): ['h1', 'h2'], (11, 4): ['h1', 'h2'], (11, 5): ['h1', 'h2'], (11, 7): ['h2', 'h4', 'goal'], (11, 8): ['h2', 'h4', 'goal'], (11, 9): ['h2', 'h4', 'goal'], (11, 10): ['h2', 'h4', 'goal'], (11, 11): ['h2', 'h4', 'goal'] } #for landmark and primitive options #new optionSpace with landmark (including goal) and all primitive #optionSpace = {(1, 1): ['up', 'down', 'left', 'right', 'h1', 'h3'], (1, 2): ['up', 'down', 'left', 'right', 'h1', 'h3'], (1, 3): ['up', 'down', 'left', 'right', 'h1', 'h3'], (1, 4): ['up', 'down', 'left', 'right', 'h1', 'h3'], (1, 5): ['up', 'down', 'left', 'right', 'h1', 'h3'], (1, 7): ['up', 'down', 'left', 'right', 'h3', 'h4'], (1, 8): ['up', 'down', 'left', 'right', 'h3', 'h4'], (1, 9): ['up', 'down', 'left', 'right', 'h3', 'h4'], (1, 10): ['up', 'down', 'left', 'right', 'h3', 'h4'], (1, 11): ['up', 'down', 'left', 'right', 'h3', 'h4'], (2, 1): ['up', 'down', 'left', 'right', 'h1', 'h3'], (2, 2): ['up', 'down', 'left', 'right', 'h1', 'h3'], (2, 3): ['up', 'down', 'left', 'right', 'h1', 'h3'], (2, 4): ['up', 'down', 'left', 'right', 'h1', 'h3'], (2, 5): ['up', 'down', 'left', 'right', 'h1', 'h3'], (2, 7): ['up', 'down', 'left', 'right', 'h3', 'h4'], (2, 8): ['up', 'down', 'left', 'right', 'h3', 'h4'], (2, 9): ['up', 'down', 'left', 'right', 'h3', 'h4'], (2, 10): ['up', 'down', 'left', 'right', 'h3', 'h4'], (2, 11): ['up', 'down', 'left', 'right', 'h3', 'h4'], (3, 1): ['up', 'down', 'left', 'right', 'h1', 'h3'], (3, 2): ['up', 'down', 'left', 'right', 'h1', 'h3'], (3, 3): ['up', 'down', 'left', 'right', 'h1', 'h3'], (3, 4): ['up', 'down', 'left', 'right', 'h1', 'h3'], (3, 5): ['up', 'down', 'left', 'right', 'h1', 'h3'], (3, 6): ['up', 'down', 'left', 'right', 'h3'], (3, 7): ['up', 'down', 'left', 'right', 'h3', 'h4'], (3, 8): ['up', 'down', 'left', 'right', 'h3', 'h4'], (3, 9): ['up', 'down', 'left', 'right', 'h3', 'h4'], (3, 10): ['up', 'down', 'left', 'right', 'h3', 'h4'], (3, 11): ['up', 'down', 'left', 'right', 'h3', 'h4'], (4, 1): ['up', 'down', 'left', 'right', 'h1', 'h3'], (4, 2): ['up', 'down', 'left', 'right', 'h1', 'h3'], (4, 3): ['up', 'down', 'left', 'right', 'h1', 'h3'], (4, 4): ['up', 'down', 'left', 'right', 'h1', 'h3'], (4, 5): ['up', 'down', 'left', 'right', 'h1', 'h3'], (4, 7): ['up', 'down', 'left', 'right', 'h3', 'h4'], (4, 8): ['up', 'down', 'left', 'right', 'h3', 'h4'], (4, 9): ['up', 'down', 'left', 'right', 'h3', 'h4'], (4, 10): ['up', 'down', 'left', 'right', 'h3', 'h4'], (4, 11): ['up', 'down', 'left', 'right', 'h3', 'h4'], (5, 1): ['up', 'down', 'left', 'right', 'h1', 'h3'], (5, 2): ['up', 'down', 'left', 'right', 'h1', 'h3'], (5, 3): ['up', 'down', 'left', 'right', 'h1', 'h3'], (5, 4): ['up', 'down', 'left', 'right', 'h1', 'h3'], (5, 5): ['up', 'down', 'left', 'right', 'h1', 'h3'], (5, 7): ['up', 'down', 'left', 'right', 'h3', 'h4'], (5, 8): ['up', 'down', 'left', 'right', 'h3', 'h4'], (5, 9): ['up', 'down', 'left', 'right', 'h3', 'h4'], (5, 10): ['up', 'down', 'left', 'right', 'h3', 'h4'], (5, 11): ['up', 'down', 'left', 'right', 'h3', 'h4'], (6, 2): ['up', 'down', 'left', 'right', 'h1'], (6, 7): ['up', 'down', 'left', 'right', 'h3', 'h4'], (6, 8): ['up', 'down', 'left', 'right', 'h3', 'h4'], (6, 9): ['up', 'down', 'left', 'right', 'h3', 'h4'], (6, 10): ['up', 'down', 'left', 'right', 'h3', 'h4'], (6, 11): ['up', 'down', 'left', 'right', 'h3', 'h4'], (7, 1): ['up', 'down', 'left', 'right', 'h1', 'h2'], (7, 2): ['up', 'down', 'left', 'right', 'h1', 'h2'], (7, 3): ['up', 'down', 'left', 'right', 'h1', 'h2'], (7, 4): ['up', 'down', 'left', 'right', 'h1', 'h2'], (7, 5): ['up', 'down', 'left', 'right', 'h1', 'h2'], (7, 9): ['up', 'down', 'left', 'right', 'h4'], (8, 1): ['up', 'down', 'left', 'right', 'h1', 'h2'], (8, 2): ['up', 'down', 'left', 'right', 'h1', 'h2'], (8, 3): ['up', 'down', 'left', 'right', 'h1', 'h2'], (8, 4): ['up', 'down', 'left', 'right', 'h1', 'h2'], (8, 5): ['up', 'down', 'left', 'right', 'h1', 'h2'], (8, 7): ['up', 'down', 'left', 'right', 'h2', 'h4', 'goal'], (8, 8): ['up', 'down', 'left', 'right', 'h2', 'h4', 'goal'], (8, 9): ['up', 'down', 'left', 'right', 'h2', 'h4', 'goal'], (8, 10): ['up', 'down', 'left', 'right', 'h2', 'h4', 'goal'], (8, 11): ['up', 'down', 'left', 'right', 'h2', 'h4', 'goal'], (9, 1): ['up', 'down', 'left', 'right', 'h1', 'h2'], (9, 2): ['up', 'down', 'left', 'right', 'h1', 'h2'], (9, 3): ['up', 'down', 'left', 'right', 'h1', 'h2'], (9, 4): ['up', 'down', 'left', 'right', 'h1', 'h2'], (9, 5): ['up', 'down', 'left', 'right', 'h1', 'h2'], (9, 7): ['up', 'down', 'left', 'right', 'h2', 'h4', 'goal'], (9, 8): ['up', 'down', 'left', 'right', 'h2', 'h4', 'goal'], (9, 9): ['up', 'down', 'left', 'right', 'h2', 'h4', 'goal'], (9, 10): ['up', 'down', 'left', 'right', 'h2', 'h4', 'goal'], (9, 11): ['up', 'down', 'left', 'right', 'h2', 'h4', 'goal'], (10, 1): ['up', 'down', 'left', 'right', 'h1', 'h2'], (10, 2): ['up', 'down', 'left', 'right', 'h1', 'h2'], (10, 3): ['up', 'down', 'left', 'right', 'h1', 'h2'], (10, 4): ['up', 'down', 'left', 'right', 'h1', 'h2'], (10, 5): ['up', 'down', 'left', 'right', 'h1', 'h2'], (10, 6): ['up', 'down', 'left', 'right', 'h2'], (10, 7): ['up', 'down', 'left', 'right', 'h2', 'h4', 'goal'], (10, 8): ['up', 'down', 'left', 'right', 'h2', 'h4', 'goal'], (10, 9): ['up', 'down', 'left', 'right', 'h2', 'h4', 'goal'], (10, 10): ['up', 'down', 'left', 'right', 'h2', 'h4', 'goal'], (10, 11): ['up', 'down', 'left', 'right', 'h2', 'h4', 'goal'], (11, 1): ['up', 'down', 'left', 'right', 'h1', 'h2'], (11, 2): ['up', 'down', 'left', 'right', 'h1', 'h2'], (11, 3): ['up', 'down', 'left', 'right', 'h1', 'h2'], (11, 4): ['up', 'down', 'left', 'right', 'h1', 'h2'], (11, 5): ['up', 'down', 'left', 'right', 'h1', 'h2'], (11, 7): ['up', 'down', 'left', 'right', 'h2', 'h4', 'goal'], (11, 8): ['up', 'down', 'left', 'right', 'h2', 'h4', 'goal'], (11, 9): ['up', 'down', 'left', 'right', 'h2', 'h4', 'goal'], (11, 10): ['up', 'down', 'left', 'right', 'h2', 'h4', 'goal'], (11, 11): ['up', 'down', 'left', 'right', 'h2', 'h4', 'goal']} #old option space without goal #optionSpace = {(1, 1): ['up', 'down', 'left', 'right', 'h1', 'h3'], (1, 2): ['up', 'down', 'left', 'right', 'h1', 'h3'], (1, 3): ['up', 'down', 'left', 'right', 'h1', 'h3'], (1, 4): ['up', 'down', 'left', 'right', 'h1', 'h3'], (1, 5): ['up', 'down', 'left', 'right', 'h1', 'h3'], (1, 7): ['up', 'down', 'left', 'right', 'h3', 'h4'], (1, 8): ['up', 'down', 'left', 'right', 'h3', 'h4'], (1, 9): ['up', 'down', 'left', 'right', 'h3', 'h4'], (1, 10): ['up', 'down', 'left', 'right', 'h3', 'h4'], (1, 11): ['up', 'down', 'left', 'right', 'h3', 'h4'], (2, 1): ['up', 'down', 'left', 'right', 'h1', 'h3'], (2, 2): ['up', 'down', 'left', 'right', 'h1', 'h3'], (2, 3): ['up', 'down', 'left', 'right', 'h1', 'h3'], (2, 4): ['up', 'down', 'left', 'right', 'h1', 'h3'], (2, 5): ['up', 'down', 'left', 'right', 'h1', 'h3'], (2, 7): ['up', 'down', 'left', 'right', 'h3', 'h4'], (2, 8): ['up', 'down', 'left', 'right', 'h3', 'h4'], (2, 9): ['up', 'down', 'left', 'right', 'h3', 'h4'], (2, 10): ['up', 'down', 'left', 'right', 'h3', 'h4'], (2, 11): ['up', 'down', 'left', 'right', 'h3', 'h4'], (3, 1): ['up', 'down', 'left', 'right', 'h1', 'h3'], (3, 2): ['up', 'down', 'left', 'right', 'h1', 'h3'], (3, 3): ['up', 'down', 'left', 'right', 'h1', 'h3'], (3, 4): ['up', 'down', 'left', 'right', 'h1', 'h3'], (3, 5): ['up', 'down', 'left', 'right', 'h1', 'h3'], (3, 6): ['up', 'down', 'left', 'right', 'h3'], (3, 7): ['up', 'down', 'left', 'right', 'h3', 'h4'], (3, 8): ['up', 'down', 'left', 'right', 'h3', 'h4'], (3, 9): ['up', 'down', 'left', 'right', 'h3', 'h4'], (3, 10): ['up', 'down', 'left', 'right', 'h3', 'h4'], (3, 11): ['up', 'down', 'left', 'right', 'h3', 'h4'], (4, 1): ['up', 'down', 'left', 'right', 'h1', 'h3'], (4, 2): ['up', 'down', 'left', 'right', 'h1', 'h3'], (4, 3): ['up', 'down', 'left', 'right', 'h1', 'h3'], (4, 4): ['up', 'down', 'left', 'right', 'h1', 'h3'], (4, 5): ['up', 'down', 'left', 'right', 'h1', 'h3'], (4, 7): ['up', 'down', 'left', 'right', 'h3', 'h4'], (4, 8): ['up', 'down', 'left', 'right', 'h3', 'h4'], (4, 9): ['up', 'down', 'left', 'right', 'h3', 'h4'], (4, 10): ['up', 'down', 'left', 'right', 'h3', 'h4'], (4, 11): ['up', 'down', 'left', 'right', 'h3', 'h4'], (5, 1): ['up', 'down', 'left', 'right', 'h1', 'h3'], (5, 2): ['up', 'down', 'left', 'right', 'h1', 'h3'], (5, 3): ['up', 'down', 'left', 'right', 'h1', 'h3'], (5, 4): ['up', 'down', 'left', 'right', 'h1', 'h3'], (5, 5): ['up', 'down', 'left', 'right', 'h1', 'h3'], (5, 7): ['up', 'down', 'left', 'right', 'h3', 'h4'], (5, 8): ['up', 'down', 'left', 'right', 'h3', 'h4'], (5, 9): ['up', 'down', 'left', 'right', 'h3', 'h4'], (5, 10): ['up', 'down', 'left', 'right', 'h3', 'h4'], (5, 11): ['up', 'down', 'left', 'right', 'h3', 'h4'], (6, 2): ['up', 'down', 'left', 'right', 'h1'], (6, 7): ['up', 'down', 'left', 'right', 'h3', 'h4'], (6, 8): ['up', 'down', 'left', 'right', 'h3', 'h4'], (6, 9): ['up', 'down', 'left', 'right', 'h3', 'h4'], (6, 10): ['up', 'down', 'left', 'right', 'h3', 'h4'], (6, 11): ['up', 'down', 'left', 'right', 'h3', 'h4'], (7, 1): ['up', 'down', 'left', 'right', 'h1', 'h2'], (7, 2): ['up', 'down', 'left', 'right', 'h1', 'h2'], (7, 3): ['up', 'down', 'left', 'right', 'h1', 'h2'], (7, 4): ['up', 'down', 'left', 'right', 'h1', 'h2'], (7, 5): ['up', 'down', 'left', 'right', 'h1', 'h2'], (7, 9): ['up', 'down', 'left', 'right', 'h4'], (8, 1): ['up', 'down', 'left', 'right', 'h1', 'h2'], (8, 2): ['up', 'down', 'left', 'right', 'h1', 'h2'], (8, 3): ['up', 'down', 'left', 'right', 'h1', 'h2'], (8, 4): ['up', 'down', 'left', 'right', 'h1', 'h2'], (8, 5): ['up', 'down', 'left', 'right', 'h1', 'h2'], (8, 7): ['up', 'down', 'left', 'right', 'h2', 'h4'], (8, 8): ['up', 'down', 'left', 'right', 'h2', 'h4'], (8, 9): ['up', 'down', 'left', 'right', 'h2', 'h4'], (8, 10): ['up', 'down', 'left', 'right', 'h2', 'h4'], (8, 11): ['up', 'down', 'left', 'right', 'h2', 'h4'], (9, 1): ['up', 'down', 'left', 'right', 'h1', 'h2'], (9, 2): ['up', 'down', 'left', 'right', 'h1', 'h2'], (9, 3): ['up', 'down', 'left', 'right', 'h1', 'h2'], (9, 4): ['up', 'down', 'left', 'right', 'h1', 'h2'], (9, 5): ['up', 'down', 'left', 'right', 'h1', 'h2'], (9, 7): ['up', 'down', 'left', 'right', 'h2', 'h4'], (9, 8): ['up', 'down', 'left', 'right', 'h2', 'h4'], (9, 9): ['up', 'down', 'left', 'right', 'h2', 'h4'], (9, 10): ['up', 'down', 'left', 'right', 'h2', 'h4'], (9, 11): ['up', 'down', 'left', 'right', 'h2', 'h4'], (10, 1): ['up', 'down', 'left', 'right', 'h1', 'h2'], (10, 2): ['up', 'down', 'left', 'right', 'h1', 'h2'], (10, 3): ['up', 'down', 'left', 'right', 'h1', 'h2'], (10, 4): ['up', 'down', 'left', 'right', 'h1', 'h2'], (10, 5): ['up', 'down', 'left', 'right', 'h1', 'h2'], (10, 6): ['up', 'down', 'left', 'right', 'h2'], (10, 7): ['up', 'down', 'left', 'right', 'h2', 'h4'], (10, 8): ['up', 'down', 'left', 'right', 'h2', 'h4'], (10, 9): ['up', 'down', 'left', 'right', 'h2', 'h4'], (10, 10): ['up', 'down', 'left', 'right', 'h2', 'h4'], (10, 11): ['up', 'down', 'left', 'right', 'h2', 'h4'], (11, 1): ['up', 'down', 'left', 'right', 'h1', 'h2'], (11, 2): ['up', 'down', 'left', 'right', 'h1', 'h2'], (11, 3): ['up', 'down', 'left', 'right', 'h1', 'h2'], (11, 4): ['up', 'down', 'left', 'right', 'h1', 'h2'], (11, 5): ['up', 'down', 'left', 'right', 'h1', 'h2'], (11, 7): ['up', 'down', 'left', 'right', 'h2', 'h4'], (11, 8): ['up', 'down', 'left', 'right', 'h2', 'h4'], (11, 9): ['up', 'down', 'left', 'right', 'h2', 'h4'], (11, 10): ['up', 'down', 'left', 'right', 'h2', 'h4'], (11, 11): ['up', 'down', 'left', 'right', 'h2', 'h4']} """ primitive = ['up', 'down', 'left', 'right'] #for landmark options only for state in stateSet: for optionList in optionSpace[state]: toRemove = [] for choice in optionList: if choice in primitive: toRemove.append(choice) for element in toRemove: optionSpace[state].remove(element) """ optionSpaceFunction = lambda x: optionSpace[x] episodes = 500 alpha = 0.5 gamma = 0.9 epsilon = 0.9 convergenceTolerance = 0.000001 #availableOptions = ['up', 'down', 'left', 'right', 'h1', 'h2', 'h3', 'h4', 'goal'] availableOptions = ['h1', 'h2', 'h3', 'h4', 'goal'] QTable = qlsmdp.ql.createQTable(stateSet, availableOptions) getSPrime = qlsmdp.ql.GetSPrime(transitionFunction, stateSet) getOption = qlsmdp.ql.GetOption(epsilon, optionSpaceFunction) getQValue = qlsmdp.ql.GetQValue(alpha, gamma) qLearning = qlsmdp.QLearningSMDP(episodes, convergenceTolerance) QTable, policy = qLearning(stateSet, rewardFunction, getSPrime, getOption, getQValue, QTable, goalStates, optionSpaceFunction) getValues = qlsmdp.ql.GetV(convergenceTolerance, optionSpaceFunction) V = getValues(QTable) print("QTable: ") print(QTable) print("policy: ") print(policy) print("V Table: ") print(V)
def setUp(self): stateSet = [(i, j) for i in range(2) for j in range(2)] getNextState = tf.getNextState primitivePolicies = { 'up': (0, 1), 'down': (0, -1), 'right': (1, 0), 'left': (-1, 0) } primitiveSPrime = tf.GetPrimitiveSPrime(primitivePolicies, stateSet, getNextState) optionTerminations = {"h1": (0, 0)} landmarkSPrime = tf.GetLandmarkSPrime(optionTerminations) actionCost = -1 moveCost = -3 goalStates = [(0, 0)] goalReward = 10 primitiveReward = rf.GetPrimitiveOptionReward(actionCost, moveCost, goalStates, goalReward, primitiveSPrime) landmarkPolicies = { 'h1': { (0, 0): { (0, -1): 0.5, (-1, 0): 0.5 }, (0, 1): { (0, -1): 1.0 }, (1, 0): { (-1, 0): 1.0 }, (1, 1): { (0, -1): 0.5, (-1, 0): 0.5 } } } landmarkReward = rf.GetLandmarkOptionReward(actionCost, moveCost, goalStates, goalReward, landmarkPolicies, landmarkSPrime, getNextState) optionSPrime = { 'up': primitiveSPrime, 'down': primitiveSPrime, 'left': primitiveSPrime, 'right': primitiveSPrime, 'h1': landmarkSPrime } transitionFunction = tf.TransitionFunction(optionSPrime) optionReward = { 'up': primitiveReward, 'down': primitiveReward, 'left': primitiveReward, 'right': primitiveReward, 'h1': landmarkReward } rewardFunction = rf.RewardFunction(optionReward) universal = ['up', 'down', 'left', 'right', 'h1'] optionSpace = {state: universal for state in stateSet} optionSpaceFunction = lambda x: optionSpace[x] gamma = 0.9 convergenceTolerance = 0.00001 smdpSetUp = targetCode.SemiMDP(gamma, convergenceTolerance) V, self.policy = smdpSetUp(stateSet, transitionFunction, rewardFunction, optionSpaceFunction)
def main(): fullGrid = [(i, j) for i in range(13) for j in range(13)] border = [(0, 12), (1, 12), (2, 12), (3, 12), (4, 12), (5, 12), (6, 12), (7, 12), (8, 12), (9, 12), (10, 12), (11, 12), (12, 12), (0, 0), (1, 0), (2, 0), (3, 0), (4, 0), (5, 0), (6, 0), (7, 0), (8, 0), (9, 0), (10, 0), (11, 0), (12, 0), (0, 1), (0, 2), (0, 3), (0, 4), (0, 5), (0, 6), (0, 7), (0, 8), (0, 9), (0, 10), (0, 11), (12, 1), (12, 2), (12, 3), (12, 4), (12, 5), (12, 6), (12, 7), (12, 8), (12, 9), (12, 10), (12, 11)] hallways = [(6, 1), (6, 3), (6, 4), (6, 5), (6, 6), (11, 6), (9, 6), (8, 6), (7, 6), (5, 6), (4, 6), (2, 6), (1, 6), (7, 7), (7, 8), (7, 10), (7, 11)] for state in border: fullGrid.remove(state) for state in hallways: fullGrid.remove(state) stateSet = fullGrid getNextState = tf.getNextState primitivePolicies = { 'up': (0, 1), 'down': (0, -1), 'right': (1, 0), 'left': (-1, 0) } primitiveSPrime = tf.GetPrimitiveSPrime(primitivePolicies, stateSet, getNextState) optionTerminations = { "h1": (6, 2), "h2": (10, 6), "h3": (3, 6), "h4": (7, 9) } landmarkSPrime = tf.GetLandmarkSPrime(optionTerminations) optionSPrime = { 'up': primitiveSPrime, 'down': primitiveSPrime, 'left': primitiveSPrime, 'right': primitiveSPrime, 'h1': landmarkSPrime, 'h2': landmarkSPrime, 'h3': landmarkSPrime, 'h4': landmarkSPrime } transitionFunction = tf.TransitionFunction(optionSPrime) actionCost = -1 moveCost = -3 goalStates = [(9, 9)] goalReward = 10 primitiveReward = rf.GetPrimitiveOptionReward(actionCost, moveCost, goalStates, goalReward, primitiveSPrime) landmarkPolicies = { 'h1': { (1, 1): { (0, 1): 0.5, (1, 0): 0.5 }, (1, 2): { (1, 0): 1.0 }, (1, 3): { (0, -1): 0.5, (1, 0): 0.5 }, (1, 4): { (0, -1): 0.5, (1, 0): 0.5 }, (1, 5): { (0, -1): 0.5, (1, 0): 0.5 }, (2, 1): { (0, 1): 0.5, (1, 0): 0.5 }, (2, 2): { (1, 0): 1.0 }, (2, 3): { (0, -1): 0.5, (1, 0): 0.5 }, (2, 4): { (0, -1): 0.5, (1, 0): 0.5 }, (2, 5): { (0, -1): 0.5, (1, 0): 0.5 }, (3, 1): { (0, 1): 0.5, (1, 0): 0.5 }, (3, 2): { (1, 0): 1.0 }, (3, 3): { (0, -1): 0.5, (1, 0): 0.5 }, (3, 4): { (0, -1): 0.5, (1, 0): 0.5 }, (3, 5): { (0, -1): 0.5, (1, 0): 0.5 }, (4, 1): { (0, 1): 0.5, (1, 0): 0.5 }, (4, 2): { (1, 0): 1.0 }, (4, 3): { (0, -1): 0.5, (1, 0): 0.5 }, (4, 4): { (0, -1): 0.5, (1, 0): 0.5 }, (4, 5): { (0, -1): 0.5, (1, 0): 0.5 }, (5, 1): { (0, 1): 1.0 }, (5, 2): { (1, 0): 1.0 }, (5, 3): { (0, -1): 1.0 }, (5, 4): { (0, -1): 1.0 }, (5, 5): { (0, -1): 1.0 }, (7, 1): { (0, 1): 1.0 }, (7, 2): { (-1, 0): 1.0 }, (7, 3): { (0, -1): 1.0 }, (7, 4): { (0, -1): 1.0 }, (7, 5): { (0, -1): 1.0 }, (8, 1): { (0, 1): 0.5, (-1, 0): 0.5 }, (8, 2): { (-1, 0): 1.0 }, (8, 3): { (0, -1): 0.5, (-1, 0): 0.5 }, (8, 4): { (0, -1): 0.5, (-1, 0): 0.5 }, (8, 5): { (0, -1): 0.5, (-1, 0): 0.5 }, (9, 1): { (0, 1): 0.5, (-1, 0): 0.5 }, (9, 2): { (-1, 0): 1.0 }, (9, 3): { (0, -1): 0.5, (-1, 0): 0.5 }, (9, 4): { (0, -1): 0.5, (-1, 0): 0.5 }, (9, 5): { (0, -1): 0.5, (-1, 0): 0.5 }, (10, 1): { (0, 1): 0.5, (-1, 0): 0.5 }, (10, 2): { (-1, 0): 1.0 }, (10, 3): { (0, -1): 0.5, (-1, 0): 0.5 }, (10, 4): { (0, -1): 0.5, (-1, 0): 0.5 }, (10, 5): { (0, -1): 0.5, (-1, 0): 0.5 }, (11, 1): { (0, 1): 0.5, (-1, 0): 0.5 }, (11, 2): { (-1, 0): 1.0 }, (11, 3): { (0, -1): 0.5, (-1, 0): 0.5 }, (11, 4): { (0, -1): 0.5, (-1, 0): 0.5 }, (11, 5): { (0, -1): 0.5, (-1, 0): 0.5 }, (6, 2): { (0, 1): 0.5, (0, -1): 0.5 } }, 'h2': { (7, 1): { (0, 1): 0.5, (1, 0): 0.5 }, (7, 2): { (0, 1): 0.5, (1, 0): 0.5 }, (7, 3): { (0, 1): 0.5, (1, 0): 0.5 }, (7, 4): { (0, 1): 0.5, (1, 0): 0.5 }, (7, 5): { (1, 0): 1.0 }, (8, 1): { (0, 1): 0.5, (1, 0): 0.5 }, (8, 2): { (0, 1): 0.5, (1, 0): 0.5 }, (8, 3): { (0, 1): 0.5, (1, 0): 0.5 }, (8, 4): { (0, 1): 0.5, (1, 0): 0.5 }, (8, 5): { (1, 0): 1.0 }, (9, 1): { (0, 1): 0.5, (1, 0): 0.5 }, (9, 2): { (0, 1): 0.5, (1, 0): 0.5 }, (9, 3): { (0, 1): 0.5, (1, 0): 0.5 }, (9, 4): { (0, 1): 0.5, (1, 0): 0.5 }, (9, 5): { (1, 0): 1.0 }, (10, 1): { (0, 1): 1.0 }, (10, 2): { (0, 1): 1.0 }, (10, 3): { (0, 1): 1.0 }, (10, 4): { (0, 1): 1.0 }, (10, 5): { (0, 1): 1.0 }, (11, 1): { (0, 1): 0.5, (-1, 0): 0.5 }, (11, 2): { (0, 1): 0.5, (-1, 0): 0.5 }, (11, 3): { (0, 1): 0.5, (-1, 0): 0.5 }, (11, 4): { (0, 1): 0.5, (-1, 0): 0.5 }, (11, 5): { (-1, 0): 1.0 }, (8, 7): { (1, 0): 1.0 }, (8, 8): { (0, -1): 0.5, (1, 0): 0.5 }, (8, 9): { (0, -1): 0.5, (1, 0): 0.5 }, (8, 10): { (0, -1): 0.5, (1, 0): 0.5 }, (8, 11): { (0, -1): 0.5, (1, 0): 0.5 }, (9, 7): { (1, 0): 1.0 }, (9, 8): { (0, -1): 0.5, (1, 0): 0.5 }, (9, 9): { (0, -1): 0.5, (1, 0): 0.5 }, (9, 10): { (0, -1): 0.5, (1, 0): 0.5 }, (9, 11): { (0, -1): 0.5, (1, 0): 0.5 }, (10, 7): { (0, -1): 1.0 }, (10, 8): { (0, -1): 1.0 }, (10, 9): { (0, -1): 1.0 }, (10, 10): { (0, -1): 1.0 }, (10, 11): { (0, -1): 1.0 }, (11, 7): { (-1, 0): 1.0 }, (11, 8): { (0, -1): 0.5, (-1, 0): 0.5 }, (11, 9): { (0, -1): 0.5, (-1, 0): 0.5 }, (11, 10): { (0, -1): 0.5, (-1, 0): 0.5 }, (11, 11): { (0, -1): 0.5, (-1, 0): 0.5 }, (10, 6): { (1, 0): 0.5, (-1, 0): 0.5 } }, 'h3': { (1, 1): { (0, 1): 0.5, (1, 0): 0.5 }, (1, 2): { (0, 1): 0.5, (1, 0): 0.5 }, (1, 3): { (0, 1): 0.5, (1, 0): 0.5 }, (1, 4): { (0, 1): 0.5, (1, 0): 0.5 }, (1, 5): { (1, 0): 1.0 }, (2, 1): { (0, 1): 0.5, (1, 0): 0.5 }, (2, 2): { (0, 1): 0.5, (1, 0): 0.5 }, (2, 3): { (0, 1): 0.5, (1, 0): 0.5 }, (2, 4): { (0, 1): 0.5, (1, 0): 0.5 }, (2, 5): { (1, 0): 1.0 }, (3, 1): { (0, 1): 1.0 }, (3, 2): { (0, 1): 1.0 }, (3, 3): { (0, 1): 1.0 }, (3, 4): { (0, 1): 1.0 }, (3, 5): { (0, 1): 1.0 }, (4, 1): { (0, 1): 0.5, (-1, 0): 0.5 }, (4, 2): { (0, 1): 0.5, (-1, 0): 0.5 }, (4, 3): { (0, 1): 0.5, (-1, 0): 0.5 }, (4, 4): { (0, 1): 0.5, (-1, 0): 0.5 }, (4, 5): { (-1, 0): 1.0 }, (5, 1): { (0, 1): 0.5, (-1, 0): 0.5 }, (5, 2): { (0, 1): 0.5, (-1, 0): 0.5 }, (5, 3): { (0, 1): 0.5, (-1, 0): 0.5 }, (5, 4): { (0, 1): 0.5, (-1, 0): 0.5 }, (5, 5): { (-1, 0): 1.0 }, (1, 7): { (1, 0): 1.0 }, (1, 8): { (0, -1): 0.5, (1, 0): 0.5 }, (1, 9): { (0, -1): 0.5, (1, 0): 0.5 }, (1, 10): { (0, -1): 0.5, (1, 0): 0.5 }, (1, 11): { (0, -1): 0.5, (1, 0): 0.5 }, (2, 7): { (1, 0): 1.0 }, (2, 8): { (0, -1): 0.5, (1, 0): 0.5 }, (2, 9): { (0, -1): 0.5, (1, 0): 0.5 }, (2, 10): { (0, -1): 0.5, (1, 0): 0.5 }, (2, 11): { (0, -1): 0.5, (1, 0): 0.5 }, (3, 7): { (0, -1): 1.0 }, (3, 8): { (0, -1): 1.0 }, (3, 9): { (0, -1): 1.0 }, (3, 10): { (0, -1): 1.0 }, (3, 11): { (0, -1): 1.0 }, (4, 7): { (-1, 0): 1.0 }, (4, 8): { (0, -1): 0.5, (-1, 0): 0.5 }, (4, 9): { (0, -1): 0.5, (-1, 0): 0.5 }, (4, 10): { (0, -1): 0.5, (-1, 0): 0.5 }, (4, 11): { (0, -1): 0.5, (-1, 0): 0.5 }, (5, 7): { (-1, 0): 1.0 }, (5, 8): { (0, -1): 0.5, (-1, 0): 0.5 }, (5, 9): { (0, -1): 0.5, (-1, 0): 0.5 }, (5, 10): { (0, -1): 0.5, (-1, 0): 0.5 }, (5, 11): { (0, -1): 0.5, (-1, 0): 0.5 }, (6, 7): { (-1, 0): 1.0 }, (6, 8): { (0, -1): 0.5, (-1, 0): 0.5 }, (6, 9): { (0, -1): 0.5, (-1, 0): 0.5 }, (6, 10): { (0, -1): 0.5, (-1, 0): 0.5 }, (6, 11): { (0, -1): 0.5, (-1, 0): 0.5 }, (3, 6): { (1, 0): 0.5, (-1, 0): 0.5 } }, 'h4': { (8, 7): { (0, 1): 1.0 }, (8, 8): { (0, 1): 1.0 }, (8, 9): { (-1, 0): 1.0 }, (8, 10): { (0, -1): 1.0 }, (8, 11): { (0, -1): 1.0 }, (9, 7): { (0, 1): 0.5, (-1, 0): 0.5 }, (9, 8): { (0, 1): 0.5, (-1, 0): 0.5 }, (9, 9): { (-1, 0): 1.0 }, (9, 10): { (0, -1): 0.5, (-1, 0): 0.5 }, (9, 11): { (0, -1): 0.5, (-1, 0): 0.5 }, (10, 7): { (0, 1): 0.5, (-1, 0): 0.5 }, (10, 8): { (0, 1): 0.5, (-1, 0): 0.5 }, (10, 9): { (-1, 0): 1.0 }, (10, 10): { (0, -1): 0.5, (-1, 0): 0.5 }, (10, 11): { (0, -1): 0.5, (-1, 0): 0.5 }, (11, 7): { (0, 1): 0.5, (-1, 0): 0.5 }, (11, 8): { (0, 1): 0.5, (-1, 0): 0.5 }, (11, 9): { (-1, 0): 1.0 }, (11, 10): { (0, -1): 0.5, (-1, 0): 0.5 }, (11, 11): { (0, -1): 0.5, (-1, 0): 0.5 }, (1, 7): { (0, 1): 0.5, (1, 0): 0.5 }, (1, 8): { (0, 1): 0.5, (1, 0): 0.5 }, (1, 9): { (1, 0): 1.0 }, (1, 10): { (0, -1): 0.5, (1, 0): 0.5 }, (1, 11): { (0, -1): 0.5, (1, 0): 0.5 }, (2, 7): { (0, 1): 0.5, (1, 0): 0.5 }, (2, 8): { (0, 1): 0.5, (1, 0): 0.5 }, (2, 9): { (1, 0): 1.0 }, (2, 10): { (0, -1): 0.5, (1, 0): 0.5 }, (2, 11): { (0, -1): 0.5, (1, 0): 0.5 }, (3, 7): { (0, 1): 0.5, (1, 0): 0.5 }, (3, 8): { (0, 1): 0.5, (1, 0): 0.5 }, (3, 9): { (1, 0): 1.0 }, (3, 10): { (0, -1): 0.5, (1, 0): 0.5 }, (3, 11): { (0, -1): 0.5, (1, 0): 0.5 }, (4, 7): { (0, 1): 0.5, (1, 0): 0.5 }, (4, 8): { (0, 1): 0.5, (1, 0): 0.5 }, (4, 9): { (1, 0): 1.0 }, (4, 10): { (0, -1): 0.5, (1, 0): 0.5 }, (4, 11): { (0, -1): 0.5, (1, 0): 0.5 }, (5, 7): { (0, 1): 0.5, (1, 0): 0.5 }, (5, 8): { (0, 1): 0.5, (1, 0): 0.5 }, (5, 9): { (1, 0): 1.0 }, (5, 10): { (0, -1): 0.5, (1, 0): 0.5 }, (5, 11): { (0, -1): 0.5, (1, 0): 0.5 }, (6, 7): { (0, 1): 1.0 }, (6, 8): { (0, 1): 1.0 }, (6, 9): { (1, 0): 1.0 }, (6, 10): { (0, -1): 1.0 }, (6, 11): { (0, -1): 1.0 }, (7, 9): { (0, 1): 0.5, (0, -1): 0.5 } } } landmarkReward = rf.GetLandmarkOptionReward(actionCost, moveCost, goalStates, goalReward, landmarkPolicies, landmarkSPrime, getNextState) optionReward = { 'up': primitiveReward, 'down': primitiveReward, 'left': primitiveReward, 'right': primitiveReward, 'h1': landmarkReward, 'h2': landmarkReward, 'h3': landmarkReward, 'h4': landmarkReward } rewardFunction = rf.RewardFunction(optionReward) optionSpace = { (1, 1): ['up', 'down', 'left', 'right', 'h1', 'h3'], (1, 2): ['up', 'down', 'left', 'right', 'h1', 'h3'], (1, 3): ['up', 'down', 'left', 'right', 'h1', 'h3'], (1, 4): ['up', 'down', 'left', 'right', 'h1', 'h3'], (1, 5): ['up', 'down', 'left', 'right', 'h1', 'h3'], (1, 7): ['up', 'down', 'left', 'right', 'h3', 'h4'], (1, 8): ['up', 'down', 'left', 'right', 'h3', 'h4'], (1, 9): ['up', 'down', 'left', 'right', 'h3', 'h4'], (1, 10): ['up', 'down', 'left', 'right', 'h3', 'h4'], (1, 11): ['up', 'down', 'left', 'right', 'h3', 'h4'], (2, 1): ['up', 'down', 'left', 'right', 'h1', 'h3'], (2, 2): ['up', 'down', 'left', 'right', 'h1', 'h3'], (2, 3): ['up', 'down', 'left', 'right', 'h1', 'h3'], (2, 4): ['up', 'down', 'left', 'right', 'h1', 'h3'], (2, 5): ['up', 'down', 'left', 'right', 'h1', 'h3'], (2, 7): ['up', 'down', 'left', 'right', 'h3', 'h4'], (2, 8): ['up', 'down', 'left', 'right', 'h3', 'h4'], (2, 9): ['up', 'down', 'left', 'right', 'h3', 'h4'], (2, 10): ['up', 'down', 'left', 'right', 'h3', 'h4'], (2, 11): ['up', 'down', 'left', 'right', 'h3', 'h4'], (3, 1): ['up', 'down', 'left', 'right', 'h1', 'h3'], (3, 2): ['up', 'down', 'left', 'right', 'h1', 'h3'], (3, 3): ['up', 'down', 'left', 'right', 'h1', 'h3'], (3, 4): ['up', 'down', 'left', 'right', 'h1', 'h3'], (3, 5): ['up', 'down', 'left', 'right', 'h1', 'h3'], (3, 6): ['up', 'down', 'left', 'right', 'h3'], (3, 7): ['up', 'down', 'left', 'right', 'h3', 'h4'], (3, 8): ['up', 'down', 'left', 'right', 'h3', 'h4'], (3, 9): ['up', 'down', 'left', 'right', 'h3', 'h4'], (3, 10): ['up', 'down', 'left', 'right', 'h3', 'h4'], (3, 11): ['up', 'down', 'left', 'right', 'h3', 'h4'], (4, 1): ['up', 'down', 'left', 'right', 'h1', 'h3'], (4, 2): ['up', 'down', 'left', 'right', 'h1', 'h3'], (4, 3): ['up', 'down', 'left', 'right', 'h1', 'h3'], (4, 4): ['up', 'down', 'left', 'right', 'h1', 'h3'], (4, 5): ['up', 'down', 'left', 'right', 'h1', 'h3'], (4, 7): ['up', 'down', 'left', 'right', 'h3', 'h4'], (4, 8): ['up', 'down', 'left', 'right', 'h3', 'h4'], (4, 9): ['up', 'down', 'left', 'right', 'h3', 'h4'], (4, 10): ['up', 'down', 'left', 'right', 'h3', 'h4'], (4, 11): ['up', 'down', 'left', 'right', 'h3', 'h4'], (5, 1): ['up', 'down', 'left', 'right', 'h1', 'h3'], (5, 2): ['up', 'down', 'left', 'right', 'h1', 'h3'], (5, 3): ['up', 'down', 'left', 'right', 'h1', 'h3'], (5, 4): ['up', 'down', 'left', 'right', 'h1', 'h3'], (5, 5): ['up', 'down', 'left', 'right', 'h1', 'h3'], (5, 7): ['up', 'down', 'left', 'right', 'h3', 'h4'], (5, 8): ['up', 'down', 'left', 'right', 'h3', 'h4'], (5, 9): ['up', 'down', 'left', 'right', 'h3', 'h4'], (5, 10): ['up', 'down', 'left', 'right', 'h3', 'h4'], (5, 11): ['up', 'down', 'left', 'right', 'h3', 'h4'], (6, 2): ['up', 'down', 'left', 'right', 'h1'], (6, 7): ['up', 'down', 'left', 'right', 'h3', 'h4'], (6, 8): ['up', 'down', 'left', 'right', 'h3', 'h4'], (6, 9): ['up', 'down', 'left', 'right', 'h3', 'h4'], (6, 10): ['up', 'down', 'left', 'right', 'h3', 'h4'], (6, 11): ['up', 'down', 'left', 'right', 'h3', 'h4'], (7, 1): ['up', 'down', 'left', 'right', 'h1', 'h2'], (7, 2): ['up', 'down', 'left', 'right', 'h1', 'h2'], (7, 3): ['up', 'down', 'left', 'right', 'h1', 'h2'], (7, 4): ['up', 'down', 'left', 'right', 'h1', 'h2'], (7, 5): ['up', 'down', 'left', 'right', 'h1', 'h2'], (7, 9): ['up', 'down', 'left', 'right', 'h4'], (8, 1): ['up', 'down', 'left', 'right', 'h1', 'h2'], (8, 2): ['up', 'down', 'left', 'right', 'h1', 'h2'], (8, 3): ['up', 'down', 'left', 'right', 'h1', 'h2'], (8, 4): ['up', 'down', 'left', 'right', 'h1', 'h2'], (8, 5): ['up', 'down', 'left', 'right', 'h1', 'h2'], (8, 7): ['up', 'down', 'left', 'right', 'h2', 'h4'], (8, 8): ['up', 'down', 'left', 'right', 'h2', 'h4'], (8, 9): ['up', 'down', 'left', 'right', 'h2', 'h4'], (8, 10): ['up', 'down', 'left', 'right', 'h2', 'h4'], (8, 11): ['up', 'down', 'left', 'right', 'h2', 'h4'], (9, 1): ['up', 'down', 'left', 'right', 'h1', 'h2'], (9, 2): ['up', 'down', 'left', 'right', 'h1', 'h2'], (9, 3): ['up', 'down', 'left', 'right', 'h1', 'h2'], (9, 4): ['up', 'down', 'left', 'right', 'h1', 'h2'], (9, 5): ['up', 'down', 'left', 'right', 'h1', 'h2'], (9, 7): ['up', 'down', 'left', 'right', 'h2', 'h4'], (9, 8): ['up', 'down', 'left', 'right', 'h2', 'h4'], (9, 9): ['up', 'down', 'left', 'right', 'h2', 'h4'], (9, 10): ['up', 'down', 'left', 'right', 'h2', 'h4'], (9, 11): ['up', 'down', 'left', 'right', 'h2', 'h4'], (10, 1): ['up', 'down', 'left', 'right', 'h1', 'h2'], (10, 2): ['up', 'down', 'left', 'right', 'h1', 'h2'], (10, 3): ['up', 'down', 'left', 'right', 'h1', 'h2'], (10, 4): ['up', 'down', 'left', 'right', 'h1', 'h2'], (10, 5): ['up', 'down', 'left', 'right', 'h1', 'h2'], (10, 6): ['up', 'down', 'left', 'right', 'h2'], (10, 7): ['up', 'down', 'left', 'right', 'h2', 'h4'], (10, 8): ['up', 'down', 'left', 'right', 'h2', 'h4'], (10, 9): ['up', 'down', 'left', 'right', 'h2', 'h4'], (10, 10): ['up', 'down', 'left', 'right', 'h2', 'h4'], (10, 11): ['up', 'down', 'left', 'right', 'h2', 'h4'], (11, 1): ['up', 'down', 'left', 'right', 'h1', 'h2'], (11, 2): ['up', 'down', 'left', 'right', 'h1', 'h2'], (11, 3): ['up', 'down', 'left', 'right', 'h1', 'h2'], (11, 4): ['up', 'down', 'left', 'right', 'h1', 'h2'], (11, 5): ['up', 'down', 'left', 'right', 'h1', 'h2'], (11, 7): ['up', 'down', 'left', 'right', 'h2', 'h4'], (11, 8): ['up', 'down', 'left', 'right', 'h2', 'h4'], (11, 9): ['up', 'down', 'left', 'right', 'h2', 'h4'], (11, 10): ['up', 'down', 'left', 'right', 'h2', 'h4'], (11, 11): ['up', 'down', 'left', 'right', 'h2', 'h4'] } optionSpaceFunction = lambda x: optionSpace[x] gamma = 0.9 convergenceTolerance = 0.00001 smdpResult = smdp.SemiMDP(gamma, convergenceTolerance) V, policy = smdpResult(stateSet, transitionFunction, rewardFunction, optionSpaceFunction) print(V) print(policy)