flink-china / flink-forward-asia-hackathon-2021

本 GitHub 项目是 Flink Forward Asia Hackathon (2021) 的投票专用项目。
121 stars 19 forks source link

[参赛项目] 基于Flink流处理框架的交通灯控制器 #13

Open jj551 opened 2 years ago

jj551 commented 2 years ago

项目简述

本项目旨在基于分布式系统架构下处理复杂交通灯系统。由多组件组成,这些组件进行通信以确保交通灯按正确顺序打开,从而最大限度地减少车辆驾驶时的交通拥塞时间浪费,同时系统必须反馈有关交通及交通路口的统计数据。 本项目的整个数据流是在交通灯附近行驶用户利用Kafka主题发送数据,信号量本身计算有关车辆的记录统计信息并向它们发送另一个主题。 本项目的数据由Flink Dispatcher 和 semaphoreController两者读取。第一个组件使用消息根据通过交通路口的车辆速度的平均值和中值计算排名。semaphoreController 使用 Flink 读取的数据作为 Q-Learning 算法的输入。变绿的信号量是基于该算法决定的。由于这个阶段,用户浪费的时间被最小化。整个系统状态保存在 MongoDB 上。用户可以使用 Web 应用程序控制查询结果和系统活动节点。

背景

目前城市交通拥堵问题日益严峻,产生了很大的社会成本,部分大城市的平均通勤时间超过 1.5 小时,如何帮助人们解决通勤的体验已经越来越受到关注。由于道路交通状况瞬息万变,因此实时计算在这方面有天然的用武之地。同时越来越多的设备通过互联网相互连接,允许它们之间进行强大的控制,并且可以收集大量信息,有助于提供更有效的服务。

目标

本项目中我们将利用这项创新改进实时交通灯提供的服务,使其能够提供实时交通状况流量更改交通灯时间,同时建立基于分布式机制来控制交通灯时间,同时收集危险交通灯路口的有用信息。

实施方案

系统结构

假设目前系统的每个信号量都在正常执行任务,同时传感器在不断注册信息上传至云端同时控制器接受使用过程收到的记录,允许根据实时方向的流密集度,自适应调整允许对应的交通灯保持红-绿灯间隔状态时间。

png1

  1. SemaphoreController 模块管理系统中与信号量的收集相关功能,由于Semaphore不是唯一能够发送信息的载体;在智能手机等智能设备已成为普遍的设备,利用它们的传播和网络链接来获取越来越重要的数据是友好的方式所以SemaphoreController模块的Semaphore具有扩展性同时SemaphoreController模块在信号量处理并将通知用户,同时利用机器学习算法控制交通灯路口对信号量进行计时。设备间通信出现问题,SemaphoreController模块会建立紧急模式。
  2. 如果不是所有载体都收到一条消息就会出现不愉快的情况,基于此使用2PC协议来交换消息,将事务提交过程分成两个阶段来进行处理,使得每个载体必须知道控制器做出的决定。
  3. 传感器发送的数据被一个组件接收,该组件在执行流处理、聚合并输出有效的统计数据以检索。这样的所有流程都由发布/订阅消息框架捆绑在一起,允许组件之间的简单有效消息交换。

项目结构

数据产生和消息逻辑

数据处理和查询计算

解决查询的机器学习算法

在开始本项目之前,检索智能交通灯在城市中实施的科学论文中均都使用类似相同的强化学习方法:Q-Learning,Q-Learning是强化学习算法中value-based的算法,Q即为(s,a)就是在某一时刻的s状态下(s∈S),采取采取 动作a (a∈A)动作能够获得收益的期望,环境会根据agent的动作反馈相应的回报reward r,所以算法的主要思想就是将State与Action构建成一张Q-table来存储Q值,然后根据Q值来选取能够获得最大的收益的动作。

Q-Learning的目标是学习一个策略,抽象为智能体(Agent)、环境状态(environment)、奖励(reward)、动作(action)下告诉代理什么情况下采取什么行动。由于Q-Learning需要一个奖励函数,简单起见我们对每个信号量的队列进行了估计。Q-Learning必须回答: 1、为什么要打开红绿灯的必要性? 2、一直关闭红绿灯的危害性? 每个信号量实体包含两个值,每个值都是关于之前提出问题的指标。通过比较每个信号量的值选择最适合开启的且学习公式如下:

Q(k+1)(state(k+1),learning_rate) =(1 − α)Qk(state, learning_rate)+α(queue_size + γ + mawQ)

queue_size参数是通过放置在信号量中的传感器注册的信息获得的。当前状态每个用户定义的时间段更新,随着时间的推移允许更精准的决策。

紧急模式机制

1、当交通灯中断或者节点链接丢失会采取的什么方案? 紧急模式是种协议,可以确保只有一个信号量被设置为绿色,并且可以在缺乏链接的情况下避免交通事故的发生。因为即使出现问题或不再收集数据,也可以高效的管理流量。在发生传感器故障会让Flink发送消息困难,紧急模式允许稳定的信号量工作。紧急模式是通过定义一个循环时间来实现的,该时间给出了关于绿色信号量在红色信号量占比多少度量,因为强调了交通灯坏掉后的事件的严重性,因此考虑实施实时 2、通知系统的机制,可以直观且不同于最常用的解决方案。 构建交通灯管理系统中创建仅管理员可以读写的组,这样可以避免垃圾信息并且只能发送紧急消息,附加损坏的信号量ID,地理坐标并最终损坏的灯泡类别。这种解决方案提高了与管理人员的可视化交互能力,无需担心创建完整系统的紧急状况。

数据存储格式:

成员介绍

阿里云天池昵称:6utdmwrvoyumo

xuyi01048047 commented 2 years ago

hi~I'm Tina ,Operations Manager ,the organizer of FFA hackathon Can you tell me your WeChat ,Email or Dingtalk?