python写A*写到中途

Posted 最后的绝地武士

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python写A*写到中途相关的知识,希望对你有一定的参考价值。

  1 import numpy
  2 import matplotlib.pyplot as plt
  3 from pylab import *
  4 
  5 
  6 map_grid = numpy.full((20, 20), int(10), dtype=numpy.int8)
  7 # print(map_grid)
  8 map_grid[3, 3:8] = 0
  9 map_grid[3:10, 7] = 0
 10 map_grid[10, 3:8] = 0
 11 map_grid[17, 13:17] = 0
 12 map_grid[10:17, 13] = 0
 13 map_grid[10, 13:17] = 0
 14 map_grid[5, 2] = 7
 15 map_grid[15, 15] = 5
 16 
 17 plt.imshow(map_grid, cmap=plt.cm.hot, interpolation=nearest, vmin=0, vmax=10)
 18 plt.colorbar()
 19 xlim(-1, 20)  # 设置x轴范围
 20 ylim(-1, 20)     # 设置y轴范围
 21 my_x_ticks = numpy.arange(0, 20, 1)
 22 my_y_ticks = numpy.arange(0, 20, 1)
 23 plt.xticks(my_x_ticks)
 24 plt.yticks(my_y_ticks)
 25 plt.grid(True)
 26 plt.show()
 27 
 28 
 29 class AStar(object):
 30     def __init__(self):
 31         self.f = 0
 32         self.g = 0
 33         self.h = 0
 34         self.last_point = numpy.array([[5], [2]])  # 上一个目标点不断取得更新
 35         self.current_point = numpy.array([[5], [2]])  # 当前目标点不断取得更新
 36         self.open = numpy.array([[], []])  # 先创建一个空的open表
 37         self.closed = numpy.array([[], []])  # 先创建一个空的closed表
 38         self.start = numpy.array([[5], [2]])  # 起点坐标
 39         self.goal = numpy.array([[15], [15]])  # 终点坐标
 40 
 41     def h_value(self):
 42         h = (self.current_point[0][0] - 15)**2 + (self.current_point[1][0]-15)**2
 43         h = numpy.sqrt(h)  # 计算h
 44         self.h = h  # 更新h
 45         return h
 46 
 47     def g_value(self):
 48         g1 = self.current_point[0][0]-self.last_point[0][0]
 49         g2 = self.current_point[1][0]-self.last_point[1][0]
 50         g = g1**2 + g2**2
 51         g = numpy.sqrt(g)
 52         self.g = self.g + g
 53         return g
 54 
 55     def f_value(self):
 56         f = self.g_value() + self.h_value()
 57         return f
 58 
 59     def h_value_tem(self, cur_p):
 60         h = (cur_p[0] - 15)**2 + (cur_p[1]-15)**2
 61         h = numpy.sqrt(h)  # 计算h
 62 
 63         return h
 64 
 65     def g_value_tem(self, las_p, cu_p):
 66         g1 = cu_p[0]-las_p[0][0]
 67         g2 = cu_p[1]-las_p[1][0]
 68         g = g1**2 + g2**2
 69         g = numpy.sqrt(g)
 70 
 71         return g
 72 
 73     def f_value_tem(self, las_p, cu_p):
 74 
 75         f = self.g_value_tem(las_p, cu_p) + self.h_value_tem(cu_p)
 76         return f
 77 
 78     def min_f(self):
 79         tem_f = []
 80 
 81         for i in range(self.open.shape[1]):
 82             f_list = self.f_value_tem(self.last_point, self.open[:, i])
 83             tem_f.append(f_list)
 84 
 85         index = tem_f.index(min(tem_f))  # 返回最小值
 86         location = self.open[:, index]
 87 
 88         numpy.column_stack((self.closed, location))
 89         return location
 90 
 91     def main(self):
 92         self.open = numpy.column_stack((self.open, self.start))
 93         x = self.open
 94         f = self.h
 95 
 96         # self.open.shape[0]
 97         if self.open.shape[0] != 0:
 98             if self.min_f() == [15,15]:
 99                 print(搜索成功啦!)
100                 break
101             else:
102                 
103             
104             
105 
106 
107 
108 
109 
110         else:
111             print(没有搜索到路径!)

 

以上是关于python写A*写到中途的主要内容,如果未能解决你的问题,请参考以下文章

python把异常信息写到文件中

python-文件读取json数据写到数据库

Task运行过程分析1

Python之路53-css

Python从0开始写爬虫——扒狗东先流产了

2.18学习进度总结