diff --git a/output.csv b/output.csv index f03d312563dc366ec487708c23e0b7ba2a8ae341..9b4485b5a5a0e39078330cb8adcc4cfa02cac9d0 100644 --- a/output.csv +++ b/output.csv @@ -1,70 +1,49 @@ SUCEPTIBLE,EXPOSED,RECOVERED,INFECTED -9994,5,0,1 -9982,14,0,4 -9954,34,0,12 -9878,93,0,29 -9764,166,0,70 -9603,226,6,165 -9393,326,17,264 -9147,404,32,417 -8871,465,61,603 -8536,562,101,801 -8186,604,144,1066 -7837,636,201,1326 -7398,755,280,1567 -6979,799,365,1857 -6505,870,477,2148 -6038,891,613,2458 -5594,877,771,2758 -5175,854,957,3014 -4751,818,1146,3285 -4319,875,1348,3458 -3890,874,1574,3662 -3450,866,1829,3855 -3032,861,2053,4054 -2680,791,2299,4230 -2286,787,2582,4345 -1899,781,2874,4446 -1571,718,3112,4599 -1262,680,3396,4662 -987,609,3675,4729 -780,529,3984,4707 -559,488,4217,4736 -412,399,4513,4676 -298,316,4799,4587 -216,253,5070,4461 -144,192,5315,4349 -84,141,5574,4201 -38,105,5846,4011 -15,73,6097,3815 -2,49,6332,3617 -1,24,6570,3405 -0,14,6776,3210 -0,6,6967,3027 -0,1,7155,2844 -0,0,7325,2675 -0,0,7505,2495 -0,0,7644,2356 -0,0,7782,2218 -0,0,7901,2099 -0,0,8035,1965 -0,0,8161,1839 -0,0,8266,1734 -0,0,8366,1634 -0,0,8460,1540 -0,0,8559,1441 -0,0,8648,1352 -0,0,8727,1273 -0,0,8800,1200 -0,0,8869,1131 -0,0,8950,1050 -0,0,8994,1006 -0,0,9058,942 -0,0,9117,883 -0,0,9171,829 -0,0,9214,786 -0,0,9279,721 -0,0,9310,690 -0,0,9350,650 -0,0,9396,604 -0,0,9428,572 +9995,4,0,1 +9983,13,0,4 +9953,36,0,11 +9882,88,1,29 +9789,140,2,69 +9654,208,6,132 +9470,302,20,208 +9251,358,30,361 +9002,436,51,511 +8658,561,87,694 +8284,641,128,947 +7899,706,193,1202 +7478,788,265,1469 +6985,873,355,1787 +6527,883,462,2128 +6054,937,596,2413 +5579,957,742,2722 +5179,873,901,3047 +4767,824,1080,3329 +4326,887,1280,3507 +3860,882,1524,3734 +3421,873,1768,3938 +3023,815,2010,4152 +2624,819,2264,4293 +2293,735,2548,4424 +1897,744,2826,4533 +1582,688,3089,4641 +1259,666,3346,4729 +1004,587,3638,4771 +780,523,3935,4762 +582,461,4248,4709 +402,403,4525,4670 +269,346,4803,4582 +177,265,5067,4491 +104,219,5364,4313 +35,175,5628,4162 +14,110,5886,3990 +4,63,6151,3782 +1,33,6360,3606 +0,21,6570,3409 +0,7,6778,3215 +0,3,6979,3018 +0,1,7126,2873 +0,1,7290,2709 +0,1,7451,2548 +0,0,7603,2397 +0,0,7755,2245 +0,0,7870,2130 diff --git a/src/main/java/sma/agents/Agent.java b/src/main/java/sma/agents/Agent.java index 1bff29593a25a9c8d773d335979fe3a746b73a16..631036d85bfcc5e1fe59383d520ee14139b88b34 100644 --- a/src/main/java/sma/agents/Agent.java +++ b/src/main/java/sma/agents/Agent.java @@ -5,8 +5,8 @@ import sma.agents.states.State; public interface Agent { void changeState(State state); - boolean contact(); - boolean incubate(); - boolean recover(); + boolean isExposed(); + boolean isInfected(); + boolean isRecovered(); void move(); } diff --git a/src/main/java/sma/agents/RandomWalkingAgent.java b/src/main/java/sma/agents/RandomWalkingAgent.java index 6be038c005a4725dc1a7b1f45b360753bd566058..4ff03511bc9e374a8f769ea6bc717a3abc5288a6 100644 --- a/src/main/java/sma/agents/RandomWalkingAgent.java +++ b/src/main/java/sma/agents/RandomWalkingAgent.java @@ -15,11 +15,7 @@ public class RandomWalkingAgent implements Agent { private Point position; private Random r; private GraphicEnvironment environment; - private State state; - private Boolean exposedThisCycle; - private Boolean infectedThisCycle; - public RandomWalkingAgent(Point position, int seed, GraphicEnvironment environment) { this.position = position; @@ -29,8 +25,9 @@ public class RandomWalkingAgent implements Agent { } public void move() { + state.onMovement(); + int move = r.nextInt(4); - Point newPosition = switch (move) { case Environment.LEFT -> new Point(position.x-environment.RADIUS,position.y); case Environment.RIGHT -> new Point(position.x+environment.RADIUS,position.y); @@ -45,12 +42,10 @@ public class RandomWalkingAgent implements Agent { } @Override - public void changeState(State state) { - this.state = state; - } + public void changeState(State state) { this.state = state; } @Override - public boolean contact() { + public boolean isExposed() { boolean isExposed = false; for (RandomWalkingAgent neighbor: environment.getNeighbors(position)) { if (neighbor.getState() instanceof InfectedState) { @@ -64,7 +59,7 @@ public class RandomWalkingAgent implements Agent { } @Override - public boolean incubate() { + public boolean isInfected() { boolean isSick = false; int roll = r.nextInt(100); if (roll <= YamlReader.getParams().getIncubationRate()*100) { @@ -74,7 +69,7 @@ public class RandomWalkingAgent implements Agent { } @Override - public boolean recover() { + public boolean isRecovered() { boolean isHealed = false; int roll = r.nextInt(100); if (roll <= YamlReader.getParams().getRecoveryRate()*100) { @@ -83,18 +78,8 @@ public class RandomWalkingAgent implements Agent { return isHealed; } - public State getState() { - return this.state; - } + public State getState() { return this.state; } - public void wakeUp() { - exposedThisCycle = false; - infectedThisCycle = false; - state.onMovement(); - } - - public Point getPosition() { - return position; - } + public Point getPosition() { return position; } } diff --git a/src/main/java/sma/agents/states/ExposedState.java b/src/main/java/sma/agents/states/ExposedState.java index 2da7e831c28935d082b6c083e1d7c916c23e61d8..d56cf87c82bf9e3d4ddcf585d6606ced45194e0c 100644 --- a/src/main/java/sma/agents/states/ExposedState.java +++ b/src/main/java/sma/agents/states/ExposedState.java @@ -10,8 +10,7 @@ public class ExposedState extends State{ @Override public void onMovement() { - agent.move(); - if (agent.incubate()) { + if (agent.isInfected()) { agent.changeState(new InfectedState(agent)); } } diff --git a/src/main/java/sma/agents/states/InfectedState.java b/src/main/java/sma/agents/states/InfectedState.java index b8173e8087891a7aa59891d05604370cb1bb80dd..8bd6cbc462fc4162814565acb1fb43ba25ec877e 100644 --- a/src/main/java/sma/agents/states/InfectedState.java +++ b/src/main/java/sma/agents/states/InfectedState.java @@ -10,8 +10,7 @@ public class InfectedState extends State{ @Override public void onMovement() { - agent.move(); - if (agent.recover()) { + if (agent.isRecovered()) { agent.changeState(new RecoveredState(agent)); } } diff --git a/src/main/java/sma/agents/states/RecoveredState.java b/src/main/java/sma/agents/states/RecoveredState.java index 991ae851490b38a872b26149ef9c5689b35c4553..3c051151adcc0db183cea66e5f18bfbf1202cd5a 100644 --- a/src/main/java/sma/agents/states/RecoveredState.java +++ b/src/main/java/sma/agents/states/RecoveredState.java @@ -10,7 +10,7 @@ public class RecoveredState extends State{ @Override public void onMovement() { - agent.move(); + } @Override diff --git a/src/main/java/sma/agents/states/SuceptibleState.java b/src/main/java/sma/agents/states/SuceptibleState.java index b12d17f4d28f56e51b896483ff91c4442e7c75d9..ed38369ed9f3b5ecd49b1405f91ac173c3c0c4e0 100644 --- a/src/main/java/sma/agents/states/SuceptibleState.java +++ b/src/main/java/sma/agents/states/SuceptibleState.java @@ -10,8 +10,7 @@ public class SuceptibleState extends State{ @Override public void onMovement() { - agent.move(); - if (agent.contact()) { + if (agent.isExposed()) { agent.changeState(new ExposedState(agent)); } } diff --git a/src/main/java/sma/scheduler/FairAsynchronousScheduler.java b/src/main/java/sma/scheduler/FairAsynchronousScheduler.java index a5d0295beef4c208a94668ee8da6b7fb9ca486f1..8cf6d09a9bfae0243df56b7af8274ba210092207 100644 --- a/src/main/java/sma/scheduler/FairAsynchronousScheduler.java +++ b/src/main/java/sma/scheduler/FairAsynchronousScheduler.java @@ -20,7 +20,7 @@ public class FairAsynchronousScheduler implements Scheduler{ public void nextCycle() { - List<Future<RandomWalkingAgent>> results = queue.parallelStream().map(agent -> executor.submit(() -> {agent.wakeUp(); return agent;})).collect(Collectors.toList()); + List<Future<RandomWalkingAgent>> results = queue.parallelStream().map(agent -> executor.submit(() -> {agent.move(); return agent;})).collect(Collectors.toList()); Function<Future<RandomWalkingAgent>, RandomWalkingAgent> futureTreatment = futureAgent -> { try { return futureAgent.get(); diff --git a/src/main/java/sma/scheduler/FairSynchronousScheduler.java b/src/main/java/sma/scheduler/FairSynchronousScheduler.java index 275d094d070d1d76df413c5ed118c889129aa5a9..a8fe123d41638cb0bebc617c811da332f2087f11 100644 --- a/src/main/java/sma/scheduler/FairSynchronousScheduler.java +++ b/src/main/java/sma/scheduler/FairSynchronousScheduler.java @@ -25,7 +25,7 @@ public class FairSynchronousScheduler implements Scheduler { private void wakeAgents() { while (!executionOrder.isEmpty()) { - agents[(executionOrder.pop())].wakeUp(); + agents[(executionOrder.pop())].move(); } }