Skip to content

Commit 35982fd

Browse files
committed
updated RunMatsimActiveMode to use hard coded coefficients as per jibeproject/silo#168 (not really an issue with MITO or the coefficient lookup method exactly, but the coefficient lookup method contributes to SILO running slowly, so until this can be optimised we should use consistent approach across all code bases)
1 parent 9e2d157 commit 35982fd

1 file changed

Lines changed: 93 additions & 3 deletions

File tree

use-cases/melbourne/src/main/java/uk/cam/mrc/phm/RunMatsimActiveMode.java

Lines changed: 93 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
import static uk.cam.mrc.phm.util.CoefficientLookup.CoefficientSet;
4242

4343
import java.util.*;
44+
import java.util.function.Function;
4445
import java.util.function.ToDoubleFunction;
4546

4647
import static uk.cam.mrc.phm.util.MelbourneImplementationConfig.getMelbourneProperties;
@@ -201,21 +202,110 @@ private static void fillBikePedConfig(Config bikePedConfig) {
201202
bikeAttributes.add(l -> Math.max(Math.min(Gradient.getGradient(l),0.5),0.));
202203
bikeAttributes.add(l -> LinkStress.getStress(l,TransportMode.bike));
203204

205+
// Bike weights
206+
Function<org.matsim.api.core.v01.population.Person,double[]> bikeWeights = p -> {
207+
switch((Purpose) p.getAttributes().getAttribute("purpose")) {
208+
case HBW -> {
209+
if(p.getAttributes().getAttribute("sex").equals(MitoGender.FEMALE)) {
210+
// https://github.com/jibeproject/matsim-jibe/blob/3d1a34d60a9a1aae5945967b728d5254ba596dd6/src/main/java/skim/RunSkimsMelbourne.java#L130
211+
return new double[] {0, 1.1705777 + 1.3119864};
212+
} else {
213+
// https://github.com/jibeproject/matsim-jibe/blob/3d1a34d60a9a1aae5945967b728d5254ba596dd6/src/main/java/skim/RunSkimsMelbourne.java#L129
214+
return new double[] {0, 1.1705777};
215+
}
216+
}
217+
case HBE -> {
218+
// https://github.com/jibeproject/matsim-jibe/blob/3d1a34d60a9a1aae5945967b728d5254ba596dd6/src/main/java/skim/RunSkimsMelbourne.java#L139
219+
return new double[] {65.8455067, 2.6375670};
220+
}
221+
case HBR -> {
222+
if ((int) p.getAttributes().getAttribute("age") < 16) {
223+
// https://github.com/jibeproject/matsim-jibe/blob/3d1a34d60a9a1aae5945967b728d5254ba596dd6/src/main/java/skim/RunSkimsMelbourne.java#L149
224+
return new double[] {8.7270880 + 51.9352371, 0 + 4.6070250};
225+
}
226+
else if(p.getAttributes().getAttribute("sex").equals(MitoGender.FEMALE)) {
227+
// https://github.com/jibeproject/matsim-jibe/blob/3d1a34d60a9a1aae5945967b728d5254ba596dd6/src/main/java/skim/RunSkimsMelbourne.java#L148
228+
return new double[] {8.7270880 + 23.5710917, 0 + 1.7298508};
229+
} else {
230+
// https://github.com/jibeproject/matsim-jibe/blob/3d1a34d60a9a1aae5945967b728d5254ba596dd6/src/main/java/skim/RunSkimsMelbourne.java#L147
231+
return new double[] {8.7270880, 0};
232+
}
233+
}
234+
case HBS, HBO -> {
235+
// https://github.com/jibeproject/matsim-jibe/blob/3d1a34d60a9a1aae5945967b728d5254ba596dd6/src/main/java/skim/RunSkimsMelbourne.java#L161
236+
return new double[]{331.2382835, 11.4359257};
237+
}
238+
case HBA -> {
239+
// https://github.com/jibeproject/matsim-jibe/blob/3d1a34d60a9a1aae5945967b728d5254ba596dd6/src/main/java/skim/RunSkimsMelbourne.java#L169
240+
return new double[]{21.4115565, 0};
241+
}
242+
case NHBW -> {
243+
// https://github.com/jibeproject/matsim-jibe/blob/3d1a34d60a9a1aae5945967b728d5254ba596dd6/src/main/java/skim/RunSkimsMelbourne.java#L175
244+
return new double[]{0, 3.9477647};
245+
}
246+
case NHBO -> {
247+
// https://github.com/jibeproject/matsim-jibe/blob/3d1a34d60a9a1aae5945967b728d5254ba596dd6/src/main/java/skim/RunSkimsMelbourne.java#L183
248+
return new double[]{0, 2.6660050};
249+
}
250+
default -> {
251+
return null;
252+
}
253+
}
254+
};
255+
204256
// Bicycle config group
205257
BicycleConfigGroup bicycle = (BicycleConfigGroup) bikePedConfig.getModules().get(BicycleConfigGroup.GROUP_NAME);
206258
bicycle.setAttributes(bikeAttributes);
207-
bicycle.setWeights(RunMatsimActiveMode::calculateBikeWeights);
259+
bicycle.setWeights(bikeWeights);
208260

209261
// WALK ATTRIBUTES
210262
List<ToDoubleFunction<Link>> walkAttributes = new ArrayList<>();
211263
walkAttributes.add(l -> Math.max(0.,0.81 - LinkAmbience.getVgviFactor(l)));
212264
walkAttributes.add(l -> Math.min(1.,l.getFreespeed() / 22.35));
213-
walkAttributes.add(l -> JctStress.getStressProp(l,TransportMode.walk));
265+
266+
// Walk weights
267+
Function<org.matsim.api.core.v01.population.Person,double[]> walkWeights = p -> {
268+
switch ((Purpose) p.getAttributes().getAttribute("purpose")) {
269+
case HBW -> {
270+
// https://github.com/jibeproject/matsim-jibe/blob/3d1a34d60a9a1aae5945967b728d5254ba596dd6/src/main/java/skim/RunSkimsMelbourne.java#L131
271+
return new double[]{0, 2.2560371};
272+
}
273+
case HBE -> {
274+
// https://github.com/jibeproject/matsim-jibe/blob/3d1a34d60a9a1aae5945967b728d5254ba596dd6/src/main/java/skim/RunSkimsMelbourne.java#L140
275+
return new double[]{0, 0.8270912};
276+
}
277+
case HBR -> {
278+
if ((int) p.getAttributes().getAttribute("age") < 16) {
279+
// https://github.com/jibeproject/matsim-jibe/blob/3d1a34d60a9a1aae5945967b728d5254ba596dd6/src/main/java/skim/RunSkimsMelbourne.java#L151
280+
return new double[] {0.6866997, 0.6779886 + 1.0379374};
281+
} else {
282+
// https://github.com/jibeproject/matsim-jibe/blob/3d1a34d60a9a1aae5945967b728d5254ba596dd6/src/main/java/skim/RunSkimsMelbourne.java#L150
283+
return new double[] {0.6866997, 0.6779886};
284+
}
285+
}
286+
287+
case HBS, HBO -> {
288+
// https://github.com/jibeproject/matsim-jibe/blob/3d1a34d60a9a1aae5945967b728d5254ba596dd6/src/main/java/skim/RunSkimsMelbourne.java#L162C120-L162C132
289+
return new double[]{0, 0.3421390};
290+
}
291+
case NHBW -> {
292+
// https://github.com/jibeproject/matsim-jibe/blob/3d1a34d60a9a1aae5945967b728d5254ba596dd6/src/main/java/skim/RunSkimsMelbourne.java#L176
293+
return new double[]{0, 4.3210968};
294+
}
295+
case NHBO -> {
296+
// https://github.com/jibeproject/matsim-jibe/blob/3d1a34d60a9a1aae5945967b728d5254ba596dd6/src/main/java/skim/RunSkimsMelbourne.java#L184
297+
return new double[]{0, 5.7158683};
298+
}
299+
default -> {
300+
return null;
301+
}
302+
}
303+
};
214304

215305
// Walk config group
216306
WalkConfigGroup walkConfigGroup = (WalkConfigGroup) bikePedConfig.getModules().get(WalkConfigGroup.GROUP_NAME);
217307
walkConfigGroup.setAttributes(walkAttributes);
218-
walkConfigGroup.setWeights(RunMatsimActiveMode::calculateWalkWeights);
308+
walkConfigGroup.setWeights(walkWeights);
219309

220310
ActivityParams homeActivity = new ActivityParams("home").setTypicalDuration(getHoursAsSeconds(12));
221311
bikePedConfig.scoring().addActivityParams(homeActivity);

0 commit comments

Comments
 (0)