通过对蒲江县2021物流发展现状进行分析,运用数据爬取,使用高德地图API实现批量查询各小区中每一个地址(省、区/市县、乡镇)的经纬度数据,运用Geopy库中的默认WGS-84模型计算出误差在0.5%以内的小区距离,并以矩阵的形式导入Excel文件中,最后运用所获数据结合双约束重力模型,用编程迭代实现了蒲江县2025、2030、2035年的物流分布量预测。2021小区矩阵如下:
| 小区 |
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 合计 |
| 1 | 46317 | 91635 | 73508 | 59006 | 8616 | 67055 | 11590 | 97036 | 31078 | 16087 | 53264 | 11482 | 73041 | ||||
| 2 | 91635 | 64444 | 3951 | 32679 | 7231 | 2830 | 31078 | 37074 | 13791 | 37776 | 70149 | 12010 | 5090 | 8688 | |||
| 3 | 91635 | 46317 | 80668 | 4107 | 8478 | 3232 | 5258 | 3166 | 3154 | 4497 | 6350 | 43070 | 37074 | 3034 | 3166 | ||
| 4 | 91635 | 73508 | 2566 | 76571 | 3819 | 35167 | 32613 | 15146 | 48875 | 95783 | 84036 | 7483 | 41074 | 6164 | |||
| 5 | 14864 | 31078 | 8364 | 20806 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 75112 |
| 6 | 63559 | 13089 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | |||
| 7 | 61059 | 31078 | 53804 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ||
| 8 | 62858 | 11842 | 7009 | 53846 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | |
| 9 | 5894 | 11093 | 2344 | 2764 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 22095 |
| 10 | 4095 | 1817 | 1637 | 2296 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 9845 |
| 11 | 7093 | 5894 | 3022 | 4743 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 20752 |
| 12 | 64159 | 13425 | 12628 | 54865 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | |
| 13 | 71055 | 31078 | 7093 | 97036 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | |
| 14 | 21082 | 21082 | 11782 | 12868 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 66814 |
| 15 | 90722 | 11884 | 18444 | 31546 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | |
| 16 | 40072 | 7093 | 2896 | 74586 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | |
| 合计 | 19240 | 25872 | 97935 | 71461 | 68049 | 91059 |
|
在双约束重力模型中物流分布量的计算公式如下:



确定阻抗矩阵
考虑蒲江与各小区的运输费用难以查询,并与各地区流通的交通工具并不相似,故费用与时间均不能作为阻抗矩阵的依据。故此处,以各小区的距离为阻抗矩阵。因每个小区的区域广阔,故取小区间的几何中心作为参考点,以各小区几何中心点间的距离为各小区之间的距离。
小区间距离获取的方法如下:首先在高德开发平台上申请用户key,使用高德地图API实现批量查询各小区中每一个地址(省、区/市县、乡镇)的经纬度,整理表格,用分类汇总方法计算出每一个L-OD小区的平均经纬度。
将小区经纬度数据导入python中,用Geopy库中的默认WGS-84模型计算出误差在0.5%以内的小区距离,并以矩阵的形式导入excel表中。
物流分布量预测
将2025年、2030年、2035年的预测物流发生量、吸引量以及各小区之间的距离阻抗矩阵数据导入Python中,用编程的方法进行重力模型系数迭代,由于所给数据显示小区5到小区16之间没有物流交换活动,因此进行重力模型系数迭代时不应考虑5-16小区。
将误差率err设置为0.000001,结果显示2025年预测迭代了7344次,2030年预测迭代了9019次,2035年预测迭代了10095次。将分布量预测结果导入xls文件中。应注意由于小区5到小区16之间没有物流交换,重力模型系数迭代时也未考虑5-16小区,因此在物流分布量预测表中也应人为将5-16小区之间的分布量设置为0,物流分布量迭代实现代码如下:
import copy import numpy as np import pandas as pd import xlwt import xlrd #读取发生量或吸引量 df=pd.read_excel(r"D:\预测2025.xlsx") dis=pd.read_excel('D:\距离.xlsx',header=None) #读取距离矩阵 A=df['A'] #读取第一列 P=df['P'] #读取第二列 #获取行列数 row=len(dis) col=dis.columns.size cut=4 k2=np.ones(16) #初始化重力模型系数 k1=np.ones(16) err=0.000001 #设定误差率 x=0 #控制循环条件 ite=0 #迭代次数 mat1=np.zeros(16) mat2=np.ones(16) #初始化迭代矩阵 while x==0 : for i in range(cut): a=0 for j in range(col): if dis[i][j]!=0: a=a+k2[j]*A[j]/dis[i][j] a=1/a k1[i]=a for i in range(cut,row): for j in range(cut): if dis[i][j]!=0: a=a+k2[j]*A[j]/dis[i][j] a=1/a k1[i]=a for j in range(cut): a=0 for i in range(row): if dis[i][j]!=0: a+=k1[i]*P[i]/dis[i][j] a=1/a k2[j]=a for j in range(cut,col): for i in range(cut): if dis[i][j]!=0: a=a+k1[i]*P[i]/dis[i][j] a=1/a k2[j]=a ite=ite+1 mat2=np.row_stack((mat2,k2)) mat1=np.row_stack((mat1,k1)) #更新矩阵 #判断是否继续迭代 for j in range(col): if abs(mat1[ite][j]-mat1[ite-1][j])>=err: x1=0 break else: x1=1 for j in range(col): if abs(mat2[ite][j]-mat2[ite-1][j])>=err: x2=0 break else: x2=1 if x2==1&x1==1 : x=1 else: x=0 print("mat1矩阵:",mat1) print("mat2矩阵:",mat2) print("ite=",ite) #计算分布量 l=np.zeros((16,16)) for i in range(row): for j in range(col): l[i][j]=k1[i]*k2[j]*P[i]*A[j]/dis[i][j] for i in range(cut,row): for j in range(cut,col): l[i][j]=0 filename =xlwt.Workbook() #创建工作簿 sheet1 = filename.add_sheet(u'sheet1',cell_overwrite_ok=True) #创建sheet for i in range (0,16): for j in range (0,16): sheet1.write(i,j,l[i,j]) filename.save('D:\物流分布量2.xls')
讯享网
代码运行结果如下:
将预测分布量导入excel,以2025年为例,预测结果整理如下:
| 2025年预测OD分布 | ||||||||||||||||||
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 实际求和值 | Pi | |
| 1 | 0 | 71537 | 21764 | 29593 | 86654 | 76897 | 32487 | 75806 | 67039 | 18159 | 52019 | 40316 | ||||||
| 2 | 0 | 1162 | 17899 | 1543 | 35272 | 16045 | 11271 | 58761 | 37429 | 64744 | 24722 | |||||||
| 3 | 59210 | 0 | 572 | 8990 | 742 | 15726 | 7205 | 6001 | 23005 | 39425 | 60862 | 12767 | 40984 | 14859 | ||||
| 4 | 0 | 2949 | 48910 | 3687 | 55190 | 34463 | 48470 | 99504 | 25125 | 75207 | 45147 | |||||||
| 5 | 80450 | 5739 | 2554 | 14504 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ||
| 6 | 41619 | 18908 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ||||
| 7 | 20646 | 8978 | 49138 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | |||
| 8 | 71381 | 38809 | 15651 | 60485 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ||
| 9 | 15275 | 4257 | 1729 | 9108 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 30369 | 30373 |
| 10 | 3686 | 1708 | 823 | 7316 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 13533 | 13533 |
| 11 | 6547 | 6778 | 2400 | 12800 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 28525 | 28527 |
| 12 | 58757 | 53946 | 19155 | 67540 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ||
| 13 | 44292 | 48583 | 87465 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | |||
| 14 | 14246 | 39221 | 12101 | 26224 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 91793 | 91846 |
| 15 | 37850 | 62922 | 36029 | 72803 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ||
| 16 | 45599 | 37349 | 20306 | 67937 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ||
| 实际求和值 | 26448 | 35565 | 98229 | 93480 | ||||||||||||||
| Aj | 26448 | 35565 | 98234 | 93544 | ||||||||||||||

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/75055.html