From 2725213d56e3bebb23ec1591d423a465201d8b6b Mon Sep 17 00:00:00 2001 From: Benedikt Kleinmeier Date: Wed, 31 Oct 2018 14:08:14 +0100 Subject: [PATCH] In "OptimalStepsModel.java", added proof of concept again after merging master into this branch. --- .../models/osm/OptimalStepsModel.java | 63 +++++++++++++++++-- .../state/events/json/EventInfoStore.java | 8 +-- 2 files changed, 60 insertions(+), 11 deletions(-) diff --git a/VadereSimulator/src/org/vadere/simulator/models/osm/OptimalStepsModel.java b/VadereSimulator/src/org/vadere/simulator/models/osm/OptimalStepsModel.java index 191bb3183..96c056af4 100644 --- a/VadereSimulator/src/org/vadere/simulator/models/osm/OptimalStepsModel.java +++ b/VadereSimulator/src/org/vadere/simulator/models/osm/OptimalStepsModel.java @@ -29,6 +29,9 @@ import org.vadere.simulator.models.potential.fields.PotentialFieldObstacle; import org.vadere.state.attributes.Attributes; import org.vadere.state.attributes.models.AttributesOSM; import org.vadere.state.attributes.scenario.AttributesAgent; +import org.vadere.state.events.types.ElapsedTimeEvent; +import org.vadere.state.events.types.Event; +import org.vadere.state.events.types.WaitEvent; import org.vadere.state.scenario.DynamicElement; import org.vadere.state.scenario.DynamicElementRemoveListener; import org.vadere.state.scenario.Pedestrian; @@ -38,13 +41,10 @@ import org.vadere.state.types.UpdateType; import org.vadere.util.geometry.shapes.VPoint; import org.vadere.util.geometry.shapes.VShape; -import java.util.Comparator; -import java.util.LinkedList; -import java.util.List; -import java.util.Optional; -import java.util.Random; +import java.util.*; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; +import java.util.stream.Collectors; @ModelClass(isMainModel = true) public class OptimalStepsModel implements MainModel, PotentialFieldModel, DynamicElementRemoveListener { @@ -239,7 +239,58 @@ public class OptimalStepsModel implements MainModel, PotentialFieldModel, Dynami lastSimTimeInSec = simTimeInSec; } - /* + @Override + public void update(final List events) { + // TODO: improve proof of concept (prioritize events etc.) + Event mostImportantEvent = prioritizeEvents(events); + + if (mostImportantEvent instanceof ElapsedTimeEvent) { + handleElapsedTimeEvent(mostImportantEvent); + } else if (mostImportantEvent instanceof WaitEvent) { + handleWaitEvent(mostImportantEvent); + } else { + throw new IllegalArgumentException("Cannot handle event: " + mostImportantEvent); + } + } + + private Event prioritizeEvents(List events) { + Event mostImportantEvent = null; + + List waitEvents = events.stream().filter(event -> event instanceof WaitEvent).collect(Collectors.toList()); + + if (waitEvents.size() >= 1) { + mostImportantEvent = waitEvents.get(0); + } else { + List elapsedTimeEvents = events.stream().filter(event -> event instanceof ElapsedTimeEvent).collect(Collectors.toList()); + mostImportantEvent = elapsedTimeEvents.get(0); + } + + return mostImportantEvent; + } + + private void handleElapsedTimeEvent(final Event event) { + if (!(event instanceof ElapsedTimeEvent)) { + throw new IllegalArgumentException("Wrong event type passed, expected: " + ElapsedTimeEvent.class.getName()); + } + + update(event.getTime()); + } + + private void handleWaitEvent(final Event event) { + if (!(event instanceof WaitEvent)) { + throw new IllegalArgumentException(String.format("Wrong event type passed, expected: %s", WaitEvent.class.getName())); + } + + Collection pedestrians = topography.getElements(PedestrianOSM.class); + + for (PedestrianOSM pedestrian : pedestrians) { + pedestrian.setTimeOfNextStep(pedestrian.getTimeOfNextStep() + pedestrian.getDurationNextStep()); + } + + this.lastSimTimeInSec = event.getTime(); + } + + /* * At the moment all pedestrians also the initalPedestrians get this.attributesPedestrain!!! */ @Override diff --git a/VadereState/src/org/vadere/state/events/json/EventInfoStore.java b/VadereState/src/org/vadere/state/events/json/EventInfoStore.java index cd0c17480..a55d89f69 100644 --- a/VadereState/src/org/vadere/state/events/json/EventInfoStore.java +++ b/VadereState/src/org/vadere/state/events/json/EventInfoStore.java @@ -2,10 +2,7 @@ package org.vadere.state.events.json; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; -import org.vadere.state.events.types.ElapsedTimeEvent; -import org.vadere.state.events.types.Event; -import org.vadere.state.events.types.EventTimeframe; -import org.vadere.state.events.types.WaitInAreaEvent; +import org.vadere.state.events.types.*; import org.vadere.state.util.JacksonObjectMapper; import org.vadere.util.geometry.shapes.VCircle; import org.vadere.util.geometry.shapes.VRectangle; @@ -61,7 +58,8 @@ public class EventInfoStore { EventTimeframe eventTimeframe = new EventTimeframe(5, 30, false, 0); List events = new ArrayList<>(); - events.add(new WaitInAreaEvent(0, new VRectangle(12.5, 0, 5, 6))); + events.add(new WaitEvent()); + // events.add(new WaitInAreaEvent(0, new VRectangle(12.5, 0, 5, 6))); // events.add(new WaitInAreaEvent(0, new VCircle(5, 5, 5))); EventInfo eventInfo1 = new EventInfo(); -- GitLab