vadere merge requestshttps://gitlab.lrz.de/vadere/vadere/-/merge_requests2021-12-03T16:46:51+01:00https://gitlab.lrz.de/vadere/vadere/-/merge_requests/179Fix #334 negative pathogen load in stationary pedestrians2021-12-03T16:46:51+01:00Rahn, SimonFix #334 negative pathogen load in stationary pedestrians- Pedestrians that are directly placed into the topography (without using a source) got only default values defined in the constructor HealthStatus().
Now, these pedestrians get assigned the healthStatus as defined in the scenario file (...- Pedestrians that are directly placed into the topography (without using a source) got only default values defined in the constructor HealthStatus().
Now, these pedestrians get assigned the healthStatus as defined in the scenario file (for each individually placed pedestrian).
- Update default values in AttributesTransmissionModelRahn, SimonRahn, Simonhttps://gitlab.lrz.de/vadere/vadere/-/merge_requests/178Merge branch 'dropletModel' into 'master'2021-11-26T17:25:20+01:00Rahn, SimonMerge branch 'dropletModel' into 'master'Update the TransmissionModel; clean up scenario files; add a more efficient data processor needed for evaluating the healthState of pedestriansUpdate the TransmissionModel; clean up scenario files; add a more efficient data processor needed for evaluating the healthState of pedestriansRahn, SimonRahn, Simonhttps://gitlab.lrz.de/vadere/vadere/-/merge_requests/176add scenarios to psychology layer2021-11-25T09:54:26+01:00Mayr, Christina Mariaadd scenarios to psychology layerhttps://gitlab.lrz.de/vadere/vadere/-/merge_requests/175resolve issue 3202021-11-18T13:00:54+01:00Mayr, Christina Mariaresolve issue 320 use suggested solution in #320 use suggested solution in #320Mayr, Christina MariaMayr, Christina Mariahttps://gitlab.lrz.de/vadere/vadere/-/merge_requests/174[PSYCHOLOGY, TraCI] Communicate social distancing measures2021-11-17T18:31:11+01:00Mayr, Christina Maria[PSYCHOLOGY, TraCI] Communicate social distancing measuresI have introduced a new `CognitionModel` that allows us to dynamically introduce social distancing in the simulation.I have introduced a new `CognitionModel` that allows us to dynamically introduce social distancing in the simulation.Schuhbaeck, StefanMayr, Christina MariaSchuhbaeck, Stefanhttps://gitlab.lrz.de/vadere/vadere/-/merge_requests/173[GUI] ScenarioChecker messages should refer to scenario errors instead of top...2021-11-18T09:27:12+01:00Mayr, Christina Maria[GUI] ScenarioChecker messages should refer to scenario errors instead of topography errorsThe topography is only one component that is checked by the `ScenarioChecker`.
However, each error message contains `There are errors in the topography`, even if the error is in the Tab `Model` or `Simulation`.
The information about th...The topography is only one component that is checked by the `ScenarioChecker`.
However, each error message contains `There are errors in the topography`, even if the error is in the Tab `Model` or `Simulation`.
The information about the tab (topography, simulation, model) is still displayed. I have not changed anything here..
I have replaced `Topography error` by `Scenario error`.Rahn, SimonRahn, Simonhttps://gitlab.lrz.de/vadere/vadere/-/merge_requests/172Refactored psychology models2021-10-13T16:12:14+02:00Mayr, Christina MariaRefactored psychology modelsI have moved the decision-making process from the perception layer to the cognition layer.
For that purpose, I had to extend the `PsychologyStatus`.
I also did some refactoring.I have moved the decision-making process from the perception layer to the cognition layer.
For that purpose, I had to extend the `PsychologyStatus`.
I also did some refactoring.Mayr, Christina MariaMayr, Christina Mariahttps://gitlab.lrz.de/vadere/vadere/-/merge_requests/171Add TranmissionModel2021-09-29T17:55:59+02:00Rahn, SimonAdd TranmissionModelAdd submodel for transmission of pathogen via inhalationAdd submodel for transmission of pathogen via inhalationRahn, SimonRahn, Simonhttps://gitlab.lrz.de/vadere/vadere/-/merge_requests/170Define reaction model probabilities in scenario file2021-09-27T11:20:26+02:00Mayr, Christina MariaDefine reaction model probabilities in scenario fileCurrently, the reaction probabilities are set in `flowcontrol` and communicated via `TraCI`.
However, the reaction probabilities should be treated separately from the control strategy.
This is why I moved it into the scenario.
I had to ...Currently, the reaction probabilities are set in `flowcontrol` and communicated via `TraCI`.
However, the reaction probabilities should be treated separately from the control strategy.
This is why I moved it into the scenario.
I had to migrate vadere from 1.15 to 1.16Schuhbaeck, StefanSchuhbaeck, Stefanhttps://gitlab.lrz.de/vadere/vadere/-/merge_requests/169Extend logging + refactoring2021-09-03T13:57:33+02:00Mayr, Christina MariaExtend logging + refactoringCurrently, the `ControlModel` works with and without the `psychologyLayer`.
I have added a dataprocessor that monitors when information was set at the the `pyschologylayer`.
I have decided to always use the `psychologyLayer` in combinati...Currently, the `ControlModel` works with and without the `psychologyLayer`.
I have added a dataprocessor that monitors when information was set at the the `pyschologylayer`.
I have decided to always use the `psychologyLayer` in combination with control actions.
Therefore, I have simplified the `ControlModel`Mayr, Christina MariaMayr, Christina Mariahttps://gitlab.lrz.de/vadere/vadere/-/merge_requests/168consider group members in controlmodel2021-08-19T20:52:17+02:00Mayr, Christina Mariaconsider group members in controlmodelCurrently, information is handled for each individual agent.
If there is a group informed, the information needs to be processed once (assumption: group members inform each other + they agree with each other -> they share the same goal)
...Currently, information is handled for each individual agent.
If there is a group informed, the information needs to be processed once (assumption: group members inform each other + they agree with each other -> they share the same goal)
If the group model is used, and the reaction probability is below 1, the information is processed multiple times.
I have added the group members to the `processedAgents`.
I have also introduced a new `InformationState` that shows the user that agents follow information shared in their group.Mayr, Christina MariaMayr, Christina Mariahttps://gitlab.lrz.de/vadere/vadere/-/merge_requests/165[Psychology Layer] Add probabilistic perception model + [Post-vis] Fix footst...2021-07-16T19:07:43+02:00Mayr, Christina Maria[Psychology Layer] Add probabilistic perception model + [Post-vis] Fix footstep bug## Psychology Layer
### Add a new perception model
Add probabilistic perception model.
The new model allows to assign a probability for each stimulus.
The default probability is `p=1.0`.
p defines how likely it is that this stimulus is ...## Psychology Layer
### Add a new perception model
Add probabilistic perception model.
The new model allows to assign a probability for each stimulus.
The default probability is `p=1.0`.
p defines how likely it is that this stimulus is the most important stimulus.
If there are multiple stimuli defined, the sum of p_i must not exceed 1.
### Move methods from `SimplePerceptionModel` to `StimulusController`
Following methods have been moved:
* `selectClosestAndPerceptibleThreat(Pedestrian pedestrian, List<Stimulus> threatStimuli)`
* `selectWaitInAreaContainingPedestrian(Pedestrian pedestrian, List<Stimulus> waitInAreaStimuli)`
**Why?**
The `StimulusController` provides a list of stimuli that is available for an agent. It acts like a filter.
In the old setting, the filtering was done in two steps:
* 1. filter: **time** -> `StimulusController`
* 2. filter: **space/proximity** ( ->` WaitInArea`, `Threat` ) -> `SimplePerceptionModel`
In the old settings, this was suitable, because the stimulusController only provided stimuli that are perceived by all the agents.
Since !162, the stimulusController also provides agent specific stimuli e.g. information that is received at different times.
Therefore, I propose that the filtering is directly done in the `StimulusController`:
* 1. filter: **time** -> `StimulusController`
* 2. filter: **space/proximity** ( ->` WaitInArea`, `Threat` ) -> `StimulusController`
This has two advantages:
* The overall filtering is done in the same place. This avoids code duplication (if one adds a IPerceptionModel, they would need to inherit or copy the filtering algorithm from` SimplePerceptionModel`).
* It simplifies the `SimplePerceptionModel`. Same behavior for all types of stimuli.
### ControlModel
In the old setting, the `ReactionModel` draw from a BernoulliDistribution (probability p) to decide whether a agent reacts or not.
**What is new?**
If the psyhchologylayer is used, the ReactionModel does not decide, but passes the probability to the stimulus.
## Post-vis:
Bug: Agents disappeared in `WAIT` mode.
If the last position is not set, `pedestrian.getLastPosition()` provides a the origin.
It must be `pedestrian.getPosition()`.Mayr, Christina MariaMayr, Christina Mariahttps://gitlab.lrz.de/vadere/vadere/-/merge_requests/164refactoring + bug fix2021-07-14T18:55:20+02:00Mayr, Christina Mariarefactoring + bug fixremove bugremove bugMayr, Christina MariaMayr, Christina Mariahttps://gitlab.lrz.de/vadere/vadere/-/merge_requests/162Feature: Add stimuli dynamically for crowd guiding strategies2021-07-16T12:33:09+02:00Mayr, Christina MariaFeature: Add stimuli dynamically for crowd guiding strategies## Problem
The `StimuliController` cannot handle stimuli that are dynamically received.
Moreover, all agents perceive the same stimuli.
This is a problem, when e.g. information is only perceived by parts of the crowd.
## Solution
Extend...## Problem
The `StimuliController` cannot handle stimuli that are dynamically received.
Moreover, all agents perceive the same stimuli.
This is a problem, when e.g. information is only perceived by parts of the crowd.
## Solution
Extend the `StimuliController`.
* add pedestrian-specific stimuli dynamically
* add stimuli dynamicallySchuhbaeck, StefanMayr, Christina MariaSchuhbaeck, Stefanhttps://gitlab.lrz.de/vadere/vadere/-/merge_requests/161[GUI] display information state of an agent2021-07-05T16:59:09+02:00Mayr, Christina Maria[GUI] display information state of an agent## Visualize information state of an agent in the GUI (Online-Visualization + Post-Vis.)
Agents can receive different types of information, e.g.
* In the default setting, we assume agents have global knowledge about the location to tar...## Visualize information state of an agent in the GUI (Online-Visualization + Post-Vis.)
Agents can receive different types of information, e.g.
* In the default setting, we assume agents have global knowledge about the location to target (NO_INFORMATION).
* If the psychology layer is used, the information is set up as a stimulus.
* If the crowd is managed e.g. over TraCI, information can be passed as directly to an agent or as stimuli.
* If the reaction behavior is modeled, it is also possible that agents refuse to react to information (INFORMATION_UNCONVINCING_RECEIVED).
For that purpose, I have added the enum `InformationState.class`
```
public enum InformationState {
NO_INFORMATION,
INFORMATION_STIMULUS,
INFORMATION_RECEIVED,
INFORMATION_CONVINCING_RECEIVED,
INFORMATION_UNCONVINCING_RECEIVED,
}
```
The default value is `NO_INFORMATION`.
## What is new?
The user can pick a new option for agent coloring 'Coloring by Information State', see following image:
![new_setting_options](/uploads/b269893cac027418ff65d0cb3080122c/new_setting_options.png)
## New feature: Visualize CHANGE_TARGET and WAIT behavior
Currently, the two stimuli `ChangeTarget` and `Wait` are not being visualized in the post-visualization.
The reason is that these two stimuli happen in between two footsteps.
Therefore, the stimuli are not written out by the respective dataprocessors
- `FootStepMostImportantStimulusProcessor`
- `FootStepPsychologyStatusProcessor` -> its output file is used in the postvis!
- `FootStepSelfCategoryProcessor`
### Example output file `FootStepPsychologyStatusProcessor`
In the output file cannot see the WAIT stimuli that starts at t=0.0s and lasts until t=10.0s.
```
pedestrianId simTime endTime-PID1 startX-PID1 startY-PID1 endX-PID1 endY-PID1 targetId-PID2 mostImportantStimulus-PID3 selfCategory-PID3 groupMembership-PID3 informationState-PID3
1 0.4 0.9707501015618938 1.196 10.696 1.3303046975095987 9.934320210724556 1 **ElapsedTime** **TARGET_ORIENTED** OUT_GROUP NO_INFORMATION
2 0.4 1.1001829000111136 1.588 10.696 1.9348998058565199 10.095151911120729 1 **ElapsedTime** **TARGET_ORIENTED** OUT_GROUP NO_INFORMATION
...
1 10.343253453453453 1.5415002031237877 1.3303046975095987 9.934320210724556 1.7170196613925053 9.264510245232199 1 **ElapsedTime** **TARGET_ORIENTED** OUT_GROUP NO_INFORMATION
...
```
I propose, that in case of stimuli that are active in between footsteps (`CHANGE_TARGET` and `WAIT`), the stimuli should be mapped to the last available time step.
In this case, the output file looks like:
```
pedestrianId simTime endTime-PID1 startX-PID1 startY-PID1 endX-PID1 endY-PID1 targetId-PID2 mostImportantStimulus-PID3 selfCategory-PID3 groupMembership-PID3 informationState-PID3
1 0.4 0.9707501015618938 1.196 10.696 1.3303046975095987 9.934320210724556 1 **Wait** **WAIT** OUT_GROUP NO_INFORMATION
2 0.4 1.1001829000111136 1.588 10.696 1.9348998058565199 10.095151911120729 1 **Wait** **WAIT** OUT_GROUP NO_INFORMATION
...
1 10.343253453453453 1.5415002031237877 1.3303046975095987 9.934320210724556 1.7170196613925053 9.264510245232199 1 **ElapsedTime** **TARGET_ORIENTED** OUT_GROUP NO_INFORMATION
...
```Schuhbaeck, StefanMayr, Christina MariaSchuhbaeck, Stefanhttps://gitlab.lrz.de/vadere/vadere/-/merge_requests/160[ControlModel] Handle conflicting and recurring information2021-07-01T11:28:41+02:00Mayr, Christina Maria[ControlModel] Handle conflicting and recurring informationInteresting for crowd guidance strategies
Agents receive information
* directly as commands
* from a navigation app
In both cases, recurring and conflicting information needs to be handled.Interesting for crowd guidance strategies
Agents receive information
* directly as commands
* from a navigation app
In both cases, recurring and conflicting information needs to be handled.Mayr, Christina MariaMayr, Christina Mariahttps://gitlab.lrz.de/vadere/vadere/-/merge_requests/159Artery upstream2021-07-07T09:28:36+02:00Schuhbaeck, StefanArtery upstreamhttps://gitlab.lrz.de/vadere/vadere/-/merge_requests/158[Remote] Fix bug in remote simulation run2021-07-07T09:24:56+02:00Mayr, Christina Maria[Remote] Fix bug in remote simulation runProblem:
The vadere thread is not closed properly.
Simulation output is not written. See #327
The thread is still running after the sim time limit has been reached.
Solution:
adjust the method that terminates the thread
adjust the s...Problem:
The vadere thread is not closed properly.
Simulation output is not written. See #327
The thread is still running after the sim time limit has been reached.
Solution:
adjust the method that terminates the thread
adjust the simulation step methodMayr, Christina MariaMayr, Christina Mariahttps://gitlab.lrz.de/vadere/vadere/-/merge_requests/157Fix write bug2021-06-11T18:22:39+02:00Schuhbaeck, StefanFix write bughttps://gitlab.lrz.de/vadere/vadere/-/merge_requests/156Same Target change behavior for all pedestrians in a group2021-07-07T09:29:12+02:00Mayr, Christina MariaSame Target change behavior for all pedestrians in a group**[Problem]**
Currently, targets are assigned to agents individually (sources, target changers). This can lead to a splitting of the group, e.g.:
* If some group-members step on a target changer and some others do not.
* If the target c...**[Problem]**
Currently, targets are assigned to agents individually (sources, target changers). This can lead to a splitting of the group, e.g.:
* If some group-members step on a target changer and some others do not.
* If the target changer algorithm provides different targets for each group member.
In the worst case, agents even get stuck.
Please find issue #309.
**[Solution]**
If a pedestrian is in a group, the target should be changed group-wise.
**[Steps]**
Adjust the `setTargets` method in `Pedestrian.class`.
Add all group members to `processedAgents` in the `TargetChangerController.class`.
**[Note]**
Adjusting the `TargetChangerController.class` only, is not suitable, because the target can also be changed using TraCI. Therefore, it must be directly changed in `Pedestrian.class`.