目录
一、前言
多点路径距离最短问题是一个提出很久的课题,实际应用范围很广,快递配送方面、无人机运输投送,线路安排、点位分配等,最短距离的探索与研究成果可转化为实际应用,目前已经有很多成熟的算法,本文将从另一个思路,对100万虚拟坐标点,结合实际需求,进行最短距离的探索,分享与大家参考。
二、思路
1、随机生成100万个坐标点,供测试,因数据太大,使用 pickle 格式来保存生成的100万个数据,升序排列,格式【x,y,m】代表x、y坐标值和该点位名称,x、y值范围均是0至1000,保留两位小数。
def test_all(n,url): # 生成虚拟数据
val=[[int(random.random()*100000)/100,int(random.random()*100000)/100,int(1+i)] for i in range(n)]
pd.DataFrame(sorted(val)).to_pickle(url)
2、因点位数量太大,结合快递投递的实际情况,对这100万个坐标位置进行分组,便于分配给相应的投递站,本文以大约每组100个坐标点的设想,进行分组,各组坐标点均按顺时针顺序排序后保存于另一个 pickle 文档中,供后续程序使用。
def fenzu_pickle(url,to_url): #以Pickle方式读取总表数据、分组、再保存
list_A=pd.read_pickle(url).values.tolist()
list_B = [[] for _ in range(10000)]
for s in list_A:
n=int(s[0]/10)*100+int(s[1]/10)
list_B[n].append(s)
list_B_1=[shun(s) for s in list_B if len(s)>0] # shun(s) 是顺时针排列的自定义函数
pd.DataFrame(list_B_1).to_pickle(to_url)
3、求各组中所有坐标点