Skip to content

Commit dac8f06

Browse files
Merge pull request #117 from moia-oss/moia-deployment-fix
Moia deployment fix
2 parents 815d3bd + fb9d02c commit dac8f06

File tree

7 files changed

+174
-15
lines changed

7 files changed

+174
-15
lines changed

contribs/application/pom.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
</repositories>
2323

2424
<properties>
25-
<avro.version>1.11.3</avro.version>
25+
<avro.version>1.12.0</avro.version>
2626
</properties>
2727

2828
<dependencies>

contribs/drt/src/main/java/org/matsim/contrib/drt/prebooking/PrebookingStopActivity.java

+4-2
Original file line numberDiff line numberDiff line change
@@ -206,8 +206,10 @@ protected void simStep(double now) {
206206
@Override
207207
public void notifyPassengersAreReadyForDeparture(List<MobsimPassengerAgent> passengers, double now) {
208208
var request = getRequestForPassengers(passengers.stream().map(Identifiable::getId).toList());
209-
queuePickup(request, now);
210-
expectedPickups.remove(request.getId());
209+
if(expectedPickups.containsKey(request.getId())) {
210+
queuePickup(request, now);
211+
expectedPickups.remove(request.getId());
212+
}
211213
}
212214

213215
private AcceptedDrtRequest getRequestForPassengers(List<Id<Person>> passengerIds) {

contribs/freight/src/main/java/org/matsim/freight/carriers/controler/CarrierDriverAgent.java

+31-10
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,10 @@ void handleAnEvent(Event event){
9797
case LinkEnterEvent linkEnterEvent -> handleEvent(linkEnterEvent);
9898
case ActivityEndEvent activityEndEvent -> handleEvent(activityEndEvent);
9999
case ActivityStartEvent activityStartEvent -> handleEvent(activityStartEvent);
100+
case VehicleEntersTrafficEvent vehicleEntersTrafficEvent -> handleEvent(vehicleEntersTrafficEvent);
101+
case VehicleLeavesTrafficEvent vehicleLeavesTrafficEvent -> handleEvent(vehicleLeavesTrafficEvent);
102+
case PersonMoneyEvent personMoneyEvent -> handleEvent( personMoneyEvent );
103+
case PersonScoreEvent personScoreEvent -> handleEvent( personScoreEvent );
100104
case null, default -> createAdditionalEvents(event, null, scheduledTour, driverId, planElementCounter);
101105
}
102106
}
@@ -145,6 +149,33 @@ private void handleEvent( LinkEnterEvent event ){
145149
createAdditionalEvents( event, null, scheduledTour, driverId, planElementCounter );
146150
}
147151

152+
private void handleEvent( PersonScoreEvent event ){
153+
if( scoringFunction != null ){
154+
scoringFunction.handleEvent( event );
155+
}
156+
}
157+
158+
private void handleEvent( PersonMoneyEvent event ){
159+
if( scoringFunction != null ){
160+
scoringFunction.handleEvent( event );
161+
}
162+
}
163+
164+
private void handleEvent( VehicleEntersTrafficEvent event ){
165+
if( scoringFunction != null ){
166+
scoringFunction.handleEvent( event );
167+
}
168+
if ((Event) event instanceof VehicleEntersTrafficEvent vehicleEntersTrafficEvent) {
169+
driver2EventHandler.handleEvent(vehicleEntersTrafficEvent);
170+
}
171+
}
172+
173+
private void handleEvent( VehicleLeavesTrafficEvent event ){
174+
if( scoringFunction != null ){
175+
scoringFunction.handleEvent( event );
176+
}
177+
}
178+
148179
private void handleEvent( ActivityEndEvent event ){
149180
if( currentActivity == null ){
150181
Activity firstActivity = PopulationUtils.createActivityFromLinkId( event.getActType(), event.getLinkId() );
@@ -196,7 +227,6 @@ private void createAdditionalEvents( Event event, Activity activity, ScheduledTo
196227
// if( scoringFunction == null ){
197228
// (means "called from LSP". kai, jul'22)
198229

199-
driver2EventHandler.handleAnEvent(event);
200230
Id<Vehicle> vehicleId = driver2EventHandler.getVehicleOfDriver(driverId);
201231

202232
// Reason why this here is needed is that the more informative objects such as ScheduledTour cannot be
@@ -271,15 +301,6 @@ public Id<Vehicle> getVehicleOfDriver(Id<Person> personId){
271301
return driversVehicles.get(personId);
272302
}
273303

274-
public void handleAnEvent(Event event){
275-
if (event instanceof VehicleEntersTrafficEvent vehicleEntersTrafficEvent) {
276-
driver2EventHandler.handleEvent(vehicleEntersTrafficEvent);
277-
}
278-
if (event instanceof VehicleEntersTrafficEvent vehicleEntersTrafficEvent) {
279-
driver2EventHandler.handleEvent(vehicleEntersTrafficEvent);
280-
}
281-
}
282-
283304
}
284305

285306
}

matsim/src/main/java/org/matsim/core/scoring/PlansScoringImpl.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -52,11 +52,11 @@ final class PlansScoringImpl implements PlansScoring, ScoringListener, Iteration
5252
@Inject private OutputDirectoryHierarchy controlerIO;
5353
@Inject private ScoringFunctionsForPopulation scoringFunctionsForPopulation;
5454
@Inject private ExperiencedPlansService experiencedPlansService;
55+
@Inject private NewScoreAssigner newScoreAssigner;
5556

5657
@Override
5758
public void notifyScoring(final ScoringEvent event) {
5859
scoringFunctionsForPopulation.finishScoringFunctions();
59-
NewScoreAssignerImpl newScoreAssigner = new NewScoreAssignerImpl(this.scoringConfigGroup, this.controllerConfigGroup);
6060
newScoreAssigner.assignNewScores(event.getIteration(), this.scoringFunctionsForPopulation, this.population);
6161
}
6262

matsim/src/main/java/org/matsim/core/scoring/PlansScoringModule.java

+1
Original file line numberDiff line numberDiff line change
@@ -32,5 +32,6 @@ public void install() {
3232
bind(ScoringFunctionsForPopulation.class).asEagerSingleton();
3333
bind(PlansScoring.class).to(PlansScoringImpl.class);
3434
bind(ExperiencedPlansService.class).to(ExperiencedPlansServiceImpl.class).asEagerSingleton();
35+
bind(NewScoreAssigner.class).to(NewScoreAssignerImpl.class).asEagerSingleton();
3536
}
3637
}

matsim/src/test/java/org/matsim/core/scoring/EventsToScoreTest.java

+135
Original file line numberDiff line numberDiff line change
@@ -23,17 +23,39 @@
2323
import org.junit.jupiter.api.Assertions;
2424
import org.junit.jupiter.api.Test;
2525
import org.junit.jupiter.api.extension.RegisterExtension;
26+
import org.matsim.api.core.v01.Coord;
2627
import org.matsim.api.core.v01.Id;
2728
import org.matsim.api.core.v01.Scenario;
29+
import org.matsim.api.core.v01.events.PersonDepartureEvent;
2830
import org.matsim.api.core.v01.events.PersonMoneyEvent;
31+
import org.matsim.api.core.v01.events.handler.PersonDepartureEventHandler;
32+
import org.matsim.api.core.v01.network.Link;
33+
import org.matsim.api.core.v01.network.Network;
34+
import org.matsim.api.core.v01.network.Node;
2935
import org.matsim.api.core.v01.population.Person;
3036
import org.matsim.api.core.v01.population.Plan;
3137
import org.matsim.api.core.v01.population.Population;
3238
import org.matsim.core.api.experimental.events.EventsManager;
3339
import org.matsim.core.config.Config;
3440
import org.matsim.core.config.ConfigUtils;
41+
import org.matsim.core.config.groups.ReplanningConfigGroup;
42+
import org.matsim.core.config.groups.RoutingConfigGroup;
43+
import org.matsim.core.config.groups.ScoringConfigGroup;
44+
import org.matsim.core.controler.AbstractModule;
45+
import org.matsim.core.controler.Controler;
46+
import org.matsim.core.controler.OutputDirectoryHierarchy;
47+
import org.matsim.core.controler.events.IterationEndsEvent;
48+
import org.matsim.core.controler.events.IterationStartsEvent;
49+
import org.matsim.core.controler.listener.IterationEndsListener;
50+
import org.matsim.core.controler.listener.IterationStartsListener;
3551
import org.matsim.core.events.EventsUtils;
52+
import org.matsim.core.mobsim.framework.events.MobsimBeforeCleanupEvent;
53+
import org.matsim.core.mobsim.framework.events.MobsimInitializedEvent;
54+
import org.matsim.core.mobsim.framework.listeners.MobsimBeforeCleanupListener;
55+
import org.matsim.core.mobsim.framework.listeners.MobsimInitializedListener;
56+
import org.matsim.core.mobsim.qsim.AbstractQSimModule;
3657
import org.matsim.core.population.PopulationUtils;
58+
import org.matsim.core.replanning.strategies.DefaultPlanStrategiesModule;
3759
import org.matsim.core.scenario.MutableScenario;
3860
import org.matsim.core.scenario.ScenarioUtils;
3961
import org.matsim.core.scoring.functions.CharyparNagelScoringFunctionFactory;
@@ -158,6 +180,119 @@ void testMsaAveraging() {
158180
}
159181
}
160182

183+
@Test
184+
void testMsaAveragingWithController() {
185+
Config config = ConfigUtils.createConfig() ;
186+
config.controller().setOverwriteFileSetting(OutputDirectoryHierarchy.OverwriteFileSetting.overwriteExistingFiles);
187+
188+
config.controller().setFirstIteration(10);
189+
config.controller().setLastIteration(110);
190+
191+
config.scoring().setMarginalUtilityOfMoney(1.);
192+
config.scoring().setFractionOfIterationsToStartScoreMSA(0.9);
193+
194+
ReplanningConfigGroup.StrategySettings strat = new ReplanningConfigGroup.StrategySettings();
195+
strat.setStrategyName(DefaultPlanStrategiesModule.DefaultSelector.KeepLastSelected);
196+
strat.setWeight(1.);
197+
config.replanning().addStrategySettings(strat);
198+
199+
config.routing().setNetworkRouteConsistencyCheck(RoutingConfigGroup.NetworkRouteConsistencyCheck.disable);
200+
201+
Scenario scenario = ScenarioUtils.createScenario(config);
202+
203+
Network network = scenario.getNetwork();
204+
Node node0 = network.getFactory().createNode(Id.createNodeId(0), new Coord(0, 0));
205+
Node node1 = network.getFactory().createNode(Id.createNodeId(1), new Coord(1, 0));
206+
network.addNode(node0);
207+
network.addNode(node1);
208+
Link link01 = network.getFactory().createLink(Id.createLinkId("0_1"), node0, node1);
209+
network.addLink(link01);
210+
211+
Population population = scenario.getPopulation();
212+
Person person = PopulationUtils.getFactory().createPerson(Id.create(1, Person.class));
213+
population.addPerson(person);
214+
Plan plan = PopulationUtils.createPlan() ;
215+
plan.addActivity(population.getFactory().createActivityFromLinkId("dummy", link01.getId()));
216+
person.addPlan(plan);
217+
218+
ScoringConfigGroup.ActivityParams dummyAct = new ScoringConfigGroup.ActivityParams("dummy");
219+
dummyAct.setScoringThisActivityAtAll(false);
220+
config.scoring().addActivityParams(dummyAct);
221+
222+
Controler controler = new Controler(scenario);
223+
EventsManager events = controler.getEvents();
224+
controler.addOverridingModule(new AbstractModule() {
225+
@Override
226+
public void install() {
227+
final int[] iteration = new int[1];
228+
this.addControlerListenerBinding().toInstance(new IterationStartsListener() {
229+
@Override
230+
public void notifyIterationStarts(IterationStartsEvent event) {
231+
iteration[0] = event.getIteration();
232+
}
233+
});
234+
this.addMobsimListenerBinding().toInstance(new MobsimInitializedListener() {
235+
@Override
236+
public void notifyMobsimInitialized(MobsimInitializedEvent e) {
237+
events.processEvent(new PersonMoneyEvent(3600.0, person.getId(), iteration[0] -98, "bribe", "contractor" ));
238+
}
239+
});
240+
}
241+
});
242+
controler.addControlerListener(new IterationEndsListener() {
243+
@Override
244+
public void notifyIterationEnds(IterationEndsEvent event) {
245+
System.out.println( "score: " + person.getSelectedPlan().getScore() ) ;
246+
247+
switch(event.getIteration()){
248+
case 99:
249+
Assertions.assertEquals(1.0, person.getSelectedPlan().getScore(), 0);
250+
break ;
251+
case 100:
252+
// first MSA iteration; plain score should be ok:
253+
Assertions.assertEquals(2.0, person.getSelectedPlan().getScore(), 0);
254+
break ;
255+
case 101:
256+
// second MSA iteration
257+
// (2+3)/2 = 2.5
258+
Assertions.assertEquals(2.5, person.getSelectedPlan().getScore(), 0);
259+
break ;
260+
case 102:
261+
// 3rd MSA iteration
262+
// (2+3+4)/3 = 3
263+
Assertions.assertEquals(3.0, person.getSelectedPlan().getScore(), 0);
264+
break ;
265+
case 103:
266+
// (2+3+4+5)/4 = 3.5
267+
Assertions.assertEquals(3.5, person.getSelectedPlan().getScore(), 0);
268+
break ;
269+
case 104:
270+
Assertions.assertEquals(4.0, person.getSelectedPlan().getScore(), 0);
271+
break ;
272+
case 105:
273+
Assertions.assertEquals(4.5, person.getSelectedPlan().getScore(), 0);
274+
break ;
275+
case 106:
276+
Assertions.assertEquals(5.0, person.getSelectedPlan().getScore(), 0);
277+
break ;
278+
case 107:
279+
Assertions.assertEquals(5.5, person.getSelectedPlan().getScore(), 0);
280+
break ;
281+
case 108:
282+
Assertions.assertEquals(6.0, person.getSelectedPlan().getScore(), 0);
283+
break ;
284+
case 109:
285+
Assertions.assertEquals(6.5, person.getSelectedPlan().getScore(), 0);
286+
break ;
287+
case 110:
288+
Assertions.assertEquals(7.0, person.getSelectedPlan().getScore(), 0);
289+
break ;
290+
}
291+
}
292+
});
293+
controler.run();
294+
}
295+
161296
private static class MockScoringFunctionFactory implements ScoringFunctionFactory {
162297

163298
@Override

pom.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -308,7 +308,7 @@
308308
<dependency>
309309
<groupId>it.unimi.dsi</groupId>
310310
<artifactId>fastutil</artifactId>
311-
<version>8.5.13</version>
311+
<version>8.5.14</version>
312312
</dependency>
313313

314314
<dependency>

0 commit comments

Comments
 (0)