最后一公里极速配送(四)

           在之前最后一公里极速配送(三)中提到的上传代码少了一个文件,下面将DataProcess.m代码公布如下,注意程序的运行方式:首先运行DataProcess.m,其次运行VPRPSO.m文件(这里可能需要等待5个多小时,与处理器速度有关),这个程序运行完了,下面再运行result程序,最后再运行Arrange程序,输出的表格即为EC订单的处理结果。

       %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%一 读取原始数据
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%1 网点经纬度
% function DataProcess
clear;clc
fid = fopen('1.csv');
Site = textscan(fid, '%s %f %f ', 'delimiter', ',');
fclose(fid);
Site_id1=Site{1};Lng1=Site{2};Lat1=Site{3};
%2 配送点经纬度
fid = fopen('2.csv');
Spot= textscan(fid, '%s %f %f ', 'delimiter', ',');
fclose(fid);
Spot_id2=Spot{1};Lng2=Spot{2};Lat2=Spot{3};
%3 商户经纬度
fid = fopen('3.csv');
Shop = textscan(fid, '%s %f %f ', 'delimiter', ',');
fclose(fid);
Shop_id3=Shop{1};Lng3=Shop{2};Lat3=Shop{3};
%4 电商订单
fid = fopen('4.csv');
Online_retailer = textscan(fid, '%s %s %s %d ', 'delimiter', ',');
fclose(fid);
Order_id4=Online_retailer{1};Spot_id4=Online_retailer{2};
Site_id4=Online_retailer{3};Num4=Online_retailer{4};


%5 同城O2O订单
fid = fopen('5.csv');%Site_id=Site{1};Lng1=Site{2};Lat1=Site{3};
O2O = textscan(fid, '%s %s %s %s %s %d ', 'delimiter', ',');
fclose(fid);
Order_id5=O2O{1};Spot_id5=O2O{2};
Site_id5=O2O{3};Pickup_time=O2O{4};
Delivery_time=O2O{5};Num5=O2O{6};


%6 快递员列表
fid = fopen('6.csv');
Courier_id = textscan(fid, '%s ', 'delimiter', ',','HeaderLines',1);
fclose(fid);
clear fid ans Site Spot Shop Online_retailer O2O 
 % 二 聚类
 %1 O2O商户对应最近的配送点
%  for i=1:length(Lng3)
%     for j=1:length(Lng2)
%     S(i,j)=Distance(Lat3(i),Lng3(i),Lat2(j),Lng2(j));
%     end
%    [result1(i),class1(i)]=min(S(i,:));%result1(i),class1(i)分别存放每个商户距离最近配送点值和配送点标号
% end
%2 每个配送点对应的最近网站聚类
% tic
% for i=1:length(Lng2)
%     for j=1:length(Lng1)
%     S(i,j)=Distance(Lat2(i),Lng2(i),Lat1(j),Lng1(j));
%     end
%    [result2(i),class2(i)]=min(S(i,:));%result1(i),class1(i)分别存放每个配送点距离最近网点值和网点标号
% end
% toc
% for i=1:124
% [a1{i},a2{i}]=find(class2==i);%a2{i}存放第个网点对应的配送点编号
% end


%%先配送完电商的货物
%采用Floyd 算法求解124个网点中的配送点和网点两两之间的距离
for i=1:length(Site_id1)
 %Spot中存放的是第i个网点对应配送点的标号
 Index4{i}=(strmatch(Site_id1{i} , Site_id4));%第i个网点对应配送点在电商订单中所对应的ID号
 Demand{i}=Num4((strmatch(Site_id1{i} , Site_id4)));%第i个网点对应配送点在的需求量
[Spa{i},Spb{i}]=ismember(Spot_id4(strmatch(Site_id1{i} , Site_id4)),Spot_id2);
%Spb{i}表示第i个网点对应配送点在自己Map图中编号
%  coordinations{i}(:,1)=Lat2((strmatch(Site_id{i} , Site_id4)));
%  coordinations{i}(:,2)=Lng2((strmatch(Site_id{i} , Site_id4)));
%%下面originData是很重要的一个输出数据矩阵
originData{i}=zeros(length((strmatch(Site_id1{i} , Site_id4)))+1,1);%初始化originData
 originData{i}(1,1)=i;
 originData{i}(1,2)=Lat1(i);%第二列存放Lat
 originData{i}(1,3)=Lng1(i);%第三列存放Lng
 originData{i}(1,4)=0;%第四列存放需求量
 originData{i}(1,5)=0;%第5列存放pickup_time
 originData{i}(1,6)=720;%第6列存放deliver_time
 originData{i}(1,7)=0;%第7列存放服务时间
 %originData{i}(1,8)=0;
  originData{i}(2:end,1)=Index4{i};%第一列存放电商订单编号
 originData{i}(2:end,2)=Lat2(Spb{i});%第二列存放Lat
 originData{i}(2:end,3)=Lng2(Spb{i});%第三列存放Lng
 originData{i}(2:end,4)=Demand{i};%第四列存放需求量
  %时间窗口
 originData{i}(2:end,5)=0;%第5列存放pickup_time
 originData{i}(2:end,6)=0;%第6列存放deliver_time
 originData{i}(2:end,7)=3*sqrt(double(Demand{i}))+5;%第7列存放服务时间t=3*sqrt(demand)+5
 %originData{i}(2:end,8)=Order_id4{Index4{i}};%第2列对应的是编号Index4所对应的快递order_Id
%A{i}=Order_id4{Index4{i}};
 %IDData{1,i}(1,1)=Site_id{i}(:);
 %IDData{i,2}=0;
%  IDData{i}(2:end,8)=Spot_id4{Index4{i}};%第1列位快递所对应的配送点Id和相应的网点Id
%  IDData{i}(2:end,9)=Order_id4{Index4{i}};%第2列对应的是编号Index4所对应的快递order_Id


end
%Matlab中的细胞数组字节对其与C语言不一样
% for i=1:length(Site_id)
%    for j=1:length(Spb{i})
%        Spb{i}(length(Spb{i})+1)=0;
%        Spb{i}(length(Spb{i})-j+2)=Spb{i}(length(Spb{i})-j+1);
%        %Spb{i}(1)=i;
%    end
% end


%对于每个网点的配送点和网点求两两之间的距离
tic
S(1,1)=eps;
for k=1:length(Site_id1)
    for i=1:length(Spb{k})
        S(i+1,1)=Distance(Lat2(Spb{k}(i)),Lng2(Spb{k}(i)),Lat1(k),Lng1(k));%第一列表示网点与配送点之间距离
        S(i,i)=eps;
        for j=1:length(Spb{k})
         S(1,j+1)=Distance(Lat1(k),Lng1(k),Lat2(Spb{k}(j)),Lng2(Spb{k}(j)));%第一行表示网点与配送点之间距离
         S(i+1,j+1)=Distance(Lat2(Spb{k}(i)),Lng2(Spb{k}(i)),Lat2(Spb{k}(j)),Lng2(Spb{k}(j)));
       end
    end
   D{k}=S;%D中存放的是124个网点对应的配送点两两之间的距离
   clear S;
end
%第一个点是124个网点中的一个
toc


%将时间窗口点转化为分钟(标准)
for i=1:length(Delivery_time)
Pickup_time5(i,1)=(str2num(Pickup_time{i}(1:2))-8)*60+str2num(Pickup_time{i}(4:5));
Delivery_time5(i,1)=(str2num(Delivery_time{i}(1:2))-8)*60+str2num(Delivery_time{i}(4:5));
end
save D
save originData
save Courier_id
save Order_id4
save Spot_id4
save Site_id1
 

至于O2O的配送应该每个人的做法都不一样,比赛结束后会公布我的设计算法!








 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
Comcast NGOD标准文档,是开发VOD产品的必备文档,全英文! 极力推荐! 翻译成中文的部分目录: 1.1总体架构 3 1.1.1基本架构描述 3 1.1.2接口 4 1.1.3配置结构 5 1.2组件分类 6 1.2.1资产发布系统(ADS) 6 1.2.2资产管理系统(AMS) 6 1.2.3实时源(RTS)和实时管理器(RTM) 6 1.2.4计费系统 7 1.2.5授权服务器(ES) 7 1.2.6导航服务器 7 1.2.7购买服务器 8 1.2.8点播客户端 8 1.2.9媒资传播管理器 8 1.2.10点播资源管理器 9 1.2.11推流服务器 9 1.2.12会话管理器(SM) 9 1.2.13 CA系统 10 1.2.14加密资源管理器 10 1.2.15加扰器 10 1.2.16网络资源管理器 11 1.2.17传输网络 11 1.2.18边缘资源管理器 11 1.2.19边缘设备 11 1.2.20网络管理系统 12 1.2.21数据仓库 12 1.2.22日志服务器 12 2接口描述 12 2.1资产接口 12 2.1.1资产分发接口(A1) 12 2.1.2资产获取接口(A2) 13 2.1.3资产传播接口(A3) 13 2.1.4实时元数据接口(A4) 13 2.1.5实时管理接口(A5) 13 2.1.6资产发布接口(A6) 13 2.1.7客户端导航接口(A7) 13 2.2会话接口 13 2.2.1客户端会话接口(S1) 14 2.2.2会话授权接口(S2) 14 2.2.3会话和点播资源接口(S3) 14 2.2.4会话和加密资源接口(S4) 14 2.2.5会话和网络资源接口(S5) 14 2.2.6会话和边缘资源接口(S6) 15 2.3资源接口 15 2.3.1资产定位接口(R1) 15 2.3.2推流服务器资源接口(R2) 15 2.3.3 CAS接口(R3) 15 2.3.4加密资源接口(R4) 15 2.3.5网络资源接口(R5) 15 2.3.6边缘资源接口(R6) 16 2.4授权接口 16 2.4.1授权验证接口(E1) 16 2.4.2客户端购买接口(E2) 16 2.5流控制接口 16 2.6客户端自动监测接口(D1) 16 2.7视频传输接口 17 2.7.1源传输接口(V1) 17 2.7.2加密传输接口(V2) 17 2.7.3网络传输接口(V3) 17 2.7.4 客户端传输接口(V4) 17 2.8网络管理接口 17 2.9数据仓库接口 17 2.10事件日志接口 18 2.11服务监测接口 18
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值