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
>
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 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
)
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to