Application of Breath-first search in AI(route search)

來源:互聯網
上載者:User

標籤:bfs   a   

According to bfs, it is a search method to go through all the nodes layer by layer, until the gal has been found.


To make it simple, there is a visiting sequence of bfs:


Attention:

When we have goal test with node 0 we should create 1,2,3 node but nothing to do with goal test, as before, when we have goal test with node 1, we should create 4,5,6 immediately and so on.


Here comes an exercise:

A red bird wants to find the yellow bird in the shortest route and find this route in the shortest time.

we want to use the bfs, while due to the physical situation, we have to offer some methods to avoid heading back and visiting the some position twice.

below is my code in python3:

import frontiersdef solve(problem) :    state = problem.initial_state # the start location    map = {} # a dic to store the whole map    map[state] = set() # a set to store a node    map[state].add(0) # add the parents information to a set    map[state].add(‘root‘)  # initialize the root node    queue_node_created = frontiers.Queue()  # store the position of nodes created    queue_node_created.push(state)  # initialization    path_stack = frontiers.Stack() # store the path in inverted order    list_queue = []  # store the path in right order    while True:        node_value = queue_node_created.pop()  # pop the node in the queue for goal_test or expending new nodes        if problem.goal_test(node_value):  # goal test            while True:                list_1 = list(map[node_value])                if type(list_1[0]) == str:                    parent_node_value = list_1[1]                    last_action = list_1[0]# find action taken and parent node                else:                    parent_node_value = list_1[0]                    last_action = list_1[1]  # find action taken and parent node                if last_action == ‘root‘:  # if find the root                    break                path_stack.push(last_action)  # store the action taken                node_value = parent_node_value  # refresh the node_value                print(last_action)            while not path_stack.is_empty():                list_queue.append(path_stack.pop())            return list_queue  # return the path        else:            Next_steps = problem.get_successors(node_value)  # get successors            for node in Next_steps:                node_position = node[0]                if node_position in map.keys():  # in case that the same node is visited more than twice                    continue                else:                    map[node_position] = set()  # push the node info (parent‘s position and action) into map                    map[node_position].add(node_value)                    map[node_position].add(node[1])                queue_node_created.push(node_position)  # push the new node into the queue

In the appendix, there are two pictures of the result and the shade of color means the frequency of visiting in our algorithm.


At the beginning, I used the list with dictionaries in it. The list represents the whole tree and a dictionary act as a layer. In this way, I can easily store the entire tree. But, after testing, the effect of it was quite low, like the 24th or 25th floor could be the deepest layer in 1 min‘s running.


I felt hopeless due to the perform of what I had programmed. I spent 2days to finish it. Thanks to my female friend who is much smarter than me, I found a better solution to deal with node storage and new node‘ test in sequence just as you can see in my code.

Pay more attention to the scope of the variables, semantic problems and solutions to the problem. we can save lots of time.






本文出自 “11885445” 部落格,請務必保留此出處http://11895445.blog.51cto.com/11885445/1912288

Application of Breath-first search in AI(route search)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.