コード例 #1
0
    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)
コード例 #2
0
    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)
コード例 #3
0
ファイル: testQLearning.py プロジェクト: adelchan07/smdp
 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)
コード例 #4
0
    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)
コード例 #5
0
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)
コード例 #6
0
    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)
コード例 #7
0
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)
コード例 #8
0
ファイル: testSemiMDP.py プロジェクト: adelchan07/smdp
    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)
コード例 #9
0
ファイル: valueIterationMain.py プロジェクト: adelchan07/smdp
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)