Config Settings¶
Params of Env Simulator¶
This will introduce the details about environmental simulators’ Parameters
CityFlow Config File¶
Referred from: https://cityflow.readthedocs.io/en/latest/start.html#data-access-api
{
"interval": 1.0,
"seed": 0,
"dir": "data/",
"roadnetFile": "cityflow_1x1/roadnet.json",
"flowFile": "cityflow_1x1/flow.json",
"rlTrafficLight": true,
"saveReplay": false,
"roadnetLogFile": "cityflow_1x1/replay/2022_07_19-09_28_40.json",
"replayLogFile": "cityflow_1x1/replay/2022_07_19-09_28_40.txt"
}
interval: time of each simulation step (in seconds).
seed: random seed.
dir: root directory, all file path will be relative to this directory.
roadnetFile: path for roadnet file.
flowFile: path for flow file.
rlTrafficLight: whether to enable traffic light control through python API. If set to
false
, default traffic light plan defined inroadnetFile
will be used.saveReplay: whether to save simulation for replay. If set to
true
,roadnetLogFile
andreplayLogFile
are required.roadnetLogFile: path for roadnet replay file. This is a special roadnet file for replay, not the same as
roadnetFile
.replayLogFile: path for replay. This file contains vehicle positions and traffic light situation of each simulation step.
SUMO Config File¶
{
"interval": 1.0,
"seed": 0,
"dir": "data/",
"combined_file": "cityflow_1x1/cityflow_1x1.sumocfg",
"roadnetFile": "cityflow_1x1/cityflow_1x1.net.xml",
"flowFile": "cityflow_1x1/cityflow_1x1.rou.xml",
"convertroadnetFile": "cityflow_1x1/cityflow_1x1_roadnet.json",
"convertflowFile": "cityflow_1x1/cityflow_1x1_flow.json",
"no_warning": true,
"name": "debug",
"yellow_length": 5,
"gui": false
}
interval: time of each simulation step (in seconds).
seed: random seed.
dir: root directory, all file path will be relative to this directory.
combined_file: path for SUMO configuration file.
roadnetFile: path for SUMO roadnet file.
flowFile: path for SUMO flow file.
convertroadnetFile: path for SUMO roadnet file.
convertflowFile: path for SUMO flow file.
no_warning:
name:
yellow_length: default yellow time. The default is set to 5 s.
gui: whether to use SUMO-GUI tools.
Params of TSC Process and Agents¶
Parameters about training proccess and agents
base.yml¶
common parameters of the framework
task:
description: Use RL methods to optimize traffic signal control problem
task_name: tsc
world:
# necessary and distinctive parameters for simulators
interval: 1.0
seed: 0
dir: data/
saveReplay: False
report_log_mode: normal # cbengine
report_log_rate: 10
no_warning: True
gui: False
rlTrafficLight: True
trainer:
thread: 4
ngpu: -1
learning_start: 5000
buffer_size: 5000
steps: 3600
test_steps: 3600
yellow_length: 5
action_interval: 10
episodes: 200
update_model_rate: 1
update_target_rate: 10
test_when_train: True
model:
name: "non-rl"
train_model: False
test_model: True
load_model: False
graphic: False
vehicle_max: 1
learning_rate: 0.001
batch_size: 64
gamma: 0.95
epsilon: 0.5
epsilon_decay: 0.99
epsilon_min: 0.05
grad_clip: 5.0
one_hot: False
phase: False
logger:
root_dir: "data/output_data/"
log_dir: "logger/"
replay_dir: "replay/"
model_dir: "model/"
data_dir: "dataset/"
save_model: True
save_rate: 200
attention: False
Task
description: description of task
task_name: task name
World
interval: time of each simulation step (in seconds).
seed: random seed.
dir: root directory, all file path will be relative to this directory.
saveReplay: whether to save simulation for replay. Used for CityFlow.
report_log_mode:
report_log_rate: rate of report log.
no_warning:
gui: whether use SUMO-GUI tools
rlTrafficLight: whether to enable traffic light control through python API. If set to false, default traffic light plan defined in roadnetFile will be used.
Trainer
thread: number of threads.
ngpu: number of gpu to be used.
learning_start: how many steps start to update model.
buffer_size: size of memory buffer.
steps: number of training steps in one episode.
test_steps: number of test steps in one episode.
yellow_length: yellow time.
action_interval: time interval to perform actions.
episodes: number of one complete process.
update_model_rate: rate of updating model.
update_target_rate: rate of updating target model.
test_when_train: whether to test model after each episode.
Model
name: type of model, support non-rl and rl models.
train_model: whether to train model, False for non-rl models, True for rl models.
test_model: whether to test model.
load_model: whether to load pretrained model.
graphic: whether to use graph to train model. Now it support DGL.
vehicle_max:
learning_rate: the step size at each iteration while moving toward a minimum of a loss function.
batch_size: the number of samples utilized in one iteration.
gamma: discount factor.
epsilon: probability of random actions.
epsilon_decay: decay of epsilon on the next training episode.
epsilon_min: minimum value of epsilon.
grad_clip: clip gradients according to this parameter.
one_hot: whether to encode phase.
phase: whether to add phase into model’s feature.
Logger
root_dir: root directory, all file path of output data will be relative to this directory.
log_dir: root directory of logger.
replay_dir: root directory of replay.
model_dir: root directory of model.
data_dir: root directory of dataset.
save_model: whether to save model’s parameters.
save_rate: rate of saving related parameters.
attention:
Note: The value of common parameters will be overwritten if it appears in a model file when loading parameters in training process.
FixedTime.yml¶
includes:
- configs/tsc/base.yml
model:
name: fixedtime
t_fixed: 10
trainer:
episodes: 1
buffer_size: 0
action_interval: 10
learning_rate: 0
learning_start: 0
update_model_rate: 0
update_target_rate: 0
logger:
save_rate: 1
train_model: False
test_model: True
load_model: False
MaxPressure.yml¶
includes:
- configs/tsc/base.yml
model:
name: maxpressure
t_min: 10
trainer:
buffer_size: 0
action_interval: 10
learning_rate: 0
learning_start: 0
update_model_rate: 0
update_target_rate: 0
logger:
save_rate: 0
train_model: False
test_model: True
load_model: False
t_min:
SOTL.yml¶
includes:
- configs/tsc/base.yml
model:
name: sotl
min_green_vehicle: 3
max_red_vehicle: 6
t_min: 5
trainer:
episodes: 1
buffer_size: 0
learning_rate: 0
learning_start: 0
update_model_rate: 0
update_target_rate: 0
logger:
save_rate: 0
train_model: False
test_model: True
load_model: False
IDQN.yml¶
includes:
- configs/tsc/base.yml
model:
name: dqn
train_model: True
MAPG.yml¶
includes:
- configs/tsc/base.yml
model:
name: magd
train_model: True
local_q_learn: False
tau: 0.01
learning_rate: 0.01
batch_size: 256
grad_clip: 0.5
epsilon: 0.5
epsilon_decay: 0.998
epsilon_min: 0.05
trainer:
episodes: 2000
update_model_rate: 30
update_target_rate: 30
action_interval: 20
IPPO.yml¶
includes:
- configs/tsc/base.yml
model:
name: ppo
graphic: False
vehicle_max: 1
learning_rate: 0.001
update_interval: 1024
batch_size: 64
gamma: 0.95
epsilon: 0.1
epsilon_decay: 0.995
epsilon_min: 0.01
grad_clip: 5.0
NEIGHBOR_NUM: 4
NEIGHBOR_EDGE_NUM: 4
trainer:
learning_start: 1000
buffer_size: 1024
PressLight.yml¶
includes:
- configs/tsc/base.yml
model:
name: presslight
train_model: True
d_dense: 20
epsilon: 0.1
epsilon_decay: 0.995
epsilon_min: 0.01
one_hot: True
phase: True
trainer:
learning_start: 1000
CoLight.yml¶
includes:
- configs/tsc/base.yml
model:
name: colight
graphic: True
vehicle_max: 1
learning_rate: 0.001
batch_size: 64
gamma: 0.95
epsilon: 0.8
epsilon_decay: 0.9995
epsilon_min: 0.01
grad_clip: 5.0
NEIGHBOR_NUM: 4
NEIGHBOR_EDGE_NUM: 4
N_LAYERS: 1
INPUT_DIM: [128, 128]
OUTPUT_DIM: [128, 128]
NODE_EMB_DIM: [128, 128]
NUM_HEADS: [5, 5]
NODE_LAYER_DIMS_EACH_HEAD: [16, 16]
OUTPUT_LAYERS: []
one_hot: True
phase: False
trainer:
learning_start: 1000
train_model: True
FRAP.yml¶
includes:
- configs/agents/tsc/base.yml
model:
name: frap
n_layers: 2
rotation: true
conflict_matrix: true
merge: multiply
d_dense: 20
learning_rate: 0.001
batch_size: 64
gamma: 0.95
epsilon: 0.1
epsilon_decay: 0.995
epsilon_min: 0.01
grad_clip: 5.0
demand_shape: 1
one_hot: False
phase: True
trainer:
learning_start: 1000
train_model: True
world:
phases: ['NT_ST','WT_ET','NL_SL','WL_EL','NL_NT','SL_ST','WL_WT','EL_ET']
list_lane_order: ['ET','EL','ST','SL','WT','WL','NT','NL']
phase_expansion: {
1: [0, 0, 1, 0, 0, 0, 1, 0],
2: [1, 0, 0, 0, 1, 0, 0, 0],
3: [0, 0, 0, 1, 0, 0, 0, 1],
4: [0, 1, 0, 0, 0, 1, 0, 0],
5: [0, 0, 0, 0, 0, 0, 1, 1],
6: [0, 0, 1, 1, 0, 0, 0, 0],
7: [0, 0, 0, 0, 1, 1, 0, 0],
8: [1, 1, 0, 0, 0, 0, 0, 0]
}
phase_expansion_4_lane: {1: [0,0,1,1],2: [1,1,0,0]}
signal_config: {
grid4x4: {
phase_pairs: [[1, 7], [2, 8], [1, 2], [7, 8], [4, 10], [5, 11], [10, 11], [4, 5]],
valid_acts: null,
cf_order: {'N': 0,'E': 1,'S': 2, 'W': 3},
sumo_order: {'N': 2,'E': 3,'S': 0, 'W': 1}
},
hz1x1: {
# phases: ['ET_WT','NT_ST','EL_WL','NL_SL','WL_WT','EL_ET','SL_ST','NL_NT']
phase_pairs: [[2, 6], [0, 4], [3, 7], [1, 5], [6, 7], [2, 3], [4, 5], [0, 1]],
# phases: ['NT_ST','WT_ET','NL_SL','WL_EL','NL_NT','SL_ST','WL_WT','EL_ET']
# phase_pairs: [[1, 5], [3, 7], [0, 4], [2, 6], [0, 1], [4, 5], [6, 7], [2, 3]],
valid_acts: null,
cf_order: {'N': 0,'E': 1,'S': 2, 'W': 3},
sumo_order: {'N': 2,'E': 3,'S': 0, 'W': 1}
},
hz4x4: {
# phases: ['NT_ST','WT_ET','NL_SL','WL_EL','NL_NT','SL_ST','WL_WT','EL_ET']
phase_pairs: [[4, 10], [1, 7], [3, 9], [0, 6], [9, 10], [3, 4], [6, 7], [0, 1]],
valid_acts: null,
cf_order: {'N': ,'E': ,'S': , 'W': },
sumo_order: {'N': ,'E': ,'S': , 'W': }
},
cologne1: {
phase_pairs: [[1, 5], [0, 4], [3, 7], [2, 6]],
valid_acts: null,
cf_order: {'N': 3,'E': 0,'S': 1, 'W': 2},
sumo_order: {'N': 1,'E': 2,'S': 3, 'W': 0}
},
cologne3: {
phase_pairs: [[1, 7], [2, 8], [1, 2], [7, 8], [4, 10], [5, 11], [10, 11], [4, 5], [9, 11]],
valid_acts: {
GS_cluster_2415878664_254486231_359566_359576: {4: 0, 5: 1, 0: 2, 1: 3},
360086: {4: 0, 5: 1, 0: 2, 1: 3},
360082: {4: 0, 5: 1, 1: 2}
},
cf_order: {
'360082': {'N': -1,'E': 0,'S': 1, 'W': 2},
'360086': {'N': 3,'E': 0,'S': 1, 'W': 2},
'cluster_2415878664_254486231_359566_359576': {'N': 3,'E': 0,'S': 1, 'W': 2}
},
sumo_order: {
'360082': {'N': -1,'E': 1,'S': 2, 'W': 0},
'360086': {'N': 1,'E': 2,'S': 3, 'W': 0},
'cluster_2415878664_254486231_359566_359576': {'N': 1,'E': 2,'S': 3, 'W': 0}
}
}
}
MPLight.yml¶
includes:
- configs/tsc/base.yml
model:
name: mplight
train_model: True
n_layers: 2
rotation: true
conflict_matrix: true
merge: multiply
d_dense: 20
learning_rate: 0.001
batch_size: 32
gamma: 0.99
eps_start: 1.0
eps_end: 0.0
eps_decay: 220
target_update: 500
demand_shape: 1
phase: True
trainer:
learning_start: -1
buffer_size: 10000
world:
phases: ['NT_ST','WT_ET','NL_SL','WL_EL','NL_NT','SL_ST','WL_WT','EL_ET']
list_lane_order: ['ET','EL','ST','SL','WT','WL','NT','NL']
phase_expansion: {
1: [0, 0, 1, 0, 0, 0, 1, 0],
2: [1, 0, 0, 0, 1, 0, 0, 0],
3: [0, 0, 0, 1, 0, 0, 0, 1],
4: [0, 1, 0, 0, 0, 1, 0, 0],
5: [0, 0, 0, 0, 0, 0, 1, 1],
6: [0, 0, 1, 1, 0, 0, 0, 0],
7: [0, 0, 0, 0, 1, 1, 0, 0],
8: [1, 1, 0, 0, 0, 0, 0, 0]
}
phase_expansion_4_lane: {1: [0,0,1,1],2: [1,1,0,0]}
signal_config: {
grid4x4: {
phase_pairs: [[1, 7], [2, 8], [1, 2], [7, 8], [4, 10], [5, 11], [10, 11], [4, 5]],
valid_acts: null
},
cityflow1x1: {
# phases: ['ET_WT','NT_ST','EL_WL','NL_SL','WL_WT','EL_ET','SL_ST','NL_NT']
# phase_pairs: [[3, 7], [1, 5], [2, 6], [0, 4], [6, 7], [2, 3], [4, 5], [0, 1]],
# phases: ['NT_ST','WT_ET','NL_SL','WL_EL','NL_NT','SL_ST','WL_WT','EL_ET']
phase_pairs: [[1, 5], [3, 7], [0, 4], [2, 6], [0, 1], [4, 5], [6, 7], [2, 3]],
valid_acts: null
},
cityflow4x4: {
# phases: ['NT_ST','WT_ET','NL_SL','WL_EL','NL_NT','SL_ST','WL_WT','EL_ET']
phase_pairs: [[4, 10], [1, 7], [3, 9], [0, 6], [9, 10], [3, 4], [6, 7], [0, 1]],
valid_acts: null
},
cologne1: {
phase_pairs: [[1, 7], [2, 8], [4, 10], [5, 11]],
valid_acts: null
},
cologne3: {
phase_pairs: [[1, 7], [2, 8], [1, 2], [7, 8], [4, 10], [5, 11], [10, 11], [4, 5], [9, 11]],
valid_acts: {
GS_cluster_2415878664_254486231_359566_359576: {4: 0, 5: 1, 0: 2, 1: 3},
360086: {4: 0, 5: 1, 0: 2, 1: 3},
360082: {4: 0, 5: 1, 1: 2}
}
}
}