new strawman 2-phase traffic signal policy

This commit is contained in:
Dustin Carlino 2019-10-22 13:54:09 -07:00
parent 25ab691946
commit 92b15507d5

View File

@ -45,6 +45,10 @@ impl ControlTrafficSignal {
"arbitrary assignment".to_string(),
ControlTrafficSignal::greedy_assignment(map, id),
));
results.push((
"all walk, then free-for-all yield".to_string(),
ControlTrafficSignal::all_walk_all_yield(map, id),
));
results
}
@ -355,6 +359,33 @@ impl ControlTrafficSignal {
ts.validate(map).ok()
}
fn all_walk_all_yield(map: &Map, i: IntersectionID) -> ControlTrafficSignal {
let mut all_walk = Phase::new(i);
let mut all_yield = Phase::new(i);
for turn in map.get_turns_in_intersection(i) {
match turn.turn_type {
TurnType::SharedSidewalkCorner => {
all_walk.priority_turns.insert(turn.id);
all_yield.priority_turns.insert(turn.id);
}
TurnType::Crosswalk => {
all_walk.priority_turns.insert(turn.id);
}
_ => {
all_yield.yield_turns.insert(turn.id);
}
}
}
let ts = ControlTrafficSignal {
id: i,
phases: vec![all_walk, all_yield],
};
// This must succeed
ts.validate(map).unwrap()
}
pub fn convert_to_ped_scramble(&mut self, map: &Map) {
// Remove Crosswalk turns from existing phases.
for phase in self.phases.iter_mut() {