Application of Breath-first search in AI(route search)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Application of Breath-first search in AI(route search)相关的知识,希望对你有一定的参考价值。
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 frontiers def 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/1912287
以上是关于Application of Breath-first search in AI(route search)的主要内容,如果未能解决你的问题,请参考以下文章
Application Scenarios of Edge Computing——边缘计算的应用场景
CoreData: error: Serious application error. An exception was caught from the delegate of NSFetchedRe
Flask源码解析(理解working outside of application context)
e581. Animating an Array of Images in an Application
Java出现“Error configuring application listener of class...”类似的错误解决
Magnific Popup: application-3f3c3e8….js:15011Uncaught TypeError: Cannot read property 'open' of unde