diff --git a/pom.xml b/pom.xml index 28e3de1e62dd55223da8bee198c9132cc761bdfe..b5be8144ba3a05072c3ab6c4f28851ceb31fbf36 100644 --- a/pom.xml +++ b/pom.xml @@ -31,14 +31,14 @@ <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> - <version>2.13.2.2</version> + <version>2.13.3</version> </dependency> <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.dataformat/jackson-dataformat-yaml --> <dependency> <groupId>com.fasterxml.jackson.dataformat</groupId> <artifactId>jackson-dataformat-yaml</artifactId> - <version>2.13.2</version> + <version>2.13.3</version> </dependency> </dependencies> diff --git a/src/main/java/agents/Agent.java b/src/main/java/agents/Agent.java index c4b9c12ddbcf33182028b28f270a63ec16e3b278..7117a8fcb8694728e1cee8ff79f1cb38e6c30f64 100644 --- a/src/main/java/agents/Agent.java +++ b/src/main/java/agents/Agent.java @@ -1,7 +1,5 @@ package agents; -import behaviors.Cyclic; - public sealed interface Agent permits CyclicAgent, ThreePhasedAgent{ diff --git a/src/main/java/agents/RandomWalkingAgent3P.java b/src/main/java/agents/RandomWalkingAgent3P.java index 7edbcae221f05cc1e16523883015f7263383d016..720f46613108b067a41c9cdb717653dfc6cfeb39 100644 --- a/src/main/java/agents/RandomWalkingAgent3P.java +++ b/src/main/java/agents/RandomWalkingAgent3P.java @@ -8,7 +8,7 @@ import java.awt.*; public class RandomWalkingAgent3P extends RandomWakingAgent implements ThreePhasedSEIRSAgent { - private String id; + private final String id; public RandomWalkingAgent3P(Point position, long seed, SEIRSEnvironment environment) { super(position, seed, environment); diff --git a/src/main/java/agents/seirs/CyclicSEIRSAgent.java b/src/main/java/agents/seirs/CyclicSEIRSAgent.java index 135b9f805acd4d660bff23a909a819d5d7e9198c..09fe34a2537c0bfd1383b02ad500336d643ab3ac 100644 --- a/src/main/java/agents/seirs/CyclicSEIRSAgent.java +++ b/src/main/java/agents/seirs/CyclicSEIRSAgent.java @@ -1,9 +1,6 @@ package agents.seirs; import agents.CyclicAgent; -import agents.states.SEIRSState; -import behaviors.Infectious; -import behaviors.Positionable2D; public interface CyclicSEIRSAgent extends CyclicAgent, SEIRSAgent { diff --git a/src/main/java/agents/seirs/FairInfectionRWAgent.java b/src/main/java/agents/seirs/FairInfectionRWAgent.java index 2aebf28e8763a562f185ed36e88a1fa2e40236c2..10a8d1cf0f07ab074b435b4ccb1384cc7bcd0e7c 100644 --- a/src/main/java/agents/seirs/FairInfectionRWAgent.java +++ b/src/main/java/agents/seirs/FairInfectionRWAgent.java @@ -45,9 +45,13 @@ public abstract class FairInfectionRWAgent extends Randomized implements SEIRSAg @Override public boolean isExposed() { + return rollExposition(environment, position, r.nextInt(10000)); + } + + static boolean rollExposition(SEIRSEnvironment environment, Point position, int i2) { boolean isExposed = false; - for (int i = 0 ; i<environment.getInfectedNeighbors(position).size() ; i++) { - int roll = r.nextInt(10000)+1; + for (int i = 0; i< environment.getInfectedNeighbors(position).size() ; i++) { + int roll = i2 +1; if (roll <= YamlReader.getParams().infectionRate()*10000) { isExposed = true; } diff --git a/src/main/java/agents/seirs/FairInfectionRWAgent3P.java b/src/main/java/agents/seirs/FairInfectionRWAgent3P.java index e69c6fd026325cdf7f6a1afc486ee99a3997d5d3..a2865f546b428a2451b24c41014a9acd04ccda56 100644 --- a/src/main/java/agents/seirs/FairInfectionRWAgent3P.java +++ b/src/main/java/agents/seirs/FairInfectionRWAgent3P.java @@ -1,13 +1,12 @@ package agents.seirs; -import agents.ThreePhasedAgent; import environment.SEIRSEnvironment; import java.awt.*; public class FairInfectionRWAgent3P extends FairInfectionRWAgent implements ThreePhasedSEIRSAgent { - private String id; + private final String id; public FairInfectionRWAgent3P(Point position, long seed, SEIRSEnvironment environment) { super(position, seed, environment); diff --git a/src/main/java/agents/seirs/FairInfectionRWAgentCyclic.java b/src/main/java/agents/seirs/FairInfectionRWAgentCyclic.java index 707f1d7505b3e92758c7b75e166b42ef76e25538..195d1cbedd26087e22bfc70bc92ca2177653e9ea 100644 --- a/src/main/java/agents/seirs/FairInfectionRWAgentCyclic.java +++ b/src/main/java/agents/seirs/FairInfectionRWAgentCyclic.java @@ -1,13 +1,12 @@ package agents.seirs; import environment.SEIRSEnvironment; -import utils.YamlReader; import java.awt.*; public class FairInfectionRWAgentCyclic extends FairInfectionRWAgent implements CyclicSEIRSAgent { - private String id; + private final String id; public FairInfectionRWAgentCyclic(Point position, long seed, SEIRSEnvironment environment) { super(position, seed, environment); this.id = String.valueOf(seed); diff --git a/src/main/java/agents/seirs/RandomWakingAgent.java b/src/main/java/agents/seirs/RandomWakingAgent.java index bccdf5d4a69f0a291829689afeaaf1ad9a9403ef..cef450d6fac8fcb1206f0f171ee72bc594e1c77e 100644 --- a/src/main/java/agents/seirs/RandomWakingAgent.java +++ b/src/main/java/agents/seirs/RandomWakingAgent.java @@ -9,6 +9,8 @@ import utils.YamlReader; import java.awt.*; import java.util.List; +import static agents.seirs.FairInfectionRWAgent.rollExposition; + public abstract class RandomWakingAgent extends Randomized implements SEIRSAgent { protected Point position; @@ -46,14 +48,7 @@ public abstract class RandomWakingAgent extends Randomized implements SEIRSAgent @Override public boolean isExposed() { - boolean isExposed = false; - for (int i = 0 ; i<environment.getInfectedNeighbors(position).size() ; i++) { - int roll = r.nextInt(10000)+1; - if (roll <= YamlReader.getParams().infectionRate()*10000) { - isExposed = true; - } - } - return isExposed; + return rollExposition(environment, position, r.nextInt(10000)); } @Override diff --git a/src/main/java/agents/seirs/RandomWalkingAgentCyclic.java b/src/main/java/agents/seirs/RandomWalkingAgentCyclic.java index 6c1874cb898ea5f04b76ab3edbee1d19339d9b89..42cdb7fea89c3255402a85f31daf7e5c7698100c 100644 --- a/src/main/java/agents/seirs/RandomWalkingAgentCyclic.java +++ b/src/main/java/agents/seirs/RandomWalkingAgentCyclic.java @@ -1,17 +1,12 @@ package agents.seirs; -import agents.states.SEIRSState; -import agents.states.SuceptibleSEIRSState; -import behaviors.Randomized; import environment.SEIRSEnvironment; -import utils.YamlReader; import java.awt.Point; -import java.util.List; public class RandomWalkingAgentCyclic extends RandomWakingAgent implements CyclicSEIRSAgent { - private String id; + private final String id; public RandomWalkingAgentCyclic(Point position, long seed, SEIRSEnvironment environment) { super(position, seed, environment); diff --git a/src/main/java/agents/states/ExposedSEIRSState.java b/src/main/java/agents/states/ExposedSEIRSState.java index b24651c0247761252d9589d5ebbc21ce66aad8f2..848e943c4deca9b948e29d559e24f260e1909fe2 100644 --- a/src/main/java/agents/states/ExposedSEIRSState.java +++ b/src/main/java/agents/states/ExposedSEIRSState.java @@ -1,6 +1,5 @@ package agents.states; -import agents.seirs.CyclicSEIRSAgent; import agents.seirs.SEIRSAgent; public class ExposedSEIRSState extends SEIRSState { diff --git a/src/main/java/agents/states/InfectedSEIRSState.java b/src/main/java/agents/states/InfectedSEIRSState.java index d8c18f291b233e4aa8c109cf15ec1341fc9234d7..b7ef749348924fd9f48699aee8dcffe770a093b7 100644 --- a/src/main/java/agents/states/InfectedSEIRSState.java +++ b/src/main/java/agents/states/InfectedSEIRSState.java @@ -1,6 +1,5 @@ package agents.states; -import agents.seirs.CyclicSEIRSAgent; import agents.seirs.SEIRSAgent; public class InfectedSEIRSState extends SEIRSState { diff --git a/src/main/java/agents/states/RecoveredSEIRSState.java b/src/main/java/agents/states/RecoveredSEIRSState.java index 0a05430d3368b05fc059ac3cfa3b70597a7fcbbc..c434926d51858d677417e076c7967f6afb6a6413 100644 --- a/src/main/java/agents/states/RecoveredSEIRSState.java +++ b/src/main/java/agents/states/RecoveredSEIRSState.java @@ -1,6 +1,5 @@ package agents.states; -import agents.seirs.CyclicSEIRSAgent; import agents.seirs.SEIRSAgent; public class RecoveredSEIRSState extends SEIRSState { diff --git a/src/main/java/agents/states/SuceptibleSEIRSState.java b/src/main/java/agents/states/SuceptibleSEIRSState.java index 87c5335c6ef7ce42db23d6c454eb79de17119887..890d486f11222d3cdf4c03589e8de727f00e7f0f 100644 --- a/src/main/java/agents/states/SuceptibleSEIRSState.java +++ b/src/main/java/agents/states/SuceptibleSEIRSState.java @@ -1,6 +1,5 @@ package agents.states; -import agents.seirs.CyclicSEIRSAgent; import agents.seirs.SEIRSAgent; public class SuceptibleSEIRSState extends SEIRSState { diff --git a/src/main/java/environment/ChunkedSEIRSEnvironment.java b/src/main/java/environment/ChunkedSEIRSEnvironment.java index d489eac3482fc4e1bd0d438eee72d14a0aa8e983..5e3e498793019c75c1afc3c20c7bb887d9ceab5b 100644 --- a/src/main/java/environment/ChunkedSEIRSEnvironment.java +++ b/src/main/java/environment/ChunkedSEIRSEnvironment.java @@ -1,7 +1,6 @@ package environment; import agents.Agent; -import agents.seirs.CyclicSEIRSAgent; import agents.seirs.SEIRSAgent; import agents.states.InfectedSEIRSState; import agents.states.SEIRSState; @@ -50,8 +49,8 @@ public class ChunkedSEIRSEnvironment implements SEIRSEnvironment { private Point getRelativePoint(int relativeTo, Point p) { return switch (relativeTo) { - case LEFT -> new Point(p.x-1,p.y); - case RIGHT -> new Point(p.x+1,p.y); + //case LEFT -> new Point(p.x-1,p.y); + case LEFT, RIGHT -> new Point(p.x+1,p.y); case UP -> new Point(p.x,p.y-1); case DOWN -> new Point(p.x,p.y+1); case CENTER -> p; diff --git a/src/main/java/environment/SEIRSEnvironment.java b/src/main/java/environment/SEIRSEnvironment.java index 7e2a804885d784ac46aed87fea5b3d118c12639e..445e0d142d07350cd32f435ec0fc0a526c042fce 100644 --- a/src/main/java/environment/SEIRSEnvironment.java +++ b/src/main/java/environment/SEIRSEnvironment.java @@ -1,6 +1,5 @@ package environment; -import agents.seirs.CyclicSEIRSAgent; import agents.seirs.SEIRSAgent; import java.awt.*; diff --git a/src/main/java/environment/WrappingChunkedSEIRSEnvironment.java b/src/main/java/environment/WrappingChunkedSEIRSEnvironment.java index 024638e8d46adcaf775118cb6b8005abb5ea79f4..84f15d0e9583a63586ce981c4bd9e025d794b790 100644 --- a/src/main/java/environment/WrappingChunkedSEIRSEnvironment.java +++ b/src/main/java/environment/WrappingChunkedSEIRSEnvironment.java @@ -1,6 +1,5 @@ package environment; -import agents.seirs.CyclicSEIRSAgent; import agents.seirs.SEIRSAgent; import behaviors.Positionable2D; diff --git a/src/main/java/sma/SEIRS_SMA.java b/src/main/java/sma/SEIRS_SMA.java index 50afb577fa495a13b51d765b75e9430401e5ebf7..5894c1174ab699ed0e1f228a6f870531282c3ed9 100644 --- a/src/main/java/sma/SEIRS_SMA.java +++ b/src/main/java/sma/SEIRS_SMA.java @@ -178,6 +178,7 @@ public class SEIRS_SMA extends Randomized implements SMA{ @Override public void run() { + calculateDensity(); Instant startTime = Instant.now(); System.out.println("Starting simulation at : "+ Date.from(startTime)); if (parameters.nbOfCycles() <0) { @@ -203,6 +204,12 @@ public class SEIRS_SMA extends Randomized implements SMA{ } } + private void calculateDensity() { + int pixels = parameters.size()*parameters.size(); + int agents = parameters.population(); + System.out.println("Population density is : " + (float)agents/pixels + " agents per pixel."); + } + public static void main(String[] args) { SMA sma = new SEIRS_SMA(YamlReader.getParams()); sma.run(); diff --git a/src/main/resources/output.png b/src/main/resources/output.png index 5e7cdf00725107ea0c5b20b6ef6f2d7b66652287..310181f96fff737b9bfe5c206b8691e159e4082e 100644 Binary files a/src/main/resources/output.png and b/src/main/resources/output.png differ diff --git a/src/main/resources/parameters.yaml b/src/main/resources/parameters.yaml index 10385d74094ca86c9982e3347bb5d240eb9bda0a..5d744438cd440a1aea3c1a6816509b579276e685 100644 --- a/src/main/resources/parameters.yaml +++ b/src/main/resources/parameters.yaml @@ -1,17 +1,17 @@ graphicalMode: true -incubationRate: 0.3 -infectionRate: 0.8 -looseImmunityRate: 0.008 -recoveryRate: 0.14 -nbOfCycles: 2000 +incubationRate: 0.33 +infectionRate: 0.5 +looseImmunityRate: 0.0027 +recoveryRate: 0.10 +nbOfCycles: 720 nbOfPatientZero: 1 -population: 3000 +population: 1000 recordExperiment: false playRecord: false seed: 120 -size: 1000 +size: 400 wrappingWorld : true synchronousMode: false timeBetweenCycles: 0 -infectionStacks : false +infectionStacks : true threePhased : false \ No newline at end of file