def makeRandomMove(state, n, lastAction) : spacePos = getSpacePosition(state) validActions = getValidActions(spacePos, n) action = random.choice(validActions) # Do not go to previous position just yet. while True: if lastAction == "up": if action == "down": validActions.remove(action) action = random.choice(validActions) else: break elif lastAction == "down": if action == "up": validActions.remove(action) action = random.choice(validActions) else: break elif lastAction == "left": if action == "right": validActions.remove(action) action = random.choice(validActions) else: break elif lastAction == "right": if action == "left": validActions.remove(action) action = random.choice(validActions) else: break else: break lastAction = action spacePosition = getSpacePosition(state) if action == "up" : targetPosition = [spacePosition[0] - 1, spacePosition[1]] elif action == "down" : targetPosition = [spacePosition[0] + 1, spacePosition[1]] elif action == "left" : targetPosition = [spacePosition[0], spacePosition[1] - 1] elif action == "right" : targetPosition = [spacePosition[0], spacePosition[1] + 1] else : print "ERROR: invalid action" retState = swapValuesInPuzzle(spacePosition, targetPosition, state) return (retState, lastAction)
def makeRandomMove(state, n, lastAction): spacePos = getSpacePosition(state) validActions = getValidActions(spacePos, n) action = random.choice(validActions) # Do not go to previous position just yet. while True: if lastAction == "up": if action == "down": validActions.remove(action) action = random.choice(validActions) else: break elif lastAction == "down": if action == "up": validActions.remove(action) action = random.choice(validActions) else: break elif lastAction == "left": if action == "right": validActions.remove(action) action = random.choice(validActions) else: break elif lastAction == "right": if action == "left": validActions.remove(action) action = random.choice(validActions) else: break else: break lastAction = action spacePosition = getSpacePosition(state) if action == "up": targetPosition = [spacePosition[0] - 1, spacePosition[1]] elif action == "down": targetPosition = [spacePosition[0] + 1, spacePosition[1]] elif action == "left": targetPosition = [spacePosition[0], spacePosition[1] - 1] elif action == "right": targetPosition = [spacePosition[0], spacePosition[1] + 1] else: print "ERROR: invalid action" retState = swapValuesInPuzzle(spacePosition, targetPosition, state) return (retState, lastAction)
def actions(self, state): """Returns the actions that can be executed in the state""" return getValidActions(getSpacePosition(state), self.n)