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): 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