import pandas as pd import numpy as np ''' 工作量方差 sizeWeight 区域站点数量权重 distanceWeight 区域调度距离权重 这两个权重构成了工作量指标 ''' def get_workload_variance(partition, size_weight, distance_weight): distance_filepath = "D:\\JetBrains\\PcharmWorkSpace\\Paper2\\NYC\\data\\distanceMatrix.csv" distance_matrix = pd.read_csv(distance_filepath).as_matrix() workload = [] areasizelist = [] maxdistancelist = [] for i in range(0, len(partition)): areaSize = len(partition[i]) # Maximum Spanning Star算法 maxdistance = 0 for root in partition[i]: distance = 0 for tmp in partition[i]: if (root != tmp): distance = distance + distance_matrix[root][tmp] maxdistance = max(maxdistance, distance) areasizelist.append(areaSize) maxdistancelist.append(maxdistance) for i in range(0, len(areasizelist)): areaworkload = size_weight * areasizelist[i] + distance_weight * (maxdistancelist[i]/1000) #以千米为单位 workload.append(areaworkload) return np.var(workload) ''' 各区域间的站点的方差 ''' def get_areasize_variance(partition): areasizelist = [] for i in range(0, len(partition)): areaSize = len(partition[i]) areasizelist.append(areaSize) return np.var(areasizelist) ''' 各区域间的调度距离的方差 ''' def get_distance_variance(partition): distance_filepath = "D:\\JetBrains\\PcharmWorkSpace\\Paper2\\NYC\\data\\distanceMatrix.csv" distance_matrix = pd.read_csv(distance_filepath, header=None).as_matrix() maxdistancelist = [] distanceSum = 0 for i in range(0, len(partition)): # Maximum Spanning Star算法 maxdistance = 0 for root in partition[i]: distance = 0 for tmp in partition[i]: if (root != tmp): distance = distance + distance_matrix[root][tmp] maxdistance = max(maxdistance, distance)/1000 distanceSum = distanceSum + distance maxdistancelist.append(maxdistance) return np.var(maxdistancelist), distanceSum