mirror of
https://github.com/a-b-street/abstreet.git
synced 2024-12-25 23:43:25 +03:00
Tool to add return trips for a scenario. #539
This commit is contained in:
parent
18a0197fba
commit
99bf415ede
@ -9,24 +9,32 @@
|
|||||||
//! in; be careful about running this on the correct input. It modifies the given `--input` binary
|
//! in; be careful about running this on the correct input. It modifies the given `--input` binary
|
||||||
//! scenario in-place.
|
//! scenario in-place.
|
||||||
|
|
||||||
|
use rand::{Rng, SeedableRng};
|
||||||
|
use rand_xorshift::XorShiftRng;
|
||||||
|
|
||||||
use abstutil::{CmdArgs, Timer};
|
use abstutil::{CmdArgs, Timer};
|
||||||
|
use geom::Duration;
|
||||||
use map_model::Map;
|
use map_model::Map;
|
||||||
use sim::Scenario;
|
use sim::{IndividTrip, Scenario, TripPurpose};
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let mut args = CmdArgs::new();
|
let mut args = CmdArgs::new();
|
||||||
let input = args.required("--input");
|
let input = args.required("--input");
|
||||||
let should_add_return_trips = args.enabled("--add_return_trips");
|
let should_add_return_trips = args.enabled("--add_return_trips");
|
||||||
let should_add_lunch_trips = args.enabled("--add_lunch_trips");
|
let should_add_lunch_trips = args.enabled("--add_lunch_trips");
|
||||||
|
let rng_seed: u64 = args
|
||||||
|
.optional_parse("--rng_seed", |s| s.parse())
|
||||||
|
.unwrap_or(42);
|
||||||
args.done();
|
args.done();
|
||||||
|
|
||||||
|
let mut rng = XorShiftRng::seed_from_u64(rng_seed);
|
||||||
let mut timer = Timer::new("augment scenario");
|
let mut timer = Timer::new("augment scenario");
|
||||||
|
|
||||||
let mut scenario: Scenario = abstio::must_read_object(input, &mut timer);
|
let mut scenario: Scenario = abstio::must_read_object(input, &mut timer);
|
||||||
let map = Map::new(scenario.map_name.path(), &mut timer);
|
let map = Map::new(scenario.map_name.path(), &mut timer);
|
||||||
|
|
||||||
if should_add_return_trips {
|
if should_add_return_trips {
|
||||||
add_return_trips(&mut scenario, &map);
|
add_return_trips(&mut scenario, &mut rng);
|
||||||
}
|
}
|
||||||
if should_add_lunch_trips {
|
if should_add_lunch_trips {
|
||||||
add_lunch_trips(&mut scenario, &map, &mut timer);
|
add_lunch_trips(&mut scenario, &map, &mut timer);
|
||||||
@ -35,6 +43,26 @@ fn main() {
|
|||||||
scenario.save();
|
scenario.save();
|
||||||
}
|
}
|
||||||
|
|
||||||
fn add_return_trips(scenario: &mut Scenario, map: &Map) {}
|
fn add_return_trips(scenario: &mut Scenario, rng: &mut XorShiftRng) {
|
||||||
|
for person in &mut scenario.people {
|
||||||
|
if person.trips.len() != 1 {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Assume a uniform distribution of 4-12 hour workday
|
||||||
|
let depart =
|
||||||
|
person.trips[0].depart + rand_duration(rng, Duration::hours(4), Duration::hours(12));
|
||||||
|
person.trips.push(IndividTrip::new(
|
||||||
|
depart,
|
||||||
|
TripPurpose::Home,
|
||||||
|
person.origin,
|
||||||
|
person.trips[0].mode,
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fn add_lunch_trips(scenario: &mut Scenario, map: &Map, timer: &mut Timer) {}
|
fn add_lunch_trips(scenario: &mut Scenario, map: &Map, timer: &mut Timer) {}
|
||||||
|
|
||||||
|
fn rand_duration(rng: &mut XorShiftRng, low: Duration, high: Duration) -> Duration {
|
||||||
|
Duration::seconds(rng.gen_range(low.inner_seconds()..high.inner_seconds()))
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user