def __init__(self, src, dst, city, dimension, adjacency_list, heuristic_matrices): self.__src = src self.__dst = dst self.__city = city self.__open_list = [] self.__closed_list = [] self.__dimension = self.__dimension_index(dimension) self.__org_node = LoadData.load_org_node(city) self.__org_path = LoadData.load_org_path(city, 6) self.__link_table = adjacency_list self.__heuristic = heuristic_matrices # self.__heuristic = self.__calculate_heuristic() self.__dimension_cost, self.__heuristic_cost, self.__total_cost = ({} for _ in range(3)) self.__dimension_cost = {node: float("inf") for node in self.__org_node.keys()} self.__dimension_cost[self.__src] = 0 self.__heuristic_cost[self.__src] = self.__heuristic.loc[self.__src, self.__dst] self.__total_cost[self.__src] = \ self.__heuristic_cost[self.__src] + self.__heuristic_cost[self.__src] self.__previous_node = {self.__src: None} heapq.heappush(self.__open_list, (self.__total_cost[self.__src], self.__src))
def calculate_heuristic(city): """ 計算 heuristic matrices :param city: :return: """ org_node = LoadData.load_org_node(city) data = np.array(list(org_node.values())) result = euclidean_distances(data, data) header = [x for x in list(org_node.keys())] pd_data = pd.DataFrame(result, columns=header) # print(pd_data.shape) return pd_data
def __init__(self, src, dst, dtype, location, dimension): self.src = int(src) self.dst = int(dst) self.org_node = LoadData.load_org_node(location) self.org_path = LoadData.load_org_path(location, dimension) self.link_table = LoadData.load_linking_table(location) # print('org_node', self.org_node) # print('org_path', self.org_path) # print('self.link_table', self.link_table) self.heap = Heap(dtype) self.quadrant = self.__get_quadrant(self.src, self.dst)
if __name__ == '__main__': # 基本設定 """ # 基本設定 # Dimension: 目前執行的實驗有多少維度 # city: 城市名稱(Oldenburg, California, North America) 1. 要改地點(city)和維度名稱(dimension) 2. 資料數量的分配情況 """ # 載入路網節點 city = 'Oldenburg' node = list(LoadData.load_org_node(city).keys()) heuristic_matrices = calculate_heuristic(city) print('終點數量', len(node)) # 要重新收集的最段路徑維度資料(要修改) # file_name = ['NotFoundNode(Distance)', 'NotFoundNode(Time)', # 'NotFoundNode(Dimension3)', 'NotFoundNode(Dimension4)', # 'NotFoundNode(Dimension5)', 'NotFoundNode(Dimension6)'] """ # 基本設定 dimension = [Distance, TIme, Dimension3, Dimension4, Dimension5, Dimension6] dimension 需要改 """ dimension = "Time" file_name = 'data/Oldenburg/NotFoundNode/NotFoundNode(' + dimension + ').txt'