关闭

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

1185人阅读 评论(1) 收藏 举报
分类:

           在之前最后一公里极速配送(三)中提到的上传代码少了一个文件,下面将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的配送应该每个人的做法都不一样,比赛结束后会公布我的设计算法!








 

0
0
查看评论

最后一公里极速配送

最后一公里极速配送题目描述https://tianchi.shuju.aliyun.com/competition/information.htm?spm=5176.100067.5678.2.nXeJox&raceId=231581总纲题目中有两种包裹,分别是电商包裹和O2O包裹: 电商包...
  • ben3ben
  • ben3ben
  • 2016-09-22 20:04
  • 1361

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

阿里最后一公里总结(一) 经过7.1到7.15日两个星期的奋战,已经初步解决了电商配送问题的优化问题,此过程中主要采用的算法是蚁群算法。我们可以将电商的配送问题化为无时间窗的VRP问题,在此过程中我们也碰到了一些问题。譬如:其中问题最大的就是如何对需求量140的容量进行限制的问题,为了解决这个问题 ...
  • qq_26901007
  • qq_26901007
  • 2016-08-15 11:07
  • 1140

小程序3分钟跑最后一公里极速配送

天池:最后一公里极速配送
  • Three_fish
  • Three_fish
  • 2016-09-13 00:11
  • 1631

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

有关最后一公里,电商订单的配送问题源代码已经上传到csdn上面,网址为: http://download.csdn.net/detail/qq_26901007/9603456
  • qq_26901007
  • qq_26901007
  • 2016-08-15 18:54
  • 1544

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

对于电商的情况,我利用官方公布出来的测评进行了初步的测评,大约在22万左右,配送员414个,这个优化应该是不能再少了,可能最少的时间应该是22万,不可能再低于这一个数。如下图所示: 接下来,我来谈一谈如何将O2O商户订单配送快速融入到电商的订单配送中来得到一个最初的成绩。初步估算,如果分开配送的话,...
  • qq_26901007
  • qq_26901007
  • 2016-08-15 11:10
  • 1155

最后一公里——发布

2017年2月21日 下午1:28 发件人 Apple 2. 1 Performance: App Completeness2. 3 Performance: Accurate Metadata0. 1.0 Before You Submit - HIG Com...
  • fonx
  • fonx
  • 2017-02-21 20:19
  • 555

“最后一公里”迅速迭代,末端代收网点会出现下一个独角兽吗?

本文来自微信公众号“物流一图”(ID:Apicture56),作者 夏夜晚风;36氪经授权发布。千禧之年以来,每隔两三年都有一些新的商业模式和风口,同时也会带动配套的物流业创新与发展,今天在新零售的风口下,物流最后一公里业态也在发生新的变化,笔者认为,末端代收网点将经历多个阶段的迭代,最终...
  • bKMk01MZ3w
  • bKMk01MZ3w
  • 2018-01-09 20:45
  • 114

最简单也最难:运维监控的最后1公里

谈运维我们不得不提监控,监控是运维的起点,也是难点。随着IT架构逐渐复杂化,从前端到IT底层,中间涉及浏览器、网络、服务器、操作系统、中间件、应用、数据库等,每个环节厂商不尽相同。当出现异常需要定位哪个环节出了问题的时候,排查就耗时耗力,若使用优云监控产品,以上难题不再是问题。优云全栈运维监控覆盖了...
  • uyunopss
  • uyunopss
  • 2016-11-30 15:57
  • 393

闲聊机器学习医疗应用的“最后一公里”

“最后一公里”问题,简单来说,就是如何让基于机器学习的软件产品成为医生日常诊疗工作中的一个常规环节。说是最后一公里,看似简单,其实并不简单。这里只讨论两个方面:一、机器学习软件如何获得进入医院的资格;二、机器学习软件如何融入医院工作流程。
  • zstarwalker
  • zstarwalker
  • 2017-12-17 21:57
  • 126

最后一公里

最后一公里(Last kilometer),在英美也常被称为Last Mile(最后一英里/最后一公里),原意指完成长途跋涉的最后一段里程,被引申为完成一件事情的时候最后的而且是关键性的步骤(通常还说明此步骤充满困难)。通信行业经常使用“最后一公里”来指代从通信服务提供商的机房交换机到用户计算机等终...
  • moqingxinai2008
  • moqingxinai2008
  • 2016-12-08 12:32
  • 94
    个人资料
    • 访问:13638次
    • 积分:342
    • 等级:
    • 排名:千里之外
    • 原创:18篇
    • 转载:2篇
    • 译文:0篇
    • 评论:10条
    最新评论