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
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
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
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
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
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
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)
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)
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
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
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
def planner(viewer): solve(Towers3.INIT, Towers3.GOAL, Towers3.get_actions(), viewer=viewer)