基于双约束重力模型的L-OD物流需求预测

        通过对蒲江县2021物流发展现状进行分析,运用数据爬取,使用高德地图API实现批量查询各小区中每一个地址(省、区/市县、乡镇)的经纬度数据,运用Geopy库中的默认WGS-84模型计算出误差在0.5%以内的小区距离,并以矩阵的形式导入Excel文件中,最后运用所获数据结合双约束重力模型,用编程迭代实现了蒲江县2025、2030、2035年的物流分布量预测。2021小区矩阵如下:

小区

12345678910111213141516合计
146317916357350859006861667055115909703631078160871285161599965326411482120421730411048648
210976291635644442416353951326797231283031078370741379137776701491201050908688769823
312154491635463178066841078478323252583166315444976350430703707430343166464750
42729041460169163573508256676571381935167326131514648875957838403674834107461641033360
5148643107883642080600000000000075112
66355916299413089112488000000000000352130
7610593107853804127017000000000000272958
86285811842700953846000000000000135555
95894110932344276400000000000022095
1040951817163722960000000000009845
11709358943022474300000000000020752
1264159134251262854865000000000000145077
137105531078709397036000000000000206262
142108221082117821286800000000000066814
1590722118841844431546000000000000152596
16400727093289674586000000000000124647
合计10570397612794180161049678192401847832587214029197935714611956792999052505196804916961991059

 

在双约束重力模型中物流分布量的计算公式如下:

 

确定阻抗矩阵

       考虑蒲江与各小区的运输费用难以查询,并与各地区流通的交通工具并不相似,故费用与时间均不能作为阻抗矩阵的依据。故此处,以各小区的距离为阻抗矩阵。因每个小区的区域广阔,故取小区间的几何中心作为参考点,以各小区几何中心点间的距离为各小区之间的距离。

        小区间距离获取的方法如下:首先在高德开发平台上申请用户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分布
12345678910111213141516实际求和值Pi
10161815715373830902176417820929593866547689732487758061461086703918159520194031614414911441527
2121147015590329510211621789915433527216045112715876110043111678237429647442472210582131058239
359210172355017615257289907421572672056001230053942560862127674098414859638854638870
4287945296270159969029494891036875519034463484701114031262369950425125752074514714204761420511
5804505739255414504000000000000103248103253
63102314161918908113278000000000000484037484056
729644620646897849138000000000000375207375222
871381388091565160485000000000000186327186341
9152754257172991080000000000003036930373
103686170882373160000000000001353313533
11654767782400128000000000000002852528527
1258757539461915567540000000000000199398199430
13442921030594858387465000000000000283400283539
14142463922112101262240000000000009179391846
1537850629223602972803000000000000209604209767
1645599373492030667937000000000000171191171346
实际求和值14530621046494574627144294326448254009355651928421346109822926897541219934418893480232953125044
Aj14530621046494574627144294326448254012355651928511346279823426899141226534437793544233167125174
### 深度学习中的图像处理与重力模型实现 深度图通常用于表示场景中物体到相机的距离信息,而所谓的“重力模型”可能是指一种结合物理约束(如重力方向)的建模方法,在某些特定应用中可以用来辅助理解三维空间结构。以下是关于深度学习在图像处理领域中结合重力模型的一种潜在实现方式: #### 1. 数据准备与预处理 为了训练一个能够生成或处理深度图并考虑重力影响的模型,需要收集高质量的数据集。这些数据应包含真实世界的RGB-D图像或者合成的深度图,并标注相应的重力方向或其他物理属性。可以通过数据增强技术提升模型性能,例如调整视角、旋转和平移操作[^1]。 #### 2. 模型架构设计 可以选择现有的卷积神经网络(CNN)作为基础框架来进行深度估计任务。如果希望加入重力因素,则可以在网络内部引入额外输入通道专门传递重力矢量信息;另外也可以尝试融合多传感器数据(比如IMU惯性测量单元),从而更精确地捕捉环境动态特性。对于嵌入式设备部署情况下的 rknn 文件转换流程已被提及过一次 [^2] ,这表明经过适当修改后的模型同样适用于此类硬件平台之上运行推理工作负载。 #### 3. 特征提取与模糊度计算 在一个具体实例当中提到,“从编码器获得两张图片各自的深层特征”,接着运用某种机制评估局部区域内的清晰程度即所谓‘模糊度’进而形成初步蒙版图形之后再经历一系列后续步骤完成最终输出成果物——复合版本遮罩图案。“改进的办法最后生产出了这样一个综合性的掩码图表它无接缝地把源自两幅不同焦距源影像的基础要素集合起来。” 这段描述暗示了即使是在没有明确指出要考虑到外部力量作用条件下仍然存在针对视觉效果优化方面的努力方向之一就是通过对原始素材进一步加工使得结果更加理想化接近人类感知习惯 。因此当我们将思路扩展至包含引力效应在内的更大范畴时也同样遵循相似原则只不过增加了更多维度考量而已 [^3]. #### 4. 应用案例 - NanoDet乒乓球落点检测系统 虽然这个例子主要关注于运动轨迹跟踪而非纯粹意义上的距离测算但它展示了如何利用先进的机器学习算法解决实际问题的能力其中包括但不限于目标识别定位等功能模块同时也涉及到用户交互界面开发等方面的内容所以完全可以借鉴其设计理念将其移植改造成为满足新需求的新一代解决方案比如说增加支持倾斜角度补偿功能等等都是可行的方向 [^4]. ```python import torch from torchvision import models, transforms from PIL import Image def load_model(): model = models.resnet50(pretrained=True) # 假设这里已经加载了一个带有重力修正层的自定义ResNet变体 return model.eval() transform = transforms.Compose([ transforms.Resize((224, 224)), transforms.ToTensor(), ]) image_path = 'example.jpg' img = Image.open(image_path).convert('RGB') input_tensor = transform(img).unsqueeze(0) with torch.no_grad(): outputs = load_model()(input_tensor) print(outputs.shape) # 输出形状取决于具体的模型配置 ``` 上述代码片段仅作为一个简单演示说明如何调用PyTorch库里的标准分类模型执行前向传播运算获取预测类别概率分布向量形式的结果实际上完整的项目往往涉及更为复杂的定制化组件集成过程。 ---
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值