youvsvirus / youvsvirus-unity

Unity version of the you vs virus game.
GNU General Public License v3.0
1 stars 1 forks source link

Fine-tune infection model #23

Open maccxs opened 4 years ago

maccxs commented 4 years ago

Although I still plan to switch to a more sophisticated model in the future, for the first web-version we need some fine-tuning. This is more for the look and feel, since intrinsically this work really fine. The infection somehow felt more real in the pyhton version. I already played with the params, since this also behaved a little weird with like 50 npcs. So for the fine tuning, we should also try out different population sizes

ghost commented 4 years ago

@maccxs I think the purely probabilistic implementation we have right now makes it feel unnatural because infections can theoretically go from infected->ill->dead/recovered within only 3 days. It is also theoretically possible and happens at times that someone stays ill for far too long.

Maybe we should return to the time-based approach we used in the python version:

infection-process

maccxs commented 4 years ago

Hi, I really felt that the python version was a little more real. But we should only do this right now if its is not too much work. Maybe it is a good idea to have something to put on the website first before we go into too many details.? What do you think? In addtion, Let me also describe the idea that I had with the SEIR model.

# The SEIR model differential equations.
def deriv(y, t, n):
    S, E, I, R = y
    # change in people susceptible to the disease
    # moderated by the number of infectious people and their contact with the infectious.
    dSdt = -rho * beta * S * I / n
    # people who have been exposed to the disease
    # grows based on the contact rate and decreases based on the incubation period
    # whereby people then become infectious
    dEdt = rho* beta * S * I / n - alpha * E
    # change in infectious people based on the exposed population and the incubation period
    # decreases based on the infectious period: the higher gamma is, the more quickly people die/recover
    dIdt = alpha * E - gamma * I
    # no longer infected: immune or diseased
    dRdt = gamma * I
    return dSdt, dEdt, dIdt, dRdt

whose paramters depend on the incubation time, the spreading factor of the virus and so on. n is the population of smileys including our player. rho is the social distancing factor. Here, rho = 0 means quarantine and rho = 1 business as usual. We would compute in each time step (whatever this is in unity), the above, S,E,I,R and compare them to the SN, EM, IM, RM which are the susceptible, exposed, infectious, recovered smileys we have so far. if RM < R: let those smileys IM recover who have been infected the longest / let 2% of them die if IM < I let smileys EM be infectious who have been exposed the longest if EM<E:

ghost commented 4 years ago

Hi, I am quite sceptical about forcing the mathematical model onto our game. After all, all the coefficient in the equations are already present in our simulation parameters. We can of course directly control alpha, gamma and rho. Beta emerges from our setup, which is the population density and especially the player's behavior. I like the idea of using the model for abstraction and for trying to make predictions about what will happen in our simulation. But if we use it to actually control the simulation, does it not go against our aim with this project? After all, we want the player to see how their own behaviour affects the spread of the disease. I feel like this is countered by letting a mathematical model control the game. This way, when the player stays at home and avoids contact with the smileys, all the lifes he or she saves by doing so instead fall victim to the equations, rendering the player's decisions void.

ghost commented 4 years ago

Reimplementing infections like in python and in above flowchart really is not that much work :)

maccxs commented 4 years ago

Hey, maybe I did not explain that in the right way. The mathematical model would not force the Smileys to do anything. I would be just a model for the spread of the infection. And it would be visualized with the smileys. In my opinion this is not different from using some statitics to define if the smileys get sick. If the player then stays at home, the infection would also spread further outside his house. Of course, you are right, this is still a game and this aspect is most important. The math model would just be another way of spreading the infection which could be tried on in the long run.

ghost commented 4 years ago

Okay, then I just misunderstood you. I guess I'll just wait to see an implementation of your idea, then it should become completely clear :)

maccxs commented 4 years ago

I think I will try my SEIR model idea, but I do not want to monpolize this issue. If you have another quick fix, feel free to implement it.

maccxs commented 4 years ago

Maybe delay until after web release