Also, if you go to the article you can copy/paste his code in a J editor.

Change ppl if you want for the number of people.
Ctrl-Shift-E to evaluate all the code.

Then in the J terminal type:

display_infect^:100 starting_pop

This will run the simulation for 100 people for 100 days.

The problem in my variation for the graphics is that I want to update my
display for each one of these 100 days, and not start from day one each
time in the update loop.

The second issue is something to do with the number of people and the wd
timer rate that throws the colors off.

Thanks.

On Fri, 27 Mar 2020 at 22:46, Robert Herman <[email protected]> wrote:

> I am attaching it as a text file. Sorry about all the confusion.
>
> I am running J901 for Windows 64-bit.
> The animation is pulled from Michal's work.
>
> I press Ctrl-Shift-E to run the window once it is open in the J editor.
>
> A blank white graphics window should open.
>
> I then change the 0 in wd 'timer 0' to something like 650 and place my
> cursor on the end of the line and hit Ctrl-R.
> The terminal starts to show the output, and the graphics window starts
> animating with color blocks.
>
> Don't X out of the graphics window. It will crash your session. Instead
> change the 650 back to 0 and hit Ctrl-R to stop the program for a graceful
> exit.
>
> My issue is with the colors sometimes blending or white squares become
> black. This was more pronounced when I change the grid size to lower
> numbers like 64 people (8 8 $ infect_display^:64) vs. 144 people (12 12 $
> ...).
>
> Thanks.
>
>
>
> On Fri, 27 Mar 2020 at 18:45, 'Rob Hodgkinson' via Programming <
> [email protected]> wrote:
>
>> Thanks Robert, interesting.  I had to massage line wraps (mostly
>> comments) and could get it to load, but not run … seems due to this line
>> below …
>>
>> > infect =: 3 : 0
>> (Perhaps another editor/copy/paste error perhaps, but I can’t see the
>> resolution to this).
>>
>> But also please note Bill recently tweaked the mail groups to now allow a
>> TXT file to be appended to emails (I believe TXT only, not IJS) so you can
>> actually attach and send your TXT script file to the group.
>>
>> Otherwise please feel free to send to me directly.
>>
>> Thanks, Rob
>>
>> > On 28 Mar 2020, at 9:03 am, Robert Herman <[email protected]> wrote:
>> >
>> > The code format is rendering with *'s for italics. Here is hopefully a
>> more
>> > legible paste:
>> >
>> > load 'viewmat'
>> > coinsert'jgl2'
>> >
>> > wd 'pc Covid-19-Sim closeok'        NB. parent control (window) named
>> 'w0'
>> > wd 'minwh 500 500; cc g0 isidraw;'  NB. add an 'isidraw' child control
>> > named 'g0'
>> > wd 'pshow; pmove 40 510 0 0'        NB. show the window at the given
>> > coordinates.
>> > wd 'sm focus term'                  NB. session manager: bring terminal
>> to
>> > front
>> > wd 'psel Covid-19-Sim; ptop'        NB. bring our window to front
>> >
>> > vmcc =: viewmatcc_jviewmat_   NB. viewmat to a child control
>> > step =: render @ update       NB. each step, we'll call those two in
>> > sequence
>> >
>> > RGB=: (#:i.8) { 0 255
>> > DSEIR =: (0 7 6 4 2 { RGB)
>> >
>> > update =: verb define
>> >  im =: 12 12 $ infect_display starting_pop
>> > )
>> >
>> > render =: verb define
>> >  DSEIR vmcc im;'g0'
>> >  glpaint''
>> > )
>> >
>> > sys_timer_z_ =: step_base_
>> > wd 'timer 0'
>> >
>> > ppl =: 144           NB. How many people are in our simulation?
>> >
>> > Beta  =: 0.106271    NB. The rate at which susceptible people become
>> > exposed. RPH - dependent on R0 = 2.2 3/25/2020
>> > Sigma =: 0.066967    NB. The rate at which exposed people become
>> > infectious. RPH - (1-sigma)^10=0.5, 10 is incubation period.
>> > Gamma =: 0.056126    NB. The rate at which infectious people recover.
>> RPH -
>> > adjusted to 12 days, so (1-Gamma)^12=0.5.
>> > Xi    =: 0.02284     NB. The rate at which recovered people lose
>> immunity
>> > and become susceptible. RPH - 30 days
>> >    NB. is partially based upon man on Diamond Princess who presented
>> > symptoms around 30 days otherwise made up.
>> > R     =: 2.2         NB. How many people will 1 person infect? RPH -
>> based
>> > on latest CDC estimate 3/25/2020
>> > CFR   =: 0.015       NB. Case Fatality Rate - RPH based upon 0.25% to 3%
>> > from CDC, so 1.5% is higher than average.
>> > D     =: 0.0011619   NB. Death rate per day while symptomatic - RPH
>> based
>> > upon 13 days to death as seen and per CDC.
>> >
>> > ClosenessStdDev =: 5 % 3
>> > ClosenessMean =: 1
>> >
>> > rand_norm =: 3 : '(2&o. 2p1 * ? y) * %: _2 * ^. ? y'
>> > closeness =: 4 %~ 2 %~ (+ |:) ClosenessMean + ClosenessStdDev *
>> rand_norm
>> > (ppl,ppl) $ 0
>> > risk =: closeness - closeness * =i.ppl
>> > NB. risk =: (ppl,ppl)$0
>> >
>> > NB. 0 = Dead
>> > NB. 1 = Susceptible
>> > NB. 2 = Exposed
>> > NB. 3 = Infectious
>> > NB. 4 = Recovered
>> > starting_pop =: 2 , (ppl - 1) $ 1
>> >
>> > infect =: 3 : 0
>> > can_spread =. (1&< *. 4&>) y
>> > susceptible =. y = 1
>> > exposed     =. y = 2
>> > infectious  =. y = 3
>> > recovered   =. y = 4
>> >
>> > infectiousness =. can_spread ,./ . * risk
>> >
>> > susceptible_to_exposed =. (Beta * susceptible) * (+/ can_spread) %~ +/
>> |:
>> > susceptible * infectiousness
>> > exposed_to_infectious =. Sigma * exposed
>> > infectious_to_recovered =. Gamma * infectious
>> > infectious_to_dead =. D * infectious
>> > recovered_to_susceptible =. Xi * recovered
>> >
>> > 1 (I.recovered_to_susceptible>?ppl$0)} 4
>> > (I.infectious_to_recovered>?ppl$0)} 0 (I.infectious_to_dead>?ppl$0)} 3
>> > (I.exposed_to_infectious>?ppl$0)} 2 (I.susceptible_to_exposed>?ppl$0)} y
>> > )
>> >
>> > infect_display =: 3 : 0
>> > out =. infect y
>> > smoutput out
>> > smoutput
>> >
>> ('Susceptible';'Exposed';'Infectious';'Recovered';'Dead'),:(+/1=out);(+/2=out);(+/3=out);(+/4=out);(+/0=out)
>> > out
>> > )
>> >
>> > On Fri, 27 Mar 2020 at 14:24, Robert Herman <[email protected]>
>> wrote:
>> >
>> >> I found this article:
>> >>
>> >> Modeling the COVID-19 Outbreak with J
>> >> <
>> https://datakinds.github.io/2020/03/15/modeling-the-coronavirus-outbreak-with-j
>> >
>> >>
>> >> I took the author's code, which is a modified SEIR model
>> (The_SEIR_model
>> >> <
>> https://en.wikipedia.org/wiki/Compartmental_models_in_epidemiology#The_SEIR_model
>> >),
>> >> and updated some of the data and recalculated the variables. I then
>> >> pilfered some of Michal's (Tangentstorm, you rock!) code for animating
>> >> things in J from his talks. This is helping me to push my learning of
>> J,
>> >> and keep it interesting.
>> >>
>> >> Two disclaimers: The author of the linked article doesn't claim to be
>> an
>> >> epidemiologist, and I am only doing this to learn J, and cannot
>> comment on
>> >> any of the validity of the algorithm or simulations it produces.
>> >>
>> >> Now, on to my two issues (full code at end):
>> >>
>> >> 1. I know I have to figure out a way to have the* infect_display^:144
>> >> starting population* call feed the *update* loop, otherwise it is
>> trying
>> >> to run all 144 days of simulation in one call to update at a frequency
>> set
>> >> by *wd 'timer 600'*. I am working on this, and realize I somehow have
>> to
>> >> run it outside of update, and then feed update "a day at a time". The
>> goal
>> >> is to see the same person (grid location) evolve over the simulation. I
>> >> know this is simple, but i haven't gotten there yet. Any tips will be
>> >> appreciated!
>> >>
>> >> 2. When I had initially set up the code to run 25 people instead of
>> 144,
>> >> the color index I had setup with the DSEIR variable exhibit two strange
>> >> glitches. First, squares that were supposed to be 1=White, were
>> rendering
>> >> as 0=Black=Dead, and sometimes colors appeared "blended". An yellowish,
>> >> off-white for yellow, and at times bright yellow. When I went to 144
>> people
>> >> and it is trying to run in update, the grid appears to be correctly
>> >> indexing and not moving askew from frame to frame, but the colors are
>> >> inconsistent.
>> >>
>> >> BTW, thanks to Linda's article in Journal of J - Vol.4, No.1 for the
>> RGB
>> >> list to then pull my desired colors from in the DSEIR variable (Dead,
>> >> Susceptible, Exposed, Infectious, Recovered):
>> >>
>> >> *RGB=: (#:i.8) { 0 255*
>> >>
>> >>
>> >> *DSEIR =: (0 7 6 4 2 { RGB)*
>> >>
>> >> Here is my integration of the two sources of code to try and animate
>> the
>> >> outbreak per the article, and thanks!:
>> >>
>> >> *load 'viewmat'*
>> >>
>> >> *coinsert'jgl2'*
>> >>
>> >>
>> >> *wd 'pc Covid-19-Sim closeok' NB. parent control (window) named 'w0'*
>> >>
>> >> *wd 'minwh 500 500; cc g0 isidraw;' NB. add an 'isidraw' child control
>> >> named 'g0'*
>> >>
>> >> *wd 'pshow; pmove 40 510 0 0' NB. show the window at the given
>> >> coordinates.*
>> >>
>> >> *wd 'sm focus term' NB. session manager: bring terminal to front*
>> >>
>> >> *wd 'psel Covid-19-Sim; ptop' NB. bring our window to front*
>> >>
>> >>
>> >> *vmcc =: viewmatcc_jviewmat_ NB. viewmat to a child control*
>> >>
>> >>
>> >> *step =: render @ update NB. each step, we'll call those two in
>> sequence*
>> >>
>> >>
>> >> *RGB=: (#:i.8) { 0 255*
>> >>
>> >>
>> >> *DSEIR =: (0 7 6 4 2 { RGB)*
>> >>
>> >>
>> >> *update =: verb define*
>> >>
>> >> * im =: 12 12 $ infect_display^:144 starting_pop*
>> >>
>> >> *)*
>> >>
>> >>
>> >> *render =: verb define*
>> >>
>> >> * DSEIR vmcc im;'g0'*
>> >>
>> >> * glpaint''*
>> >>
>> >> *)*
>> >>
>> >>
>> >> *sys_timer_z_ =: step_base_*
>> >>
>> >> *wd 'timer 600'*
>> >>
>> >>
>> >> *ppl =: 144 NB. How many people are in our simulation?*
>> >>
>> >>
>> >> *Beta =: 0.106271 NB. The rate at which susceptible people become
>> exposed.
>> >> RPH - dependent on R0 = 2.2 3/25/2020*
>> >>
>> >> *Sigma =: 0.066967 NB. The rate at which exposed people become
>> infectious.
>> >> RPH - (1-sigma)^10=0.5, 10 is incubation period.*
>> >>
>> >> *Gamma =: 0.056126 NB. The rate at which infectious people recover.
>> RPH -
>> >> adjusted to 12 days, so (1-Gamma)^12=0.5.*
>> >>
>> >> *Xi =: 0.02284 NB. The rate at which recovered people lose immunity and
>> >> become susceptible. RPH - 30 days*
>> >>
>> >> * NB. is partially based upon man on Diamond Princess who presented
>> >> symptoms around 30 days otherwise made up.*
>> >>
>> >> *R =: 2.2 NB. How many people will 1 person infect? RPH - based on
>> latest
>> >> CDC estimate 3/25/2020*
>> >>
>> >> *CFR =: 0.015 NB. Case Fatality Rate - RPH based upon 0.25% to 3% from
>> >> CDC, so 1.5% is higher than average.*
>> >>
>> >> *D =: 0.0011619 NB. Death rate per day while symptomatic - RPH based
>> upon
>> >> 13 days to death as seen and per CDC.*
>> >>
>> >>
>> >> *ClosenessStdDev =: 5 % 3*
>> >>
>> >> *ClosenessMean =: 1*
>> >>
>> >>
>> >> *rand_norm =: 3 : '(2&o. 2p1 * ? y) * %: _2 * ^. ? y'*
>> >>
>> >> *closeness =: 4 %~ 2 %~ (+ |:) ClosenessMean + ClosenessStdDev *
>> rand_norm
>> >> (ppl,ppl) $ 0*
>> >>
>> >> *risk =: closeness - closeness * =i.ppl *
>> >>
>> >> *NB. risk =: (ppl,ppl)$0*
>> >>
>> >>
>> >> *NB. 0 = Dead*
>> >>
>> >> *NB. 1 = Susceptible*
>> >>
>> >> *NB. 2 = Exposed*
>> >>
>> >> *NB. 3 = Infectious*
>> >>
>> >> *NB. 4 = Recovered*
>> >>
>> >> *starting_pop =: 2 , (ppl - 1) $ 1*
>> >>
>> >>
>> >> *infect =: 3 : 0*
>> >>
>> >> * can_spread =. (1&< *. 4&>) y*
>> >>
>> >> * susceptible =. y = 1*
>> >>
>> >> * exposed =. y = 2*
>> >>
>> >> * infectious =. y = 3*
>> >>
>> >> * recovered =. y = 4*
>> >>
>> >>
>> >> * infectiousness =. can_spread ,./ . * risk*
>> >>
>> >>
>> >> * susceptible_to_exposed =. (Beta * susceptible) * (+/ can_spread) %~
>> +/
>> >> |: susceptible * infectiousness*
>> >>
>> >> * exposed_to_infectious =. Sigma * exposed*
>> >>
>> >> * infectious_to_recovered =. Gamma * infectious*
>> >>
>> >> * infectious_to_dead =. D * infectious*
>> >>
>> >> * recovered_to_susceptible =. Xi * recovered*
>> >>
>> >> * 1 (I.recovered_to_susceptible>?ppl$0)} 4
>> >> (I.infectious_to_recovered>?ppl$0)} 0 (I.infectious_to_dead>?ppl$0)} 3
>> >> (I.exposed_to_infectious>?ppl$0)} 2 (I.susceptible_to_exposed>?ppl$0)}
>> y*
>> >>
>> >> *)*
>> >>
>> >>
>> >> *infect_display =: 3 : 0*
>> >>
>> >> * out =. infect y*
>> >>
>> >> * smoutput out*
>> >>
>> >> * smoutput
>> >>
>> ('Susceptible';'Exposed';'Infectious';'Recovered';'Dead'),:(+/1=out);(+/2=out);(+/3=out);(+/4=out);(+/0=out)*
>> >>
>> >> * out*
>> >>
>> >> *)*
>> >>
>> >>
>> > ----------------------------------------------------------------------
>> > For information about J forums see http://www.jsoftware.com/forums.htm
>>
>> ----------------------------------------------------------------------
>> For information about J forums see http://www.jsoftware.com/forums.htm
>>
>
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to