{"id":5963,"date":"2020-03-29T14:25:58","date_gmt":"2020-03-29T19:25:58","guid":{"rendered":"https:\/\/blogs.mathworks.com\/cleve\/?p=5963"},"modified":"2020-03-30T12:53:36","modified_gmt":"2020-03-30T17:53:36","slug":"second-version-of-a-covid-19-simulator","status":"publish","type":"post","link":"https:\/\/blogs.mathworks.com\/cleve\/2020\/03\/29\/second-version-of-a-covid-19-simulator\/","title":{"rendered":"Second Version of a COVID-19 Simulator"},"content":{"rendered":"\r\n\r\n<div class=\"content\"><!--introduction--><p>I have completely rewritten the COVID-19 simulator that I described in <a href=\"https:\/\/blogs.mathworks.com\/cleve\/2020\/03\/18\/covid-19-simulator\/\">last week's blog post<\/a> and I now have a second version.<\/p><p>A simulation begins when a stream of infected individuals is introduced into a group of healthy individuals.  The infection rapidly spreads through the population, reaches a peak when the stream stops and there are fewer potential victims, and eventually runs its course.<\/p><p>Here is every fifth frame of a typical simulation.<\/p><p><img decoding=\"async\" vspace=\"5\" hspace=\"5\" src=\"http:\/\/blogs.mathworks.com\/cleve\/files\/run1.gif\" alt=\"\"> <\/p><!--\/introduction--><h3>Contents<\/h3><div><ul><li><a href=\"#6727b5d7-8594-4f6e-95fb-7afbcb7c94fe\">Agents<\/a><\/li><li><a href=\"#3c186bf9-efad-4009-a8b4-0c7ea31a8a7d\">Individuals<\/a><\/li><li><a href=\"#5069e711-b28c-42f1-84d2-88ceb255a49e\">Typical simulation.<\/a><\/li><li><a href=\"#13572d83-8831-4c6e-93bc-c6a9a1be3a70\">Parameters<\/a><\/li><li><a href=\"#86c0c4bb-a5f0-49ba-a8b4-5e42ebd863c0\">Infectious encounters<\/a><\/li><li><a href=\"#229179b3-ea76-4239-a924-03580f1f4670\">Census<\/a><\/li><li><a href=\"#fe32684f-cda0-49b0-ac30-a1cbb7d64a9e\">History<\/a><\/li><li><a href=\"#4559b83b-90a3-417f-8f9b-67898d2d0462\">Remove the barrier<\/a><\/li><li><a href=\"#a0c7a6c8-558e-4e90-8df5-e692ebcee9ee\">Increase birth rate<\/a><\/li><li><a href=\"#4d4320c4-8823-4c98-aa4f-d6b38ea73b19\">Increase duration<\/a><\/li><li><a href=\"#e71c3e0d-e0ca-43cd-a0cf-70054fdae6b3\">Increase virulence<\/a><\/li><li><a href=\"#01aaace2-e13d-4ab6-85fa-bceac5d6aa9f\">Unstable<\/a><\/li><li><a href=\"#9feae707-42c7-4efe-86cc-2dc4a6edbf72\">Disclaimer<\/a><\/li><li><a href=\"#eecd70fb-a502-4d0f-930c-6f5c596409fe\">Software<\/a><\/li><\/ul><\/div><h4>Agents<a name=\"6727b5d7-8594-4f6e-95fb-7afbcb7c94fe\"><\/a><\/h4><p>The simulation involves quantities that I call <i>individuals<\/i>. They are reminiscent of the <i>turtles<\/i> in the programming language <a href=\"https:\/\/en.wikipedia.org\/wiki\/Turtle_graphics\">Logo<\/a>, developed by MIT's Seymour Papert in the 1960's. Today there are many programming languages that are descendants of Logo.  When I lived in New Mexico several years ago, I was one of the judges in a state-wide competition for high-school students called <a href=\"https:\/\/supercomputingchallenge.org\/19-20\/index.php\">Supercomputing Challenge<\/a>.  (The name has become a misnomer because most of the participants now use their own personal computers or the machines in a school lab.) A programming environment called <a href=\"https:\/\/ccl.northwestern.edu\/netlogo\/\">NetLogo<\/a> is a popular choice in the New Mexico Challenge.  Papert's turtles have become <i>agents<\/i>. I am certainly not an expert in agent-oriented computing.  Most of what I do know about the subject was gleaned from those high-schoolers' presentations.<\/p><h4>Individuals<a name=\"3c186bf9-efad-4009-a8b4-0c7ea31a8a7d\"><\/a><\/h4><p>The simple agents in this simulation move around a two-dimensional square world with constant individual velocities.  Some of the individuals are infected with a virus which they pass on to others when they come in close proximity.  New individuals are born and die at specified rates. Individuals have an age measured in a fractional number of time steps.<\/p><p>There are six types of individuals.<\/p><div><ul><li><i>Youth<\/i>.  Bright blue.  Healthy.  Age less than 20. New youth are born during the simulation.<\/li><\/ul><\/div><div><ul><li><i>Adult<\/i>.  Blue.  Healthy.  Age between 20 and 65.<\/li><\/ul><\/div><div><ul><li><i>Mature<\/i>.  Dark blue green.  Healthy.  Age over 65. They have stopped traveling and remain fixed \"at home\".<\/li><\/ul><\/div><div><ul><li><i>Sick<\/i>.  Red.  Infected with the virus.  Age is irrelevant. They enter the simulation from the upper right at regular time intervals for a specified period of time, then no more enter.  They infect others by passing close to them.<\/li><\/ul><\/div><div><ul><li><i>Immune<\/i>.  Red circles.  Formerly infected.  After a set length of time, the infection in a sick individual runs its course. That individual then becomes immune and can no longer infect others.<\/li><\/ul><\/div><div><ul><li><i>Dead<\/i>. At a specified mortality rate, sick and immune individuals are removed from the simulation.  The number of removals is the death count.<\/li><\/ul><\/div><p>The simulation is initiated with one sick individual moving into a group of adults and is terminated when there are no more live sick individuals.<\/p><p>A barrier with an adjustable length divides the square into two halves.  Imagine a wall across Italy, from Civitavecchia on the west coast to Civitanova Marche on the east. Or think of a wall between the United States and Mexico.<\/p><h4>Typical simulation.<a name=\"5069e711-b28c-42f1-84d2-88ceb255a49e\"><\/a><\/h4><p>The simulation in the animation runs for 320 time steps. The time is on the x-axis, while the changing total population is in the title. The infection enters from the northeast and rapidly spreads through the eastern half.  A few infected individuals find their way through the narrow gap in the barrier, but the epidemic never gains a foothold in in the west.<\/p><p>Here is the first frame. The are 100 adults of various ages that are not yet infected and one infected individual entering from the northeast corner.<\/p><p><img decoding=\"async\" vspace=\"5\" hspace=\"5\" src=\"http:\/\/blogs.mathworks.com\/cleve\/files\/run1_1.gif\" alt=\"\"> <\/p><p>Here is a frame about halfway through at time 180.  All five live types are present, but there is no active infection in the west.  The total population has risen to 107, which is the maximum seen for this particular run.<\/p><p><img decoding=\"async\" vspace=\"5\" hspace=\"5\" src=\"http:\/\/blogs.mathworks.com\/cleve\/files\/run1_182.gif\" alt=\"\"> <\/p><p>Here is the last frame.  There are no sick individuals present and no more to come.  This particular epidemic is over. There are 96 survivors.  A little over half of them had the infection and are now immune.   The others were never infected; among them are several youngsters born during the run.<\/p><p><img decoding=\"async\" vspace=\"5\" hspace=\"5\" src=\"http:\/\/blogs.mathworks.com\/cleve\/files\/run1_320.gif\" alt=\"\"> <\/p><h4>Parameters<a name=\"13572d83-8831-4c6e-93bc-c6a9a1be3a70\"><\/a><\/h4><p><img decoding=\"async\" vspace=\"5\" hspace=\"5\" src=\"http:\/\/blogs.mathworks.com\/cleve\/files\/run1_screen.gif\" alt=\"\"> <\/p><p>Eight parameters are set by the control panel on the left and can be changed during a simulation.<\/p><div><ul><li><i>n<\/i>.           Population size.<\/li><li><i>infect<\/i>.      Time steps between introduction of new sick adults.<\/li><li><i>birth<\/i>.       Birth rate.<\/li><li><i>mortality<\/i>.   Mortality rate.<\/li><li><i>virulence<\/i>.   Radius of effectiveness of the virus.<\/li><li><i>duration<\/i>.    Time steps before a sick individual becomes immune.<\/li><li><i>speed<\/i>.       Time steps between display updates.<\/li><li><i>barrier<\/i>.     Length of barrier separating two halves of the region.<\/li><\/ul><\/div><h4>Infectious encounters<a name=\"86c0c4bb-a5f0-49ba-a8b4-5e42ebd863c0\"><\/a><\/h4><p>My dictionary tells me that <i>virulence<\/i> is the severity or harmfulness of a disease.  In this simulator virulence is the radius of the effectiveness of the virus.  When a sick individual passes within this distance of someone who is not yet infected, the infection is passed on.  The default virulence of .02 is about the size of the dots representing the individuals.<\/p><h4>Census<a name=\"229179b3-ea76-4239-a924-03580f1f4670\"><\/a><\/h4><p>The frame on the right shows the running count for each type of individual.  The first five types are alive, and their total number is <i>n<\/i>, the current population.<\/p><h4>History<a name=\"fe32684f-cda0-49b0-ac30-a1cbb7d64a9e\"><\/a><\/h4><p>At any time during the simulation, you can click on the plot button. A second figure window pops open with a graph like this one. It plots the census over the entire history of the simulation. The parameter values are shown in the title.<\/p><p><img decoding=\"async\" vspace=\"5\" hspace=\"5\" src=\"http:\/\/blogs.mathworks.com\/cleve\/files\/run1_plot.gif\" alt=\"\"> <\/p><p>This is the history for the simulation is the animation. You can see that the adult population decreases from 100 at time zero to around 45 when the epidemic is over.  The number of both young individuals and mature individuals never gets above 10 is this particular setting. The number of sick individuals peaks near 30 before dropping to zero to end the epidemic.  About 40 individuals acquire immunity and a roughly equal number die.<\/p><h4>Remove the barrier<a name=\"4559b83b-90a3-417f-8f9b-67898d2d0462\"><\/a><\/h4><p>Let's change some of the parameters.  First, removing the barrier makes small differences.  The infection persists for a great number of time steps, the number of adults drops below 40, the number of deaths rises above 50 and the peak number of sick is below 20.<\/p><p><img decoding=\"async\" vspace=\"5\" hspace=\"5\" src=\"http:\/\/blogs.mathworks.com\/cleve\/files\/run3_plot.gif\" alt=\"\"> <\/p><h4>Increase birth rate<a name=\"a0c7a6c8-558e-4e90-8df5-e692ebcee9ee\"><\/a><\/h4><p>Increasing the birth rate results in many more youngsters.  The number of sick also rises more quickly and peaks at a higher value, but many of the young survive.<\/p><p><img decoding=\"async\" vspace=\"5\" hspace=\"5\" src=\"http:\/\/blogs.mathworks.com\/cleve\/files\/run2_plot.gif\" alt=\"\"> <\/p><h4>Increase duration<a name=\"4d4320c4-8823-4c98-aa4f-d6b38ea73b19\"><\/a><\/h4><p>Increasing the duration time for the infection causes many more deaths<\/p><p><img decoding=\"async\" vspace=\"5\" hspace=\"5\" src=\"http:\/\/blogs.mathworks.com\/cleve\/files\/run4_plot.gif\" alt=\"\"> <\/p><h4>Increase virulence<a name=\"e71c3e0d-e0ca-43cd-a0cf-70054fdae6b3\"><\/a><\/h4><p>Increasing the virulence causes a higher and earlier peak in the number of sick.<\/p><p><img decoding=\"async\" vspace=\"5\" hspace=\"5\" src=\"http:\/\/blogs.mathworks.com\/cleve\/files\/run5_plot.gif\" alt=\"\"> <\/p><h4>Unstable<a name=\"01aaace2-e13d-4ab6-85fa-bceac5d6aa9f\"><\/a><\/h4><p>Finally, increasing all these values at the same time, and increasing a value that is not in the control panel, namely the length of time that new infected individuals are introduced, results in a simulation that reaches the maximum time limit.  After 2000 time steps the number of deaths is over 600 and I have set the limit on the y-axis to 200.  The other values are oscillating and have not reached a limit. The situation appears to be unstable and is terminated.<\/p><p><img decoding=\"async\" vspace=\"5\" hspace=\"5\" src=\"http:\/\/blogs.mathworks.com\/cleve\/files\/run6_plot.gif\" alt=\"\"> <\/p><h4>Disclaimer<a name=\"9feae707-42c7-4efe-86cc-2dc4a6edbf72\"><\/a><\/h4><p>I make no claim that this simple simulation accurately models the crisis that our world is currently facing.  The population is too small, the geography is too crude and the time steps are unreal.  I have made no attempt to incorporate any actual data.   Nevertheless, I think it roughly behaves like the real thing.<\/p><h4>Software<a name=\"eecd70fb-a502-4d0f-930c-6f5c596409fe\"><\/a><\/h4><p>The simulator itself is available from the Central File Exchange at <a href=\"https:\/\/www.mathworks.com\/matlabcentral\/fileexchange\/74601-covid19-simulator\">this link<\/a> and is included in Version 5.1 of Cleve_Lab at <a href=\"https:\/\/www.mathworks.com\/matlabcentral\/fileexchange\/59085-cleve_lab\">this link<\/a>.<\/p><script language=\"JavaScript\"> <!-- \r\n    function grabCode_6bb8494f678646f6aafebba16a7c080d() {\r\n        \/\/ Remember the title so we can use it in the new page\r\n        title = document.title;\r\n\r\n        \/\/ Break up these strings so that their presence\r\n        \/\/ in the Javascript doesn't mess up the search for\r\n        \/\/ the MATLAB code.\r\n        t1='6bb8494f678646f6aafebba16a7c080d ' + '##### ' + 'SOURCE BEGIN' + ' #####';\r\n        t2='##### ' + 'SOURCE END' + ' #####' + ' 6bb8494f678646f6aafebba16a7c080d';\r\n    \r\n        b=document.getElementsByTagName('body')[0];\r\n        i1=b.innerHTML.indexOf(t1)+t1.length;\r\n        i2=b.innerHTML.indexOf(t2);\r\n \r\n        code_string = b.innerHTML.substring(i1, i2);\r\n        code_string = code_string.replace(\/REPLACE_WITH_DASH_DASH\/g,'--');\r\n\r\n        \/\/ Use \/x3C\/g instead of the less-than character to avoid errors \r\n        \/\/ in the XML parser.\r\n        \/\/ Use '\\x26#60;' instead of '<' so that the XML parser\r\n        \/\/ doesn't go ahead and substitute the less-than character. \r\n        code_string = code_string.replace(\/\\x3C\/g, '\\x26#60;');\r\n\r\n        copyright = 'Copyright 2020 The MathWorks, Inc.';\r\n\r\n        w = window.open();\r\n        d = w.document;\r\n        d.write('<pre>\\n');\r\n        d.write(code_string);\r\n\r\n        \/\/ Add copyright line at the bottom if specified.\r\n        if (copyright.length > 0) {\r\n            d.writeln('');\r\n            d.writeln('%%');\r\n            if (copyright.length > 0) {\r\n                d.writeln('% _' + copyright + '_');\r\n            }\r\n        }\r\n\r\n        d.write('<\/pre>\\n');\r\n\r\n        d.title = title + ' (MATLAB code)';\r\n        d.close();\r\n    }   \r\n     --> <\/script><p style=\"text-align: right; font-size: xx-small; font-weight:lighter;   font-style: italic; color: gray\"><br><a href=\"javascript:grabCode_6bb8494f678646f6aafebba16a7c080d()\"><span style=\"font-size: x-small;        font-style: italic;\">Get \r\n      the MATLAB code <noscript>(requires JavaScript)<\/noscript><\/span><\/a><br><br>\r\n      Published with MATLAB&reg; R2019b<br><\/p><\/div><!--\r\n6bb8494f678646f6aafebba16a7c080d ##### SOURCE BEGIN #####\r\n%% Second Version of a COVID-19 Simulator\r\n% I have completely rewritten the COVID-19 simulator that I described in\r\n% <https:\/\/blogs.mathworks.com\/cleve\/2020\/03\/18\/covid-19-simulator\/\r\n% last week's blog post> and I now have a second version.\r\n%\r\n% A simulation begins when a stream of infected individuals is\r\n% introduced into a group of healthy individuals.  The infection rapidly\r\n% spreads through the population, reaches a peak when the stream stops\r\n% and there are fewer potential victims, and eventually runs its course.\r\n%\r\n% Here is every fifth frame of a typical simulation.\r\n%\r\n% <<run1.gif>>\r\n%\r\n%% Agents\r\n% The simulation involves quantities that I call _individuals_.\r\n% They are reminiscent of the _turtles_ in the programming language\r\n% <https:\/\/en.wikipedia.org\/wiki\/Turtle_graphics Logo>,\r\n% developed by MIT's Seymour Papert in the 1960's.\r\n% Today there are many programming languages that are descendants\r\n% of Logo.  When I lived in New Mexico several years ago, I was one of\r\n% the judges in a state-wide competition for high-school students called\r\n% <https:\/\/supercomputingchallenge.org\/19-20\/index.php \r\n% Supercomputing Challenge>.  (The name has become a misnomer because\r\n% most of the participants now use their own personal\r\n% computers or the machines in a school lab.)\r\n% A programming environment called \r\n% <https:\/\/ccl.northwestern.edu\/netlogo\/ NetLogo> is a popular choice\r\n% in the New Mexico Challenge.  Papert's turtles have become _agents_.\r\n% I am certainly not an expert in agent-oriented computing.  Most of what\r\n% I do know about the subject was gleaned from those high-schoolers'\r\n% presentations.\r\n\r\n%% Individuals\r\n% The simple agents in this simulation move around a two-dimensional square\r\n% world with constant individual velocities.  Some of the individuals are\r\n% infected with a virus which they pass on to others when they come in\r\n% close proximity.  New individuals are born and die at specified rates.\r\n% Individuals have an age measured in a fractional number of time steps.\r\n\r\n%%\r\n% There are six types of individuals.\r\n% \r\n% * _Youth_.  Bright blue.  Healthy.  Age less than 20.\r\n% New youth are born during the simulation.\r\n%\r\n% * _Adult_.  Blue.  Healthy.  Age between 20 and 65.\r\n% \r\n% * _Mature_.  Dark blue green.  Healthy.  Age over 65.\r\n% They have stopped traveling and remain fixed \"at home\".\r\n%\r\n% * _Sick_.  Red.  Infected with the virus.  Age is irrelevant.\r\n% They enter the simulation from the upper right at regular time intervals\r\n% for a specified period of time, then no more enter.  They infect others\r\n% by passing close to them.\r\n%  \r\n% * _Immune_.  Red circles.  Formerly infected.  After a set length\r\n% of time, the infection in a sick individual runs its course.\r\n% That individual then becomes immune and can no longer infect others.\r\n%\r\n% * _Dead_. At a specified mortality rate, sick and immune individuals \r\n% are removed from the simulation.  The number of removals is the\r\n% death count.\r\n\r\n%%\r\n% The simulation is initiated with one sick individual moving into a group\r\n% of adults and is terminated when there are no more live sick individuals.\r\n\r\n%%\r\n% A barrier with an adjustable length divides the square into \r\n% two halves.  Imagine a wall across Italy, from Civitavecchia\r\n% on the west coast to Civitanova Marche on the east.\r\n% Or think of a wall between the United States and Mexico.\r\n\r\n%% Typical simulation.\r\n% The simulation in the animation runs for 320 time steps.\r\n% The time is on the x-axis,\r\n% while the changing total population is in the title.\r\n% The infection enters from the northeast and rapidly spreads through the\r\n% eastern half.  A few infected individuals find their way through the\r\n% narrow gap in the barrier, but the epidemic never gains a foothold in\r\n% in the west.\r\n\r\n%%\r\n% Here is the first frame.\r\n% The are 100 adults of various ages that are not yet infected and\r\n% one infected individual entering from the northeast corner.\r\n%\r\n% <<run1_1.gif>>\r\n\r\n%%\r\n% Here is a frame about halfway through at time 180.  All five live types \r\n% are present, but there is no active infection in the west.  The total\r\n% population has risen to 107, which is the maximum seen for this\r\n% particular run.\r\n%\r\n% <<run1_182.gif>>\r\n\r\n%%\r\n% Here is the last frame.  There are no sick individuals present and no\r\n% more to come.  This particular epidemic is over.\r\n% There are 96 survivors.  A little over half of them had the\r\n% infection and are now immune.   The others were never infected;\r\n% among them are several youngsters born during the run.\r\n%\r\n% <<run1_320.gif>>\r\n%\r\n\r\n%% Parameters\r\n%\r\n% <<run1_screen.gif>>\r\n%\r\n% Eight parameters are set by the control panel on the left and can be\r\n% changed during a simulation.\r\n%\r\n% * _n_.           Population size.\r\n% * _infect_.      Time steps between introduction of new sick adults.\r\n% * _birth_.       Birth rate.\r\n% * _mortality_.   Mortality rate.\r\n% * _virulence_.   Radius of effectiveness of the virus.\r\n% * _duration_.    Time steps before a sick individual becomes immune.\r\n% * _speed_.       Time steps between display updates.\r\n% * _barrier_.     Length of barrier separating two halves of the region.\r\n\r\n%% Infectious encounters\r\n% My dictionary tells me that _virulence_ is the severity or harmfulness\r\n% of a disease.  In this simulator virulence is the radius of the\r\n% effectiveness of the virus.  When a sick individual passes within\r\n% this distance of someone who is not yet infected, the infection\r\n% is passed on.  The default virulence of .02 is about the size of the\r\n% dots representing the individuals.\r\n\r\n%% Census\r\n% The frame on the right shows the running count for\r\n% each type of individual.  The first five types are alive,\r\n% and their total number is _n_, the current population.\r\n\r\n%% History\r\n% At any time during the simulation, you can click on the plot button.\r\n% A second figure window pops open with a graph like this one.\r\n% It plots the census over the entire history of the simulation.\r\n% The parameter values are shown in the title.\r\n%\r\n% <<run1_plot.gif>>\r\n%\r\n%%\r\n% This is the history for the simulation is the animation.\r\n% You can see that the adult population decreases from 100 at time zero to\r\n% around 45 when the epidemic is over.  The number of both young individuals\r\n% and mature individuals never gets above 10 is this particular setting.\r\n% The number of sick individuals peaks near 30 before dropping\r\n% to zero to end the epidemic.  About 40 individuals acquire immunity\r\n% and a roughly equal number die.\r\n\r\n%% Remove the barrier\r\n% Let's change some of the parameters.  First, removing the barrier\r\n% makes small differences.  The infection persists for a great number\r\n% of time steps, the number of adults drops below 40,\r\n% the number of deaths rises above 50 and the peak number of sick is\r\n% below 20.\r\n%\r\n% <<run3_plot.gif>>\r\n%\r\n\r\n%% Increase birth rate\r\n% Increasing the birth rate results in many more youngsters.  The number\r\n% of sick also rises more quickly and peaks at a higher value, but many\r\n% of the young survive.\r\n%\r\n% <<run2_plot.gif>>\r\n%\r\n\r\n%% Increase duration\r\n% Increasing the duration time for the infection causes many more deaths\r\n%\r\n% <<run4_plot.gif>>\r\n%\r\n\r\n%% Increase virulence\r\n% Increasing the virulence causes a higher and earlier peak in the number\r\n% of sick.\r\n%\r\n% <<run5_plot.gif>>\r\n%\r\n\r\n%% Unstable\r\n% Finally, increasing all these values at the same time, and \r\n% increasing a value that is not in the control panel, namely the length\r\n% of time that new infected individuals are introduced, results in a\r\n% simulation that reaches the maximum time limit.  After 2000 time steps\r\n% the number of deaths is over 600 and I have set the limit on the y-axis\r\n% to 200.  The other values are oscillating and have not reached a limit.\r\n% The situation appears to be unstable and is terminated.\r\n%\r\n% <<run6_plot.gif>>\r\n%\r\n\r\n%% Disclaimer\r\n% I make no claim that this simple simulation accurately models the\r\n% crisis that our world is currently facing.  The population is too small,\r\n% the geography is too crude and the time steps are unreal.  I have made\r\n% no attempt to incorporate any actual data.   Nevertheless, I think it\r\n% roughly behaves like the real thing.\r\n\r\n%% Software\r\n% The simulator itself is available from the Central File Exchange at\r\n% <https:\/\/www.mathworks.com\/matlabcentral\/fileexchange\/74601-covid19-simulator\r\n% this link> and is included in Version 5.1 of Cleve_Lab at\r\n% <https:\/\/www.mathworks.com\/matlabcentral\/fileexchange\/59085-cleve_lab\r\n% this link>.\r\n\r\n\r\n\r\n##### SOURCE END ##### 6bb8494f678646f6aafebba16a7c080d\r\n-->","protected":false},"excerpt":{"rendered":"<div class=\"overview-image\"><img src=\"https:\/\/blogs.mathworks.com\/cleve\/files\/run1_182.gif\" class=\"img-responsive attachment-post-thumbnail size-post-thumbnail wp-post-image\" alt=\"\" decoding=\"async\" loading=\"lazy\" \/><\/div><!--introduction--><p>I have completely rewritten the COVID-19 simulator that I described in <a href=\"https:\/\/blogs.mathworks.com\/cleve\/2020\/03\/18\/covid-19-simulator\/\">last week's blog post<\/a> and I now have a second version.... <a class=\"read-more\" href=\"https:\/\/blogs.mathworks.com\/cleve\/2020\/03\/29\/second-version-of-a-covid-19-simulator\/\">read more >><\/a><\/p>","protected":false},"author":78,"featured_media":5971,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[5,23,4,39],"tags":[],"_links":{"self":[{"href":"https:\/\/blogs.mathworks.com\/cleve\/wp-json\/wp\/v2\/posts\/5963"}],"collection":[{"href":"https:\/\/blogs.mathworks.com\/cleve\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.mathworks.com\/cleve\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.mathworks.com\/cleve\/wp-json\/wp\/v2\/users\/78"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.mathworks.com\/cleve\/wp-json\/wp\/v2\/comments?post=5963"}],"version-history":[{"count":4,"href":"https:\/\/blogs.mathworks.com\/cleve\/wp-json\/wp\/v2\/posts\/5963\/revisions"}],"predecessor-version":[{"id":5997,"href":"https:\/\/blogs.mathworks.com\/cleve\/wp-json\/wp\/v2\/posts\/5963\/revisions\/5997"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blogs.mathworks.com\/cleve\/wp-json\/wp\/v2\/media\/5971"}],"wp:attachment":[{"href":"https:\/\/blogs.mathworks.com\/cleve\/wp-json\/wp\/v2\/media?parent=5963"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.mathworks.com\/cleve\/wp-json\/wp\/v2\/categories?post=5963"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.mathworks.com\/cleve\/wp-json\/wp\/v2\/tags?post=5963"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}