摩拜单车调度方案设计

2019-03-15 13:31刘馨泽张雷赵玉雪
电脑知识与技术 2019年2期

刘馨泽 张雷 赵玉雪

摘要: 该文选取“摩拜杯官方挑战赛”的300万条数据,运用python及SQL语言对获取的300万条数据进行数据处理,并利用JAVA进行原有数据解码转换,得出摩拜单车在5月10日至5月24日的北京全范围内所有用户订单信息,连接百度地图API标记北京范围的POI点。选取北京工商大学阜成路及其周围共8个POI点作为研究范围。可知早高峰时间出现在7时至9时;晚高峰时间出现在17时至19时,且非工作日与工作日存在着明显的单车使用差异特征。与此同时,以阜成路校区为起点的摩拜单车订单中,有近4/5终点进入其他7个POI点,发现了高峰后阜成路校区单车供给不足的情况。根据考察的规律,建立线性规划模型,运用MATLAB软件求解,以运送5辆单车每次为例,以尽量少的运送次数和运送距离为目标,对运输用电动车的路线进行优化,最终得出优化调度方案。

关键词:线性规划模型; SQL; MATLAB

中图分类号:TP311        文献标识码:A        文章编号:1009-3044(2019)02-0249-03

1 引言

共享单车的存在解决了城市里“最后一公里”的难题,目前共享单车品牌开始多起来,并且纷纷加入免费骑行的烧钱大战。对于消费者来说,在使用共享单车的时候,最大的烦恼就是需要用车的时候却找不到车,当然希望车辆的投放数量越多越好; 而对于共享单车企业来说,他们在为大家的出行提供便利条件的同时, 更关注的是自身的生存和发展。本文以北京工商大学阜成路校区为例,进行单车用户特征与调度方案的研究。

2 数据获取与处理

2.1 数据的获取

通过网络下载2017摩拜杯算法挑战赛的数据作为数据源。该数据由两个csv文件组成,一个为比赛的测试集,一个为比赛的训练集,选取训练集数据作为研究数据。

该训练数据集包括2017年5月10日至2017年5月24日两个星期的共三百万条摩拜单车运营数据。其每一条元组包括7个数据项,分别为orderid(订单编号),userid(用户编号),bikeid(单车编号),biketype(单车类型),starttime(订单的起始时间),geohashed_start_loc(订单起始地点的geohash编码),geohashed_end_loc(订单终止地点的geohash编码)。

数据的获取和处理分为数据导入,数据计算,数据筛选,以及数据统计四个方面。

2.1.1 数据导入

为获取需要的数据,先使用SQL Sever Management创建数据库以及数据表,之后用BULK语句将train.csv文件导入数据表。

2.1.2 数据筛选

将geohash编码转化为经纬度坐标后,为选取北京作为研究区域,将其中经度大于116,纬度大于39的数据,使用SQL语言筛选出,并存入一个新的表,作为去除异常数据后的数据集。

在IDEA继承开发环境下,创建JAVA WEB工程项目。在主页文件index.jsp中,使用HTML5标签语言,JSP,JavaScript语言,构筑页面,调用百度地图开放平台的应用程序接口。

先创建ActiveXObject对象,实现JavaScript对数据库的连接。从数据库中读取出并筛选出起始订单数量以及终止订单数量大于200的点的经纬度数据后,使用Map类,Point类,Marker类在页面的地图上标点,并且使用BMap.InfoWindow创建信息窗口以及其响应的响应事件。

从而获得所有满足条件的数据点被标识在地图上的图像,通过放大地图可以获取北京工商大学附近满足条件的点的图像。

使用JavaScript,连接数据库,从中筛选出所有与北京工商大学相关联的元组,即起始点geohash编码为北京工商大学的订单数据。再选取订单数大于5的点,标在地图上。

根据北京工商大学作为起点高关联点图,圈出由北京工商大学作为起点的单车流向范围,在单车流向范围内,筛选出8个订单数大于200的代表性POI点,作为本次研究的广义研究点。同样使用JavaScript调用百度地图开放平台的API接口的方式在地图上标识出研究点。

在确定研究点后,通过之前设置的信息窗口得到所有点的geohash编码,使用SQL语言,从去除异常数据后的数据集中筛选出他们的数据,存入多个数据表。

2.1.3 數据统计

使用SQL语言统计研究点作为起始点的订单数量和作为终止点的订单数量,并将其存入一个表。统计各个研究点在两个星期中每一天的总订单数量,每一天不同时段的订单数量以及每两个研究点之间发生的订单数量。

将上述统计结果导出为csv文件,根据以上结果使用MatLab作图,运用样条曲线拟合方法获取由散点拟合后的光滑图像。使用JavaScript调用百度地图开放平台的API接口,在地图上绘制车辆流向图。以研究点间订单的数量num为参数变量,设置线条显示宽度的为1+0.1*num,设置线条的透明度为0.2*num,以标识车辆流向数量的不同。线条越宽、越不透明的线条代表该线路车辆的流动量越多。

2.2 数据处理

2.2.1 将geohash编码转换为经纬度

该数据集所提供的地址信息为geohash编码的格式,该编码将二维的经纬度坐标点转换为一维的字符串,某一个字符串表示了某一个矩形区域,也就是说在这个矩形区域中的所有经纬度点都共享一个字符串。

内部的实现采用的是geohash算法,其实质其实是二分法。

由于纬度范围在[-90,90],经度范围在[-180,180],拿到一组经纬度location(x,y)时,先对纬度区间[-90,90]二分,[-90,0]及[0,90],判断纬度在哪个区间,如在[0,90]区间内记结果为1,否则为0,以此类推多次使用二分法,在到达选取的最大长度时停止。对经度进行相同的操作,获得两个二进制串,之后偶数位放经度,奇数位放纬度,把2串编码组合生成新串。最后采用base32进行编码,获取geohash编码。