1
1
package org .eqasim .core .scenario .routing ;
2
2
3
+ import java .util .HashMap ;
3
4
import java .util .HashSet ;
5
+ import java .util .Map ;
4
6
import java .util .Set ;
5
7
6
8
import org .eqasim .core .misc .InjectorBuilder ;
7
9
import org .eqasim .core .simulation .EqasimConfigurator ;
10
+ import org .matsim .api .core .v01 .Id ;
8
11
import org .matsim .api .core .v01 .Scenario ;
12
+ import org .matsim .api .core .v01 .population .Leg ;
13
+ import org .matsim .api .core .v01 .population .Person ;
14
+ import org .matsim .api .core .v01 .population .Plan ;
9
15
import org .matsim .core .config .CommandLine ;
10
16
import org .matsim .core .config .CommandLine .ConfigurationException ;
11
17
import org .matsim .core .config .Config ;
12
18
import org .matsim .core .config .ConfigUtils ;
19
+ import org .matsim .core .config .groups .QSimConfigGroup .VehiclesSource ;
13
20
import org .matsim .core .population .io .PopulationWriter ;
21
+ import org .matsim .core .population .routes .NetworkRoute ;
22
+ import org .matsim .core .router .TripStructureUtils ;
14
23
import org .matsim .core .scenario .ScenarioUtils ;
15
24
import org .matsim .core .utils .timing .TimeInterpretationModule ;
16
25
import org .matsim .facilities .ActivityFacility ;
26
+ import org .matsim .vehicles .Vehicle ;
27
+ import org .matsim .vehicles .VehicleUtils ;
28
+ import org .matsim .vehicles .Vehicles ;
29
+ import org .matsim .vehicles .VehiclesFactory ;
17
30
18
31
import com .google .inject .Injector ;
19
32
@@ -34,6 +47,7 @@ static public void main(String[] args) throws ConfigurationException, Interrupte
34
47
.orElse (Runtime .getRuntime ().availableProcessors ());
35
48
36
49
Scenario scenario = ScenarioUtils .loadScenario (config );
50
+ insertVehicles (config , scenario );
37
51
38
52
if (scenario .getActivityFacilities () != null ) {
39
53
for (ActivityFacility facility : scenario .getActivityFacilities ().getFacilities ().values ()) {
@@ -54,12 +68,52 @@ static public void main(String[] args) throws ConfigurationException, Interrupte
54
68
Injector injector = new InjectorBuilder (scenario ) //
55
69
.addOverridingModules (configurator .getModules ()) //
56
70
.addOverridingModule (new PopulationRouterModule (numberOfThreads , batchSize , true , modes )) //
57
- .addOverridingModule (new TimeInterpretationModule ())
58
- .build ();
71
+ .addOverridingModule (new TimeInterpretationModule ()).build ();
59
72
60
73
PopulationRouter populationRouter = injector .getInstance (PopulationRouter .class );
61
74
populationRouter .run (scenario .getPopulation ());
62
75
76
+ clearVehicles (config , scenario );
63
77
new PopulationWriter (scenario .getPopulation ()).write (cmd .getOptionStrict ("output-path" ));
64
78
}
79
+
80
+ static private void insertVehicles (Config config , Scenario scenario ) {
81
+ if (config .qsim ().getVehiclesSource ().equals (VehiclesSource .defaultVehicle )) {
82
+ Vehicles vehicles = scenario .getVehicles ();
83
+ VehiclesFactory factory = vehicles .getFactory ();
84
+
85
+ vehicles .addVehicleType (VehicleUtils .getDefaultVehicleType ());
86
+
87
+ for (Person person : scenario .getPopulation ().getPersons ().values ()) {
88
+ Map <String , Id <Vehicle >> personVehicles = new HashMap <>();
89
+
90
+ for (String mode : config .plansCalcRoute ().getNetworkModes ()) {
91
+ Vehicle vehicle = factory .createVehicle (Id .createVehicleId (person .getId ().toString () + ":" + mode ),
92
+ VehicleUtils .getDefaultVehicleType ());
93
+ vehicles .addVehicle (vehicle );
94
+
95
+ personVehicles .put (mode , vehicle .getId ());
96
+ }
97
+
98
+ VehicleUtils .insertVehicleIdsIntoAttributes (person , personVehicles );
99
+ }
100
+ }
101
+ }
102
+
103
+ static private void clearVehicles (Config config , Scenario scenario ) {
104
+ if (config .qsim ().getVehiclesSource ().equals (VehiclesSource .defaultVehicle )) {
105
+ for (Person person : scenario .getPopulation ().getPersons ().values ()) {
106
+ person .getAttributes ().removeAttribute ("vehicles" );
107
+
108
+ for (Plan plan : person .getPlans ()) {
109
+ for (Leg leg : TripStructureUtils .getLegs (plan )) {
110
+ if (leg .getRoute () instanceof NetworkRoute ) {
111
+ NetworkRoute route = (NetworkRoute ) leg .getRoute ();
112
+ route .setVehicleId (null );
113
+ }
114
+ }
115
+ }
116
+ }
117
+ }
118
+ }
65
119
}
0 commit comments