Esempio n. 1
0
    def get_action_queue(self):
        import state_space_search
        from towers import Towers3 as towers
        import subprocess

        # solve for show (user can click through)
        subproc = subprocess.Popen(['python', 'BlocksTower/state_space_search.py'], stdout=subprocess.PIPE)
        plan = ''
        while True:
            try:
                out = subproc.stdout.read(1)
            except:
                break
            if out == '':
                break
            else:
                plan += out
        # actually solve to get the plan of actions
        plan = state_space_search.solve(towers.INIT, towers.GOAL, towers.get_actions())
        action_queue = ACTIONS_BEGIN 
        state = copy(towers.INIT)
        at = towers.Pole1
        for (move, what, frm, to) in plan:
            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)]
            move(state, what, frm, to)
            at = to_pole

        action_queue.extend(ACTIONS_CELEBERATE)
        return action_queue
Esempio n. 2
0
    def generate_action_list(self):
        import state_space_search
        from towers import Towers3 as towers

        # solve for show (user can click through)
        subproc = subprocess.Popen(["python", "TowerofHanoi/state_space_search.py"], stdout=subprocess.PIPE)
        plan = ""
        while True:
            try:
                out = subproc.stdout.read(1)
            except:
                break
            if out == "":
                break
            else:
                plan += out
        # actually solve to get the plan of actions
        plan = state_space_search.solve(towers.INIT, towers.GOAL, towers.get_actions())
        action_list = []
        action_list.extend(ACTIONS_TURN_LEFT_TO_BEGIN)
        state = copy(towers.INIT)
        at = towers.Pole1
        for (move, what, frm, to) in plan:
            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)]
            move(state, what, frm, to)
            at = to_pole

        action_list.extend(ACTIONS_CELEBERATE)
        return action_list
Esempio n. 3
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
Esempio n. 4
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
Esempio n. 5
0
    def get_action_queue(self):
        import subprocess
        # solve for show (user can click through)
        subproc = subprocess.Popen(['python', 'BlocksTower/strips.py', 'BlocksTower/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_queue = ACTIONS_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_queue += towers.MOVES[(at, frm_pole)]
            action_queue += towers.CARRY_MOVES[(frm_pole, to_pole)]
            towers.Move(state, what, frm, to)
            at = to_pole

        action_queue.extend(ACTIONS_CELEBERATE)
        return action_queue
Esempio n. 6
0
    def generate_action_list(self):
        import state_space_search
        from towers import Towers3 as towers

        # solve for show (user can click through)
        subproc = subprocess.Popen(
            ['python', 'TowerofHanoi/state_space_search.py'],
            stdout=subprocess.PIPE)
        plan = ''
        while True:
            try:
                out = subproc.stdout.read(1)
            except:
                break
            if out == '':
                break
            else:
                plan += out
        # actually solve to get the plan of actions
        plan = state_space_search.solve(towers.INIT, towers.GOAL,
                                        towers.get_actions())
        action_list = []
        action_list.extend(ACTIONS_TURN_LEFT_TO_BEGIN)
        state = copy(towers.INIT)
        at = towers.Pole1
        for (move, what, frm, to) in plan:
            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)]
            move(state, what, frm, to)
            at = to_pole

        action_list.extend(ACTIONS_CELEBERATE)
        return action_list
Esempio n. 7
0
 def show_state(self, state, depth=0, plan=[]):
     """ show the state evaluated at the depth and the specified plan"""
     if self.lock:
         self.lock.acquire()
     while depth > len(self.canvases) - 1:
         self.push_canvas()
     for i in range(depth, len(self.canvases)):
         self.clear_canvas(self.canvases[i])
     canvas = self.canvases[depth]
     for disk in Towers3.DISKS:
         if self.handles[(canvas, disk)]:
             canvas.delete(self.handles[(canvas, disk)])
             self.handles[(canvas, disk)] = None
         h = get_height(state, disk) * DH
         pole = Towers3.get_pole(state, disk)
         if pole is not None:
             x = X[pole]
             color = C[disk]
             width = W[disk]
             self.handles[(canvas,disk)] = \
                 canvas.create_rectangle(x-width/2, 150/2-h, x+width/2, 130/2 - h, fill = color)
Esempio n. 8
0
 def show_state(self, state, depth = 0, plan = []):
     """ show the state evaluated at the depth and the specified plan"""
     if self.lock:
         self.lock.acquire()
     while depth > len(self.canvases) - 1:
         self.push_canvas()
     for i in range(depth, len(self.canvases)):
         self.clear_canvas(self.canvases[i])
     canvas = self.canvases[depth]
     for disk in Towers3.DISKS:
         if self.handles[(canvas,disk)]:
             canvas.delete(self.handles[(canvas,disk)])
             self.handles[(canvas,disk)] = None
         h = get_height(state, disk) * DH
         pole = Towers3.get_pole(state, disk)
         if pole is not None:
             x = X[pole]
             color = C[disk]
             width = W[disk]
             self.handles[(canvas,disk)] = \
                 canvas.create_rectangle(x-width/2, 150/2-h, x+width/2, 130/2 - h, fill = color)
Esempio n. 9
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
Esempio n. 10
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
Esempio n. 11
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
Esempio n. 12
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
Esempio n. 13
0
 def planner(viewer):
     solve(Towers3.INIT, Towers3.GOAL, Towers3.get_actions(), viewer=viewer)