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

宁可枝头抱香死,何曾吹落北风中。这篇文章主要讲述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  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.





   



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









本文出自 “11885445” 博客,请务必保留此出处http://11895445.blog.51cto.com/11885445/1912287

    推荐阅读