Exemplo n.º 1
0
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
Exemplo n.º 2
0
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