Topic Coverage
- Classes, Methods, Attributes and Methods
- Abstraction, Encapsulation, Inheritance and Polymorphism
- Collections
- Abstract Classes
- SOLID principles
- Generics
Please download the files needed for the exam here.
Problem Description
We are in the midst of a global crisis. SARS-CoV-2 (SARS CoronaVirus 2), the virus that causes COVID-19, has infected millions and killed thousands of people worldwide.
In Singapore, we have implemented two systems, SafeEntry and TraceTogether. Right now, you are a junior developer in the team that is developing the Disease Outbreak Response Management System (DORMS), that brings both of these systems together. In addition, DORMS will automatically issue Stay-Home Notices (similar to a quarantine order).
The actual system needs a lot of time to develop. Youre in charge of completing a simulation of DORMS, which simulates how DORMS will operate when it has been implemented, and keeps track of statistics and the efficacy of the policies enacted.
The simulation environment of DORMS is extremely complex. As such, read the following explanations carefully.
The simulation
Viruses
In the simulation, there are three types of viruses. All viruses have some probability of mutating, and spread by creating another virus of the same type, or another virus of a different type (mutation). Here is how each virus spreads:
- AlphaCoronavirus: Every time it spreads, it has some probability of mutating into SARS-CoV-2. In the event that it doesnt mutate, the virus will simply create another AlphaCoronavirus, but the probability of that new virus mutating is reduced by 10% (given by SimulationParameters#VIRUS_MUTATION_PROBABILITY_REDUCTION).
- SARS-CoV-2: This is the target virus of the simulation, and this causes COVID-19. Every time it spreads, it has some probability of mutating into a BetaCoronavirus. In the event that it doesnt mutate, the probability of that new virus mutating is also reduced by 10%.
- BetaCoronavirus: This virus has no probability of mutating. As such, every time it spreads, it simply creates another BetaCoronavirus.
People
Of course, people are the key of this simulation, who are the primary vectors of the viruses above. People can transmit (give out) viruses they have, and can be infected with (take in) viruses from a contact. This simulation concerns itself with two types of people:
- Person: Represents the average person like you and me. When transmitting viruses, the person will transmit all the viruses he/she is infected with.
- MaskedPerson: This person is wearing a mask. In the simulation, masks are 60% effective (given by SimulationParameters#MASK_EFFECTIVENESS). This means that there is a 60% chance that at any given contact, no viruses will be transmitted. Likewise, there is a 60% chance that at any given contact, this person will not be infected with any virus.
DORMS
As a junior developer, you are not required to implement the full solution yourself. The higher level classes have already been implemented for you. All you need to do is to implement the concrete classes that represent different entities of the simulation. However, for clarity, the following explains how DORMS works and provides some specifications for you as you complete the implementation.
DORMS is essentially a combination of two existing solutions:
- SafeEntry: This is a system that allows users to check in and out of different locations. This allows us to keep track of all the contacts made in a location, to prevent and control the transmission of diseases and identify disease clusters. With SafeEntry, it is assumed that a person entering a location makes contact with everyone in that location, and diseases are spread via each contact.
- TraceTogether: This is a programme to enhance Singapores contact tracing efforts. The TraceTogether app is a mobile application that uses bluetooth to detect other nearby TraceTogether-enabled devices. On device detection, it is assumed that contact is made and diseases are spread via that contact.
Given these two systems, DORMS is a single platform that interacts with both of these systems for contact tracing. It allows users to check in to a location (via checkIn), check out of a location (via checkOut), keeps track of other contacts for TraceTogether (via contact). It also notes any person who presents with symptoms of respiratory illnesses (via presentSymptoms). DORMS will conduct a serological test on anyone who presents themselves with these symptoms, and take the necessary action if the person tests positive for the target virus (SARS-CoV-2). The following describes the action that needs to be taken by DORMS on a positive SARS-CoV-2 test:
- The person who tested positive will be given a 28-day Stay-Home-Notice and will not be allowed to leave their home during that period.
- All recent (14 days, or SimulationParameters#TRACING_PERIOD) contacts made by this person will be served a 14-day (or SimulationParameters#SHN_DURATION) Stay-Home-Notice as well.
However, the current implementation of DORMS does not support it, but thanks to SOLID principles, the developers of DORMS have made it open for extension, and it will be simple to implement this behaviour.
Your Task
You are given the incomplete implementation of the DORMS simulation. Your task is to complete the implementation of the missing classes.
After completing the program, you may run the DORMS simulation:
$ java Main===== RUNNING SIMULATION =====Mask policy not implemented and SHN not issued===== STATISTICS =====Infected population: 9Total Population: 19===== SIMULATION COMPLETED ========== RUNNING SIMULATION =====Mask policy not implemented and SHN issued===== STATISTICS =====Infected population: 6Total Population: 19===== SIMULATION COMPLETED ========== RUNNING SIMULATION =====Mask policy implemented and SHN not issued===== STATISTICS =====Infected population: 5Total Population: 19===== SIMULATION COMPLETED ========== RUNNING SIMULATION =====Mask policy implemented and SHN issued===== STATISTICS =====Infected population: 4Total Population: 19===== SIMULATION COMPLETED =====
Or you can run the simulation in verbose mode by issuing the -v flag, such as by running java Main -v
This task is divided into several levels. Read through all the levels to see how the different levels are related. You are to complete ALL levels.
All the files given to you should not be modified. You may modify them for your own testing, but we will replace them to conduct our own tests on your solutions.
Level 1
Creating the immutable Virus classThe first thing wed define is the Virus class, because most of the entities of this simulation relies on its implementation.Define an abstract Virus class with the following specifications:
- The constructor Virus(String name, double probabilityOfMutating) creates a new Virus object where its name is name and probability of mutating upon spreading is probabilityOfMutating.
- Virus spread(double random). This method causes the virus to spread, returning a new virus. It takes in a random value as a double. Essentially, if random <= probabilityOfMutating, then the virus mutates.
- The string representation of virus objects is shown in the jshell output
In addition, define the following concrete classes:
- AlphaCoronavirus. Its constructor, AlphaCoronavirus(double probabilityOfMutating) initialises it with name "Alpha Coronavirus".Calling spread(random) returns a new SARS_CoV_2(this.probabilityOfMutating) if random <= this.probabilityOfMutating, otherwise, it will return a new AlphaCoronavirus(this.probabilityOfMutating * SimulationParameters.VIRUS_MUTATION_PROBABILITY_REDUCTION).
- SARS_CoV_2. Its constructor, SARS_CoV_2(double probabilityOfMutating) initialises it with name "SARS-CoV-2"Calling spread(random) returns a new BetaCoronavirus() if random <= this.probabilityOfMutating, otherwise, it will return a new SARS_CoV_2(this.probabilityOfMutating * SimulationParameters.VIRUS_MUTATION_PROBABILITY_REDUCTION).
- BetaCoronavirus. Its constructor takes no arguments, and automatically initialises with 0.0 as its probabilityOfMutating. When calling betaCoronavirus.spread(random), it will always return a new BetaCoronavirus() as it does not mutate.
Note the naming, especially with SARS_CoV_2 where we use a small o. Note that the name of the virus is spelt with instead of _; we use _ as the name of the class instead, for obvious reasons.
$ jshell -q your_files_in_ascending_dependency_order < test1.jshjshell> new AlphaCoronavirus(0.5)$.. ==> Alpha Coronavirus with 0.500 probability of mutatingjshell> new SARS_CoV_2(0.5)$.. ==> SARS-CoV-2 with 0.500 probability of mutatingjshell> new BetaCoronavirus()$.. ==> Beta Coronavirus with 0.000 probability of mutatingjshell> new AlphaCoronavirus(0.99).spread(0.99)$.. ==> SARS-CoV-2 with 0.990 probability of mutatingjshell> new AlphaCoronavirus(0.99).spread(1)$.. ==> Alpha Coronavirus with 0.891 probability of mutatingjshell> new SARS_CoV_2(0.5).spread(0.5)$.. ==> Beta Coronavirus with 0.000 probability of mutatingjshell> new SARS_CoV_2(0.5).spread(0.51)$.. ==> SARS-CoV-2 with 0.450 probability of mutatingjshell> new BetaCoronavirus().spread(0)$.. ==> Beta Coronavirus with 0.000 probability of mutatingjshell> /exit
|
|
Level 2
Representing PeopleNow, we are going to implement an immutable Person class.These are the specifications for the Person class:
- The constructor Person(String name) creates a Person object where his/her name is name
- List<Virus> transmit(double random) causes all the viruses in the Person to spread(random), where the resulting viruses are stored in a List, which is returned. random is used to determine if each virus mutates or not.
- Person infectWith(List<Virus> listOfViruses, double random) returns a new Person that represents the person being infected with the listOfViruses. random is insignificant here because the viruses do not mutate before entering the human body, but only when exiting.
- boolean test(String name) checks if the Person is infected with any Virus where its name is name.
- The String representation is simply the Persons name.
$ jshell -q your_files_in_ascending_dependency_order < test2.jshjshell> Person illio = new Person("Illio");jshell> Person phillmont = new Person("phillmont")jshell> phillmontphillmont ==> phillmontjshell> illio.infectWith(List.of(new AlphaCoronavirus(1)), 0).test("Alpha Coronavirus");$.. ==> truejshell> Arrays.toString(illio.infectWith(List.of(new AlphaCoronavirus(1)), 0).transmit(1).toArray())$.. ==> "[SARS-CoV-2 with 1.000 probability of mutating]"jshell> List<Virus> l = illio.infectWith(List.of(new AlphaCoronavirus(0.5)), 0).transmit(1)jshell> Arrays.toString(l.toArray())$.. ==> "[Alpha Coronavirus with 0.450 probability of mutating]"jshell> Arrays.toString(phillmont.infectWith(l, 1).transmit(1).toArray())$.. ==> "[Alpha Coronavirus with 0.405 probability of mutating]"jshell> Arrays.toString(phillmont.infectWith(l, 1).transmit(0).toArray())$.. ==> "[SARS-CoV-2 with 0.450 probability of mutating]"jshell> /exit
|
|
Level 3
Making ContactNow we are going to get two people to contact each other and spread viruses.Create an immutable Contact class that keeps track of a contact between two people, and transmits viruses between them.The following are the specifications of the Contact class:
- Contact(Person first, Person second, double time). This is the constructor which keeps the references of the two people in contact
- List<Person> transmit(double random) simultaneously transmits viruses between the two people in the Contact, returning a List of the resulting Person objects. Note that the transmission and infection of viruses happen in parallel, meaning that a infects b at the same time that b infects a.For example, person a has a AlphaCoronavirus with 1.000 probability of mutating.person b has a SARS-CoV-2 with a 1.000 probability of mutating.After transmission, person a would have:
- Alpha Coronavirus with 1.000 probability of mutating
- a newly received Beta Coronavirus with 0.000 probability of mutating
and person b would have:
- SARS-CoV-2 with a 1.000 probability of mutating
- a newly received SARS-CoV-2 with a 1.000 probability of mutating.
- List<Person> getPeople this returns the people involved in the Contact
- double timeOfContact(). This method simply returns the time of contact
Remember that cyclic dependencies are not allowed.
$ jshell -q your_files_in_ascending_dependency_order < test3.jshjshell> Person a = new Person("A").infectWith(List.of(new AlphaCoronavirus(1)), 1)jshell> Person b = new Person("B").infectWith(List.of(new SARS_CoV_2(1)), 1)jshell> Contact e = new Contact(a, b, 1)jshell> e.transmit(1).get(0).test("Alpha Coronavirus")$.. ==> truejshell> e.transmit(1).get(0).test("SARS-CoV-2")$.. ==> falsejshell> e.transmit(1).get(0).test("Beta Coronavirus")$.. ==> truejshell> e.transmit(1).get(1).test("Alpha Coronavirus")$.. ==> falsejshell> e.transmit(1).get(1).test("SARS-CoV-2")$.. ==> truejshell> e.transmit(1).get(1).test("Beta Coronavirus")$.. ==> falsejshell> Arrays.toString(e.getPeople().toArray())$.. ==> "[A, B]"jshell> e.timeOfContact()$.. ==> 1.0jshell> /exit
|
|
Level 4
LocationsSo far, weve only dealt with contact tracing, and have yet to deal with SafeEntrys cluster tracking. DORMS has specified an immutable Location class that keeps track of its occupants at any given time.The following defines the specifications for the Location class:
- Location(String name) creates a new empty Location
- List<Person> getOccupants. This essentially returns a list of all the occupants in the Location.
- Location accept(Person person). This returns a new Location which represents the original location accepting person.
- Location remove(String personName). This returns the new Location object where the Person whose name is personName was removed from this Location.
- The String representation is simply its name.
$ jshell -q your_files_in_ascending_dependency_order < test4.jshjshell> Person mingsoon = new Person("Ming Soon")jshell> Person longThePerson = new Person("Long")jshell> Location l = new Location("LT19")jshell> ll ==> LT19jshell> Arrays.toString(l.getOccupants().toArray())$.. ==> "[]"jshell> Arrays.toString(l.accept(mingsoon) ...> .getOccupants().toArray())$.. ==> "[Ming Soon]"jshell> Arrays.toString(l.accept(mingsoon) ...> .accept(longThePerson) ...> .getOccupants().toArray())$.. ==> "[Ming Soon, Long]"jshell> Arrays.toString(l.accept(mingsoon) ...> .accept(longThePerson) ...> .remove(mingsoon.toString()) ...> .getOccupants().toArray())$.. ==> "[Long]"jshell> Arrays.toString(l.accept(mingsoon) ...> .accept(longThePerson) ...> .remove(mingsoon.toString()) ...> .remove(longThePerson.toString()) ...> .getOccupants().toArray())$.. ==> "[]"jshell> /exit
|
|
Level 5
Mask PolicyWe are aiming to simulate the efficacy of a mask-wearing policy. As such, we need some way to represent the behaviour of people wearing masks.Hopefully, you have kept your Person class open for extension. As such, we can quite simply extend from the Person class to create a MaskedPerson class, which follows the same specifications.Note that for both transmissions and infections, if the random value supplied is less than or equal to the masks effectiveness (see SimulationParameters#MASK_EFFECTIVENESS), then nothing is transmitted / infected.The remaining specifications can be inferred from the jshell test. Note that you should adhere to the DRY (Dont-Repeat-Yourself) principle as much as possible. Expect to make calls to super in your overriden methods.
$ jshell -q your_files_in_ascending_dependency_order < test5.jshjshell> MaskedPerson frederick = new MaskedPerson("Frederick")jshell> frederick.infectWith(List.of(new AlphaCoronavirus(0.5)), 0.61).test("Alpha Coronavirus")$.. ==> truejshell> frederick.infectWith(List.of(new AlphaCoronavirus(0.5)), 0.6).test("Alpha Coronavirus")$.. ==> falsejshell> Arrays.toString(frederick.infectWith(List.of(new AlphaCoronavirus(0.5)), 0.61).transmit(0.61).toArray())$.. ==> "[Alpha Coronavirus with 0.450 probability of mutating]"jshell> Arrays.toString(frederick.infectWith(List.of(new AlphaCoronavirus(0.5)), 0.61).transmit(0.6).toArray())$.. ==> "[]"jshell> /exit
|
|
Level 6
Stay-Home-Notice (SHN) PolicyWe are aiming to simulate the efficacy of an SHN policy. Because DORMS currently does not support this, we need to extend the Dorms class to implement this behaviour.Because we need to be able to check if a person is on SHN, DORMS has specified the following method in the Person class:
- boolean onSHN(double currentTime). This takes in the current time and returns true if the Person is on SHN.
You are also allowed to implement more methods in Person and MaskedPerson to help you support the SHN issuance. Your job now is to implement the DormsWithShn class which is basically DORMS + automatic issuance of SHNs. Remember that you are not allowed to modify the Dorms class. Many methods were purposefully declared final to prevent extension.Read the remaining classes provided to you carefully. In particular, here are some tips to help you implement the feature:
- The main logic you need to override is handleSickPerson. You do not need to override other methods or define other behaviours.
- The constructor for DormsWithShn class should be the same as Dorms.
- Make use of the Dorms#queryContacts method. This retrieves all the Contacts that are related to the sick Person. This also queries the Contacts up to SimulationParameters#TRACING_PERIOD in history.
- Because Person objects are immutable, Dorms#updatePerson updates the state of the Person in the PersonDatabase and Dorms#getUpdatedPerson retrieves the most updated state of a Person
- Remember to log every SHN served. The format of the output can be seen in the verbose output of the simulation below. Do not use System.out.println(), but use log instead.
- The behaviour of people checking in or making contact while on SHN is well defined. You do not need to implement this behaviour.
Once youre done with the implementation, you may proceed to run the DORMS simulation by compiling Main.java and running Main on the JVM. You may also supply the -v flag for verbose mode, which shows all your logs.We hope you enjoyed this mock PE, best of luck for next Friday 🙂One final question, do you think DORMS was well designed? How can we improve the design of DORMS? CS2030/S Teaching Team
$ java Main===== RUNNING SIMULATION =====Mask policy not implemented and SHN not issued===== STATISTICS =====Infected population: 9Total Population: 19===== SIMULATION COMPLETED ========== RUNNING SIMULATION =====Mask policy not implemented and SHN issued===== STATISTICS =====Infected population: 6Total Population: 19===== SIMULATION COMPLETED ========== RUNNING SIMULATION =====Mask policy implemented and SHN not issued===== STATISTICS =====Infected population: 5Total Population: 19===== SIMULATION COMPLETED ========== RUNNING SIMULATION =====Mask policy implemented and SHN issued===== STATISTICS =====Infected population: 4Total Population: 19===== SIMULATION COMPLETED =====$ java Main -v===== RUNNING SIMULATION =====Mask policy not implemented and SHN not issuedInitial Disease Carrier visits LT19 at time 0.000Prof Henry visits LT19 at time 0.000Prof Terence visits LT19 at time 0.000Yong Qi visits LT19 at time 0.100Kevin visits LT19 at time 0.110Prof Henry leaves LT19 at time 0.200Sean visits LT19 at time 0.230Yong Qi leaves LT19 at time 0.300Yong Qi met Eric at time 0.330Eric met De Zhang at time 0.340Prof Terence leaves LT19 at time 0.400Prof Henry visits i3 at time 0.450Initial Disease Carrier leaves LT19 at time 0.500Kevin leaves LT19 at time 0.500Sean leaves LT19 at time 0.500De Zhang visits i3 at time 0.900Prof Henry leaves i3 at time 0.950Yong Qi tests positive for SARS-CoV-2 at time 1.000Sean visits i3 at time 1.200Initial Disease Carrier visits i3 at time 1.300De Zhang leaves i3 at time 1.300Initial Disease Carrier leaves i3 at time 1.300Sean leaves i3 at time 1.300Prof Henry met De Zhang at time 1.300Eric met Prof Henry at time 1.400De Zhang tests positive for SARS-CoV-2 at time 3.000Initial Disease Carrier visits COM1-B113 at time 3.100Marcus visits COM1-B113 at time 3.100Jerryl visits COM1-B113 at time 3.200Yong Qi visits COM1-B113 at time 3.300Prof Henry visits COM1-B113 at time 3.400Kevin visits COM1-B114 at time 3.500Destinee visits COM1-B114 at time 3.600Jerryl tests positive for SARS-CoV-2 at time 3.600Yong Qi leaves COM1-B113 at time 3.600Initial Disease Carrier leaves COM1-B113 at time 4.000Marcus leaves COM1-B113 at time 4.000Jerryl leaves COM1-B113 at time 4.000Prof Henry leaves COM1-B113 at time 4.000Kevin leaves COM1-B114 at time 4.000Destinee leaves COM1-B114 at time 4.000Siddarth Raj met Yong Qi at time 5.000Xuan Ming met Yong Qi at time 7.000Xuan Ming visits ION Orchard at time 9.000Jerryl visits ION Orchard at time 9.400Xuan Ming leaves ION Orchard at time 9.500Xuan Ming met Le Yang at time 10.000Le Yang met Joel at time 10.500Mario met Jeremy at time 10.500Bryan visits ION Orchard at time 10.500Geyu visits ION Orchard at time 10.500Jerryl leaves ION Orchard at time 10.500Geyu leaves ION Orchard at time 10.500Bryan leaves ION Orchard at time 10.500Mario test negative for SARS-CoV-2 at time 11.000===== STATISTICS =====Infected population: 9Total Population: 19===== SIMULATION COMPLETED ========== RUNNING SIMULATION =====Mask policy not implemented and SHN issuedInitial Disease Carrier visits LT19 at time 0.000Prof Henry visits LT19 at time 0.000Prof Terence visits LT19 at time 0.000Yong Qi visits LT19 at time 0.100Kevin visits LT19 at time 0.110Prof Henry leaves LT19 at time 0.200Sean visits LT19 at time 0.230Yong Qi leaves LT19 at time 0.300Yong Qi met Eric at time 0.330Eric met De Zhang at time 0.340Prof Terence leaves LT19 at time 0.400Prof Henry visits i3 at time 0.450Initial Disease Carrier leaves LT19 at time 0.500Kevin leaves LT19 at time 0.500Sean leaves LT19 at time 0.500De Zhang visits i3 at time 0.900Prof Henry leaves i3 at time 0.950Yong Qi tests positive for SARS-CoV-2 at time 1.000Yong Qi has been served a SHN that ends at 29.000Initial Disease Carrier has been served a SHN that ends at 14.100Prof Henry has been served a SHN that ends at 14.100Prof Terence has been served a SHN that ends at 14.100Kevin has been served a SHN that ends at 14.110Sean has been served a SHN that ends at 14.230Eric has been served a SHN that ends at 14.330De Zhang leaves i3 at time 1.300De Zhang tests positive for SARS-CoV-2 at time 3.000De Zhang has been served a SHN that ends at 31.000Eric has been served a SHN that ends at 14.340Prof Henry has been served a SHN that ends at 14.900Marcus visits COM1-B113 at time 3.100Jerryl visits COM1-B113 at time 3.200Destinee visits COM1-B114 at time 3.600Jerryl test negative for SARS-CoV-2 at time 3.600Marcus leaves COM1-B113 at time 4.000Jerryl leaves COM1-B113 at time 4.000Destinee leaves COM1-B114 at time 4.000Xuan Ming visits ION Orchard at time 9.000Jerryl visits ION Orchard at time 9.400Xuan Ming leaves ION Orchard at time 9.500Xuan Ming met Le Yang at time 10.000Le Yang met Joel at time 10.500Mario met Jeremy at time 10.500Bryan visits ION Orchard at time 10.500Geyu visits ION Orchard at time 10.500Jerryl leaves ION Orchard at time 10.500Geyu leaves ION Orchard at time 10.500Bryan leaves ION Orchard at time 10.500Mario test negative for SARS-CoV-2 at time 11.000===== STATISTICS =====Infected population: 6Total Population: 19===== SIMULATION COMPLETED ========== RUNNING SIMULATION =====Mask policy implemented and SHN not issuedInitial Disease Carrier visits LT19 at time 0.000Prof Henry visits LT19 at time 0.000Prof Terence visits LT19 at time 0.000Yong Qi visits LT19 at time 0.100Kevin visits LT19 at time 0.110Prof Henry leaves LT19 at time 0.200Sean visits LT19 at time 0.230Yong Qi leaves LT19 at time 0.300Yong Qi met Eric at time 0.330Eric met De Zhang at time 0.340Prof Terence leaves LT19 at time 0.400Prof Henry visits i3 at time 0.450Initial Disease Carrier leaves LT19 at time 0.500Kevin leaves LT19 at time 0.500Sean leaves LT19 at time 0.500De Zhang visits i3 at time 0.900Prof Henry leaves i3 at time 0.950Yong Qi tests positive for SARS-CoV-2 at time 1.000Sean visits i3 at time 1.200Initial Disease Carrier visits i3 at time 1.300De Zhang leaves i3 at time 1.300Initial Disease Carrier leaves i3 at time 1.300Sean leaves i3 at time 1.300Prof Henry met De Zhang at time 1.300Eric met Prof Henry at time 1.400De Zhang tests positive for SARS-CoV-2 at time 3.000Initial Disease Carrier visits COM1-B113 at time 3.100Marcus visits COM1-B113 at time 3.100Jerryl visits COM1-B113 at time 3.200Yong Qi visits COM1-B113 at time 3.300Prof Henry visits COM1-B113 at time 3.400Kevin visits COM1-B114 at time 3.500Destinee visits COM1-B114 at time 3.600Jerryl test negative for SARS-CoV-2 at time 3.600Yong Qi leaves COM1-B113 at time 3.600Initial Disease Carrier leaves COM1-B113 at time 4.000Marcus leaves COM1-B113 at time 4.000Jerryl leaves COM1-B113 at time 4.000Prof Henry leaves COM1-B113 at time 4.000Kevin leaves COM1-B114 at time 4.000Destinee leaves COM1-B114 at time 4.000Siddarth Raj met Yong Qi at time 5.000Xuan Ming met Yong Qi at time 7.000Xuan Ming visits ION Orchard at time 9.000Jerryl visits ION Orchard at time 9.400Xuan Ming leaves ION Orchard at time 9.500Xuan Ming met Le Yang at time 10.000Le Yang met Joel at time 10.500Mario met Jeremy at time 10.500Bryan visits ION Orchard at time 10.500Geyu visits ION Orchard at time 10.500Jerryl leaves ION Orchard at time 10.500Geyu leaves ION Orchard at time 10.500Bryan leaves ION Orchard at time 10.500Mario test negative for SARS-CoV-2 at time 11.000===== STATISTICS =====Infected population: 5Total Population: 19===== SIMULATION COMPLETED ========== RUNNING SIMULATION =====Mask policy implemented and SHN issuedInitial Disease Carrier visits LT19 at time 0.000Prof Henry visits LT19 at time 0.000Prof Terence visits LT19 at time 0.000Yong Qi visits LT19 at time 0.100Kevin visits LT19 at time 0.110Prof Henry leaves LT19 at time 0.200Sean visits LT19 at time 0.230Yong Qi leaves LT19 at time 0.300Yong Qi met Eric at time 0.330Eric met De Zhang at time 0.340Prof Terence leaves LT19 at time 0.400Prof Henry visits i3 at time 0.450Initial Disease Carrier leaves LT19 at time 0.500Kevin leaves LT19 at time 0.500Sean leaves LT19 at time 0.500De Zhang visits i3 at time 0.900Prof Henry leaves i3 at time 0.950Yong Qi tests positive for SARS-CoV-2 at time 1.000Yong Qi has been served a SHN that ends at 29.000Initial Disease Carrier has been served a SHN that ends at 14.100Prof Henry has been served a SHN that ends at 14.100Prof Terence has been served a SHN that ends at 14.100Kevin has been served a SHN that ends at 14.110Sean has been served a SHN that ends at 14.230Eric has been served a SHN that ends at 14.330De Zhang leaves i3 at time 1.300De Zhang tests positive for SARS-CoV-2 at time 3.000De Zhang has been served a SHN that ends at 31.000Eric has been served a SHN that ends at 14.340Prof Henry has been served a SHN that ends at 14.900Marcus visits COM1-B113 at time 3.100Jerryl visits COM1-B113 at time 3.200Destinee visits COM1-B114 at time 3.600Jerryl test negative for SARS-CoV-2 at time 3.600Marcus leaves COM1-B113 at time 4.000Jerryl leaves COM1-B113 at time 4.000Destinee leaves COM1-B114 at time 4.000Xuan Ming visits ION Orchard at time 9.000Jerryl visits ION Orchard at time 9.400Xuan Ming leaves ION Orchard at time 9.500Xuan Ming met Le Yang at time 10.000Le Yang met Joel at time 10.500Mario met Jeremy at time 10.500Bryan visits ION Orchard at time 10.500Geyu visits ION Orchard at time 10.500Jerryl leaves ION Orchard at time 10.500Geyu leaves ION Orchard at time 10.500Bryan leaves ION Orchard at time 10.500Mario test negative for SARS-CoV-2 at time 11.000===== STATISTICS =====Infected population: 4Total Population: 19===== SIMULATION COMPLETED =====
|
|
Only logged in customers who have purchased this product may leave a review.
Reviews
There are no reviews yet.