From 365ff6dcd32738dc34b83b786bb0f6f80fff928b Mon Sep 17 00:00:00 2001 From: Jakob Rehmann Date: Thu, 20 Feb 2025 15:26:06 +0100 Subject: [PATCH] wip --- .../matsim/episim/InfectionEventHandler.java | 8 +++++ .../model/AbstractProgressionModel.java | 4 --- .../SymmetricContactModelWithOdeCoupling.java | 30 +++++++++++-------- .../matsim/run/CreateBatteryForCluster.java | 2 +- .../org/matsim/run/batch/newA_berlin.java | 6 ++-- 5 files changed, 30 insertions(+), 20 deletions(-) diff --git a/src/main/java/org/matsim/episim/InfectionEventHandler.java b/src/main/java/org/matsim/episim/InfectionEventHandler.java index 9b32b4d95..ffa715509 100644 --- a/src/main/java/org/matsim/episim/InfectionEventHandler.java +++ b/src/main/java/org/matsim/episim/InfectionEventHandler.java @@ -772,7 +772,15 @@ public void reset(int iteration) { // Sum of antibodies Object2DoubleMap antibodies = new Object2DoubleOpenHashMap<>(); + boolean fakeAgentsPossible = contactModel instanceof SymmetricContactModelWithOdeCoupling; + for (EpisimPerson person : personMap.values()) { + + if (fakeAgentsPossible && person.getPersonId().toString().startsWith("fake_")) { + progressionModel.removeAgent(person.getPersonId()); + } + + progressionModel.updateState(person, iteration); antibodyModel.updateAntibodies(person, iteration); diff --git a/src/main/java/org/matsim/episim/model/AbstractProgressionModel.java b/src/main/java/org/matsim/episim/model/AbstractProgressionModel.java index c0cc4a3f9..827451f4d 100644 --- a/src/main/java/org/matsim/episim/model/AbstractProgressionModel.java +++ b/src/main/java/org/matsim/episim/model/AbstractProgressionModel.java @@ -50,10 +50,6 @@ private static long compoundLong(int x, int y) { @Override public void updateState(EpisimPerson person, int day) { -// // This is useful for fake agents in SymmetricContactModelWithOdeCoupling. -// if (person.isExcludeFromDiseaseStateProgression()) { -// return; -// } EpisimPerson.DiseaseStatus status = person.getDiseaseStatus(); diff --git a/src/main/java/org/matsim/episim/model/SymmetricContactModelWithOdeCoupling.java b/src/main/java/org/matsim/episim/model/SymmetricContactModelWithOdeCoupling.java index 7f00ffc6c..92cbce51b 100644 --- a/src/main/java/org/matsim/episim/model/SymmetricContactModelWithOdeCoupling.java +++ b/src/main/java/org/matsim/episim/model/SymmetricContactModelWithOdeCoupling.java @@ -144,7 +144,7 @@ public void resetOdeDiseaseImportCount() { // unknownCnt = 0L; // } - private EpisimPerson borrowPerson(Attributes sharedAttributes, EpisimReporting reporting) { + private EpisimPerson borrowPerson(Attributes sharedAttributes, EpisimReporting reporting, double now, int dayCounter) { Deque pool = personPool.get(); EpisimPerson person = pool.poll(); if (person == null) { @@ -157,6 +157,19 @@ private EpisimPerson borrowPerson(Attributes sharedAttributes, EpisimReporting r person.setDiseaseStatus(0, DiseaseStatus.susceptible); // person.getActivities().clear(); // Clear any leftover activities } + +// if (person.getDiseaseStatus().equals(DiseaseStatus.contagious)) { +// return person; +// } + + // this do-while loop will add a person, check if they are actually contagious; if not, they'll add another person. + do { + progressionModel.removeAgent(person.getPersonId()); + person.setDiseaseStatus(now, DiseaseStatus.infectedButNotContagious); + //todo: talk to kai: should we this be a distribution of when they become infectious, because infectivity depends on how long they've been infectious. + progressionModel.updateState(person, dayCounter); + } while (!person.getDiseaseStatus().equals(DiseaseStatus.contagious)); + return person; } @@ -330,21 +343,11 @@ private void infectionDynamicsGeneralized(EpisimPerson personLeavingContainer, E // Id personId = Id.createPersonId("fake_task" + taskId + "_" + i); - EpisimPerson person = borrowPerson(sharedAttributes, reporting); + EpisimPerson person = borrowPerson(sharedAttributes, reporting, now, dayCounter); // // EpisimPerson person = new EpisimPerson(personId, sharedAttributes, reporting); containerFake.addPerson(person, 0, new EpisimPerson.PerformedActivity(0, episimConfig.getOrAddContainerParams(actType), null)); - - // this do-while loop will add a person, check if they are actually contagious; if not, they'll add another person. - do { - progressionModel.removeAgent(person.getPersonId()); - person.setDiseaseStatus(now, DiseaseStatus.infectedButNotContagious); - //todo: talk to kai: should we this be a distribution of when they become infectious, because infectivity depends on how long they've been infectious. - progressionModel.updateState(person, dayCounter); - } while (!person.getDiseaseStatus().equals(DiseaseStatus.contagious)); - - } } } @@ -544,7 +547,10 @@ private void infectionDynamicsGeneralized(EpisimPerson personLeavingContainer, E EpisimPerson person = iterator.next(); if (person.getPersonId().toString().startsWith("fake")) { returnPerson(person); + + // remove from progression model ((AbstractProgressionModel) progressionModel).removeAgent(person.getPersonId()); + iterator.remove(); // Properly remove from the list } } diff --git a/src/main/java/org/matsim/run/CreateBatteryForCluster.java b/src/main/java/org/matsim/run/CreateBatteryForCluster.java index a2c4f0a13..919058c57 100644 --- a/src/main/java/org/matsim/run/CreateBatteryForCluster.java +++ b/src/main/java/org/matsim/run/CreateBatteryForCluster.java @@ -66,7 +66,7 @@ ) @SuppressWarnings("unchecked, rawtypes") public class CreateBatteryForCluster implements Callable { - private static final String CLASS_NAME = "newC_berlin_brand"; + private static final String CLASS_NAME = "newA_berlin"; private static final Logger log = LogManager.getLogger(CreateBatteryForCluster.class); diff --git a/src/main/java/org/matsim/run/batch/newA_berlin.java b/src/main/java/org/matsim/run/batch/newA_berlin.java index 39775a585..47f26f449 100644 --- a/src/main/java/org/matsim/run/batch/newA_berlin.java +++ b/src/main/java/org/matsim/run/batch/newA_berlin.java @@ -118,8 +118,8 @@ public static final class Params { @Parameter({1.0}) public double thetaFactor; -// @Parameter({-1.0, 0.5, 0.75, 1.0, 1.25, 1.5}) - @Parameter({1.}) + @Parameter({0.5, 0.75, 1.0, 1.25, 1.5}) +// @Parameter({1.}) public double ode; } @@ -133,7 +133,7 @@ public static void main(String[] args) { String[] args2 = { RunParallel.OPTION_SETUP, newA_berlin.class.getName(), RunParallel.OPTION_PARAMS, Params.class.getName(), - RunParallel.OPTION_TASKS, Integer.toString(2), + RunParallel.OPTION_TASKS, Integer.toString(1), RunParallel.OPTION_ITERATIONS, Integer.toString(50), RunParallel.OPTION_METADATA };