今天我们有一个不寻常的机会与habrosoobschestvom分享我们的经验。这不是什么秘密,大部分是我们创建了一个现场“虚拟”世界中的项目和产品,我们不能总是被追溯到开始,我们所做的一切工作,在现实生活中的结束。
这个项目,这是我们想告诉你,我们有一个代码,并有点搞笑的名字“Smyshlёnye停止。”
那么,什么是 - 在城市的“H”的是建立一个跟踪系统基于传感器的GLONASS数据移动涌向中心调度服务在从这些相同的传感器报告源源不断形式的城市交通。我想放置在液晶面板上的停止,将显示时间和内容上的车辆运行路线到达。
这个想法听起来很简单,并实现这一切都没有 - 路线的时间表,路线本身,从他们的传感器和信息,站,车,发表在飞行中的坐标。此案为小 - 收集这一切在人堆里,开始工作。
这就是我们今天要告诉大家的协议与传感器通信,我们达到铁的智能站的装配和显示一个工作原型在展会TECHNOPROM 2014
让我们先从系统的基本架构,然后再在细节。
收集实时数据 H4>目前还没有单独的系统或运营数据的标准。在使用不同的格式和内容的分发数据的方法不同,不同供应商的不同城市。目前,我们面临着两个:通过TCP和REST API提供程序上的端数据的传输
包的一个例子,我们对TCP
<前>&LT;代码&GT; D·00287; 190614; 034452; 5628.0000; N; 8457.8226,E; 0; 272; 123; 12; gosnum:3:379,民:3:3巨魔&LT; /码&GT; < / PRE>
包的REST API
的例子
<前>&LT;代码&GT; {&QUOT;网络&QUOT; :[{&QUOT; deviceHash&QUOT; :0558132541,&QUOT;名称&QUOT; :&QUOT;巴士H564VE96&QUOT;,&QUOT;时间戳&QUOT; :1384710565,&QUOT;纬度&QUOT; :50.65,&QUOT;经度&QUOT; :60.56,&QUOT;速度&QUOT; :43.5,&QUOT;当然&QUOT; :120.1,&QUOT; SATS&QUOT; 8,QUOT;路线&QUOT; :&QUOT; 021总线&QUOT; },...]}&中尉; /码&GT; PRE>
格式和内容包:
- 在设备ID
- 的命名和标识TA - 。数TC和车辆类型
- 上映时间的数据
- 经纬度< /
- 速度。
- 当然。
- 卫星的数量。
- 该航线的ID沿该车辆。 ul>所有这些数据被用在预测算法。
考虑两种选择接收数据。
角色和职责listnera:
- 获取从提供“原始”的数据。
- 分析和处理数据的系统理解的格式。从行,或JSON的POJO。
- 转发接收到的POJO数据JMS在预定的话题。
- 故障转移。为了确定获得来自供应商或物理交通不便listnera数据问题,听者应该发送ping包JMS。
- 保存POJO解析在一个单独的数据库之后。保存原始数据到一个漫长的一周。此机构由以能够累积的算法统计是最小的。在系统的使用寿命假定完成和裁缝的算法,并能够检查变化的算法中,我们存储数据。他们知道怎么打积累了更改后的算法的统计和评估。
在TCP的情况下,我们指定的主机和端口,并将数据提供者发送数据包到该主机。然后,它出自于我们的监听TCP通道。
我们作为TCP listnera Netty的一个基础。这是非常容易使用和运行稳定。在REST API的情况下,我们所使用的客户Jsoup,这民意测验API计时器。
听者本身,与指定主机,端口和设置JMS和数据库的能力,一个控制台应用程序。
工作listnera的过程:
- 在获取数据与TCP或定时器时,REST API
- 分析字符串或JSON的,创造一流NavigationPackage的对象的情况。
- 发送NavigationPackage到JMS
- 保存NavigationPackage数据库。
- 发送ping包的JMS(对象类PingPackage)。
其结果是每30秒,我们填补了我国关于车辆(以下简称TC)的实际动作信息数据库。
什么,我们需要了解发生了什么与怎么回事? B>
1。分段路线。
2.协调站。
B>
我们把这些路线,并停止GIS系统的,对待它们以这样的方式,以获得分段路由
好了,现在我们知道谁,是怎么回事,所以现在是时候开始构建的预测。但在此之前,办理了出院的数字扯远了。
为了获得它是如何工作显示数字更好的手感:
- 60海里的包我们从一分钟8无轨电车路线得到。
- 10毫秒 B>是一站预测的建设。
- 600毫秒 B>才能处理完毕,平均一个导航包。
- 500段 B>,平均而言,同一条路线。
- 5至20辆的平均途中托木斯克。
- 168停止 B>在托木斯克8无轨电车路线李>
- 159小时两个人 B> - 这是多少时间,这么多人,我们已经完全实现的算法
当然,速度非常依赖于铁 - 所有上述数据是从测试虚拟机除去
。
来吧,选择一个算法来实现它,并显示结果。
如何选择算法。 H4>与任何其他时候,我们不推倒重来,努力实现,现有的算法最适合我们的。我铲了很多工作,不是俄罗斯,和俄罗斯的科学家。事实上办法预测并不是那么多,并且所有的算法 - 的两个或三个主要的修改。
第一步选择了几种算法,似乎我们“更容易。”事实上,任何的基本算法有在的理解和执行相同的复杂性。所有差 - 其中可以考虑,而且可以省略特定的情况。
我们的开始步骤是研究冉熙贞[1]。文学作品的完整列表,我们给在文章底部。
所以,第一步,我们选择了在球队中的算法多篇文章和研究论文。船上每抽,实现了所有缺陷,并试图承担的工作,在文章中没有描述的一部分。是的,不是所有的都可以找到。在这种情况下,考虑所选择的算法预测,但并没有考虑如何收集统计信息传递,必须建立在预测的路线。
第二步,我们有一个集思广益的会议中,试图告诉同事,并解释选择的算法。总体而言,本次活动参加了七人。根据研究结果,回答所有的问题,我们意识到,我们可以实现该算法在有限的时间。
接下来的把戏。分析划分任务,考核和工作计划。顺便说一句,这种前期工作后,我们得做了很好的评价,更重要的是 - 我们错过了
。
什么标准选择算法 H4>当选择一个算法试图找到的执行情况和算法结果的复杂性之间的平衡。其结果是,该算法是基于历史数据,稍微失去基于神经网络的预测准确性的算法,但它更容易实现。我们有一个要求,实现了预测为30的精度 - 60秒,这对于普通乘客完全可以接受
开发一种处理服务器 H4>的项目做这些项目的侧面的技术部分小题外话的过程。
在其中我们有一个非常重要的限制开始的条件下,我们必须得到一个工作原型到一定数量。它与展览TECHNOPROM在2014年我们在算法的项目开发和整个客户端的第一部分忍受工作计划的撰写与被连接。如果没有管理和其他必要的事情。
一个好的项目,为客户,当他看到工作的进展情况,尽可能多。而在我们的情况下,我们的很大一部分时间是离开的算法及其磨合的实施。
因此,我们决定做一个试验台,一条路线和一个停止。
该试验台是 HTML + JS + WebSocket的。 B>
在开发过程中,我们第一次出现在地图和路线上。随后而来的车辆(TC),并更新自己的状态。然后在路径上的车辆的位置。 - 段和通过的百分比。然后,公共汽车站的到达的定时。然后实际的预测和的最后一个步骤是算法柱状图,表示预测误差的发展。
这种方法使我们能够为客户“现场”监督我们的工作过程。一切都非常透明的。
进一步详细说明该处理的算法的技术部分。
业务处理服务器 H4>最初的设计应该为每个城市一个独立的服务器。
工作和处理服务器功能的过程:
- 从JMS获取数据。
- 定位车辆的路线和车辆的基础上,导航数据的状态。
- 计算统计数据通路分段。
- 预测的到达而触发的连接停止计时器。
- REST API。
- 的WebSocket API。 ul>要使用Spring的JMS JMS的工作。
对于WebSocket的 - 弹簧的WebSocket
对于REST API - 弹簧WEB
定位在车辆的路线上。
在汽车细分市场中收集的统计数据通道。
施工预测到达停止。