Skip to content

magiczhuo/cityflow_rl

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

79 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

  • Roadnet.json 文件格式说明
  • 坐标表示约定

系统中的地理和方向元素采用以下坐标表示形式:

  • Intersection (交叉路口): intersection_x_y * x: 横坐标 * y: 纵坐标

  • Road (道路): road_x_y_i * x: 道路起点的横坐标 * y: 道路起点的纵坐标 * i: 表示道路的前进方向,取值为 0-3:

    • 0: 向右 (东)
    • 1: 向上 (北)
    • 2: 向左 (西)
    • 3: 向下 (南)

    注:方向约定从向右开始,逆时针方向变换

  • Lane (车道): lane_x_y_i_j * x, y, i: 与其所属的 Road 定义一致 * j: 表示当前道路中该车道的索引

  • Roadnet.json 结构说明

Roadnet.json 文件定义了以下关键元素:
  • intersection(交叉路口)
  • intersection邻接的roads(道路)
  • roads的lanes(车道)
  • lightphase在不同time下的available roadlinkindices(信号灯相位)[{'time':5, 'availableroadlinks': []}, {}, {}]
  • ⚠️ 重要说明
Roadlinks
  • Roadlinks为一个列表,记录当前intersection中所有的起始road-终止road的link
  • 每一个roadlink使用字典储存
  • 每一个roadlinks列表中的roadlink字典,记录了当前road link的种类(turn left等),以及起始road-终止road的link
  • 每一个roadlink中包含了所有的lane links
  • Key为"Lanelinks"的子字典中记录的是可以变道的所有情况
  • Points为变道过程中为了可视化变道过程所设计的点

交通信号灯: * 在当前的intersection sample中一共有12个roadlinks * key为"trafficlight"的字典中"roadlinkindices"为当前路口的各个road之间的汽车行驶方式的index * Key为"lightphases"的字典中为时长不同"time"下的"availableroadlink"的可行使的roadlink的index

  • Reinforcement Learning 接口
  • 写好的DQN放置于主文件夹中
  • 文件tests/python/test_api2.py中通过调用DeepQNetwork初始化RL
  • 首先检查当前处于第一步还是一后之前step,通过for循环完成状态更新。
  • 代码 line 80开始,根据当前各项observation,选择action,并根据人为逆推出的intersection_id和选择的action,对traffic light进行控制,并进一步模拟next_step。
  • 人为设定intersection_id思路,根据quick start文档中对intersection_id,lane_id,road_id等格式的描述,对字符串进行处理,通过cityflow.c中定义的函数返回的lane_id,逆推出对应的intersection_id,即代码line 66-75 、 line 98-107 部分。
  • 代码 line 112 开始,定义当前的reward,即选择了action之后的observation根据当前road中所有的lane上等待的车辆与总车辆的数量的比例,简单的赋值reward为0,0.5,1。最后通过store_transition更新网络记忆。
  • ⚠️ 重要说明
  • 当前每一次step都会存储不止一次memory,即每一个intersection都是一次next observation,而不是全局的所有的intersection为一个整体的状态。需要改进!!!
  • 根据源代码中的set_tl_phase函数以及初始化的intersection、trafficlight等类,原始代码中直接定义了intersection中traffic light的多种不同状态phase,phase为包含字典的列表,即上述roadnet.json当中的lightphases。这里的choose action仅根据当前intersection中的多种状态进行选择和切换,并非直接控制traffic light的红黄绿变化。

About

Employing reinforcement learning in Cityflow

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors