Beispiel #1
0
    def generate_action_list(self):
        # solve for show (user can click through)
        subproc = subprocess.Popen([
            'python', 'TowerofHanoi/strips.py',
            'TowerofHanoi/towers2_strips.txt'
        ],
                                   stdout=subprocess.PIPE)

        plan = ''
        while True:
            try:
                out = subproc.stdout.read(1)
            except:
                break
            if out == '':
                break
            else:
                plan += out
        print plan

        hl_actions = []  # high level action
        for line in plan.split('\n'):
            words = line.strip().split()
            if len(words) == 3:
                (what, frm, to) = words
                hl_actions.append((what, frm, to))

        from towers import Towers2 as towers

        action_list = []
        action_list.extend(ACTIONS_TURN_LEFT_TO_BEGIN)
        state = copy(towers.INIT)
        at = towers.Pole1
        for (what, frm, to) in hl_actions:
            frm_pole = towers.get_pole(state, frm)
            to_pole = towers.get_pole(state, to)
            print what, frm, to, at, frm_pole, to_pole
            if at != frm_pole:
                action_list += towers.MOVES[(at, frm_pole)]
            action_list += towers.CARRY_MOVES[(frm_pole, to_pole)]
            towers.Move(state, what, frm, to)
            at = to_pole

        action_list.extend(ACTIONS_CELEBERATE)
        return action_list
Beispiel #2
0
    def generate_action_list(self):
        if self.stop_flag:
            return [0]

        subproc = subprocess.Popen(
            ['python', 'TowerofHanoi/text_interface.py'],
            stdout=subprocess.PIPE)
        plan = ''
        while True:
            try:
                out = subproc.stdout.read(1)
            except:
                break
            if out == '':
                break
            else:
                plan += out

        plan = plan.strip()
        plan = plan.replace("Disk ", "Disk").replace("Pole ", "Pole")
        plan = plan.replace("disk ", "disk").replace("pole ", "pole")
        print "Plan is:"
        print plan

        if plan == "close":
            self.stop_flag = True
            return [0]

        action_list = []
        if self.rotate_first:
            self.rotate_first = False
            action_list.extend(ACTIONS_TURN_LEFT_TO_BEGIN)

        if plan.isspace(
        ) or not plan:  #if it's an empty string or contains only whitespace
            action_list.extend(ACTIONS_BAD_COMMAND)
            return action_list

        parsed_plan = self.semantic_parser(plan)

        state = self.global_state
        at = self.global_at

        from towers import Towers2 as towers

        words = parsed_plan.strip().split()
        (command) = words[0]

        if command == 'Mov':
            (what, frm, to) = words[1:]
            frm_pole = towers.get_pole(state, frm)
            to_pole = towers.get_pole(state, to)
            print what, frm, to, at, frm_pole, to_pole
            if at != frm_pole:
                action_list += towers.MOVES[(at, frm_pole)]
            action_list += towers.CARRY_MOVES[(frm_pole, to_pole)]
            towers.Move(state, what, frm, to)
            at = to_pole

        elif command == 'Pick':
            (what, frm) = words[1:]
            frm_pole = towers.get_pole(state, frm)
            if at != frm_pole:
                action_list += towers.MOVES[(at, frm_pole)]
            action_list += [3]  #Pick up
            towers.Move(state, what, frm, frm)
            at = frm_pole

        elif command == 'Put':
            (what, to) = words[1:]
            to_pole = towers.get_pole(state, to)
            if at != to_pole:
                action_list += towers.MOVES[(at, to_pole)]
            action_list += [2]  #Put Down
            towers.Move(state, what, to, to)
            at = to_pole
        else:
            action_list.extend(ACTIONS_BAD_COMMAND)

        self.global_state = state
        self.global_at = at

        return action_list
Beispiel #3
0
    def get_action_queue(self):
        import subprocess
        # solve for show (user can click through)
        subproc = subprocess.Popen(['python', 'BlocksTower/text_interface.py'],
                                   stdout=subprocess.PIPE)
        plan = ''
        while True:
            try:
                out = subproc.stdout.read(1)
            except:
                break
            if out == '':
                break
            else:
                plan += out
        print plan

        parsed_plan = self.semantic_parser(plan)

        if (self.action_queue == [10]):
            action_queue = [5]
        else:
            action_queue = []

        state = self.global_state
        at = self.global_at

        from towers import Towers2 as towers

        words = parsed_plan.strip().split()
        (command) = words[0]

        if command == 'Mov':
            (what, frm, to) = words[1:]
            frm_pole = towers.get_pole(state, frm)
            to_pole = towers.get_pole(state, to)
            print what, frm, to, at, frm_pole, to_pole
            if at != frm_pole:
                action_queue += towers.MOVES[(at, frm_pole)]
            action_queue += towers.CARRY_MOVES[(frm_pole, to_pole)]
            towers.Move(state, what, frm, to)
            at = to_pole

        elif command == 'Pick':
            (what, frm) = words[1:]
            frm_pole = towers.get_pole(state, frm)
            if at != frm_pole:
                action_queue += towers.MOVES[(at, frm_pole)]
            action_queue += [3]  #Pick up
            towers.Move(state, what, frm, frm)
            at = frm_pole

        elif command == 'Put':
            (what, to) = words[1:]
            to_pole = towers.get_pole(state, to)
            if at != to_pole:
                action_queue += towers.MOVES[(at, to_pole)]
            action_queue += [2]  #Put Down
            towers.Move(state, what, to, to)
            at = to_pole

        self.global_state = state
        self.global_at = at

        action_queue.extend(ACTIONS_CELEBERATE)
        return action_queue