def A_STAR_search(wall_li,start_x,start_y,end_x,end_y,rows,cols,): file=open('fitness_data.txt','w') step = 0 path = [] node_li = [] close_li = [] init_node = Position(start_x,start_y) end_node = Position(end_x,end_y) close_li.append(init_node) path.append(init_node) print "init_node " + repr(init_node) print "CLOSE " + repr(close_li) adj_node_li = get_Adj_Node(wall_li,init_node,rows,cols,close_li) print "adjacent node " + repr(adj_node_li) open_li = get_Optional_Pos(adj_node_li,close_li,init_node,end_node) print "OPEN" + repr(open_li) open_li = sorted(open_li, key=lambda individual: individual.fitness) node = Node(init_node,open_li) node_li.append(node) print "Node" + repr(node) print "="*30 while True: step += 1 if open_li: individual = open_li[0] fitness = individual.get_Fitness() file.write(repr(fitness) + "\n") open_li.remove(individual) next_node = individual.get_Pos() print "next_node " + repr(next_node) close_li.append(next_node) path.append(next_node) print "CLOSE " + repr(close_li) adj_node_li = get_Adj_Node(wall_li,next_node,rows,cols,close_li) print "adjacent node " + repr(adj_node_li) open_li = get_Optional_Pos(adj_node_li,close_li,next_node,end_node) print "OPEN" + repr(open_li) open_li = sorted(open_li, key=lambda individual:individual.fitness) node = Node(next_node,open_li) node_li.append(node) print "="*30 else: while True: print "dead road" jmp = False for i in node_li[::-1]: child_node = i.get_Child_Node() if child_node: parent_node = i.get_Parent_Node() path.append(parent_node) open_li = child_node print open_li jmp = True else: next_node = close_li.pop() path.append(next_node) node_li.remove(i) if jmp:break if jmp:break next_x = next_node.get_X() next_y = next_node.get_Y() if next_x == end_x and next_y == end_y: print "search down..." print "total step: " + repr(step) file.close() break return path
def DFS_search(wall_li,rows,cols,start_x,start_y,end_x,end_y): #node initial step = 0 print step path = [] node_li = [] visited_li = [] init_node = Position(start_x,start_y) print "節點 " + repr(init_node) init_child_node = get_Adj_Node(wall_li,init_node,rows,cols,visited_li) visited_li.append(init_node) path.append(init_node) next_node = random.choice(init_child_node) print "next node " + repr(next_node) init_child_node.remove(next_node) print "子節點 " + repr(init_child_node) node = Node(init_node,init_child_node) node_li.append(node) print "節點狀態 " + repr(node) print "-----------------------------" while 1: step += 1 print "節點 " + repr(next_node) next_child_node = get_Adj_Node(wall_li,next_node,rows,cols,visited_li) if next_child_node: visited_li.append(next_node) path.append(next_node) next_node = random.choice(next_child_node) next_child_node.remove(next_node) print "子節點 " + repr(next_child_node) print "next node " + repr(next_node) node = Node(next_node,next_child_node) node_li.append(node) print "節點狀態 " + repr(node) print "-----------------------------" else: path.append(next_node) print "死路" + repr(next_node) for i in node_li[::-1]: node = i.get_Parent_Node() child_node = i.get_Child_Node() print "node " + repr(node) print "child_node " + repr(child_node) if child_node: print "有子節點" + repr(child_node) next_node = random.choice(child_node) path.append(next_node) child_node.remove(next_node) break else: print "無子節點" node_li.remove(i) n_x = next_node.get_x() n_y = next_node.get_y() if n_x == end_x and n_y == end_y: print "search down..." break path_inf = Path_Inf(path,node_li,visited_li) print "路經" + repr(path) print "節點鍊錶" + repr(node_li) print "step " + repr(step) return path_inf