PPT - Max-Planck-Institut für Entwicklungsbiologie

advertisement
How to write a program for
pattern formation
Hans Meinhardt
Max-Planck-Institut für Entwicklungsbiologie
Tübingen / Germany
The activator-inhibitor mechanism:
how to read the equations
a
t
b
t
a  ba
2
 s
b
 a
2
 ra a  D a
 b
x
2
2
 s a  rb b  D b
2
x
2
 bb
Kybernetik 12, 30-39 (1972)
Using our standard equation it should be illustrated how to write a computer
program that simulates pattern formation.
First it should be mentioned that such equations are easy to read: The equations
describe the changes of the activator per time unit. The change of the activator
concentration depends on a non-linear positive feedback of the activator on its own
production; the inhibitor slows down the activator production. The activator displays
normal decay (- ra a) and diffusion. The inhibitor production also depends on the
activator concentration in a non-linear fashion. The diffusion of inhibitor is assumed
to be much more rapid than that of the activator (Db >> Da). The activatorindependent activator production ba is required to initiate the self-enhancing
process, e.g. during regeneration.
Flow diagram
To program such a reaction, one has to discretize the process; the space into
units (such as cells) and the time into small time steps. The computer has to
calculate the concentration change for each cell at each time step and add this
change to the existing concentrations. In this way we obtain the new distribution
after a certain time unit. Many such “iterations” gives the complete time course.
Setting parameters
Setting initial concentration
Calculating changes / new distributions
Display ?
How to code such a reaction?
The new concentrations in the cells have to be computed sequentially
from cell i = 1 to cell n (assuming a linear array of cells) :
1
i
n
This is the concentration change per time unit according to our original
equation:
a
t
a  ba
2
 s
b
 a
2
 ra a  D a
x
2
This equation has to be re-written as a difference equation: Thus, the
new concentration of a cell i ( i = 1…n) at the time t +1 (i.e., after a time
unit) is given by the old concentration plus the concentration change
according to the equation:
ai,t+1 = ai,t + si (ai,t2 + ba) /bi,t
– ra ai,t + Da ( ( ai-1,t - ai,t ) + (ai+1,i – ai,t ) )
Handling diffusion
Concentrations are stored in arrays, e.g. the activator in
ax(i) , i = 1…n; the actual local concentrations in the cell i are
stored in a, b.., e.g. a = ax(i) [Left cell => al (see below)]
Diffusion:
Da (aleft cell – aactual cell ) + Da (aright cell – aactual cell )
=>
Da ((al – a) + (ax(i+1) – a ))
al ax(i) ax(i+1)
1
i
n
Important: For calculating diffusion use always non-updated concentrations ! In
a sequential updating, the left cell will be already updated, the right cell not. This
leads to severe errors. To avoid this problem, the non-updated concentration a
is saved as al. During calculation for the next cell, al is used as activator
concentration in the left cell, which is the correct non-updated concentration.
Note that the present cell will be the left cell when the next cell is calculated.
Boundary condition
Special conditions have to be introduced for the cells at the boundaries as
they do not have left or right neighbors. Impermeable boundaries can be
introduced by assuming virtual cells to the left and to the right of the terminal
cells that have the same concentrations as the terminal cells:
Boundary condition: impermeable
al = ax(1)
1
ax(n+1) = ax( n)
n
(no exchange by diffusion takes place if two cells have the same concentrations,
i.e., nothing leaks out at the boundaries)
Danger: numerical instability
Be careful: the numerical value of the diffusion constant should not exceed a
certain limit, otherwise numerical instabilities will occur. In other words, the
time steps have to be small enough. In the two examples below a central cell
has the concentration one, the neighbors zero. With Da = 1 the central cell
would become negative (-2), the concentration of the two others would be
one, which is nonsense! In linear calculations Da should be not larger than
about 0.4.
Da = 1
Da = 0.33
The code for a BASIC-program
The updating has to proceed in a sequential way in a loop, i is the running
index, going from 1 to n (number of cells). First, the array values (e.g., ax(i)
for the activator) are stored as local concentrations (e.g., a). Then, the new
concentration depending only on the decay and diffusion is calculated (e.g.,
olddecaydiffuseA), followed by the change due to the reaction.
FOR i = 1 TO n' i = current cell, n = right cell
a = ax(i) 'local activator-concentration
b = bx(i) 'local inhibitor-concentration
s = sx(i) 'local ability to perform the pattern-forming reaction
‘REM olddecaydiffA contains the new concentration considering diffusion and decay
olddecaydiffA = a - RA * a + DA * ((al - a) + (ax(i + 1) - a))
olddecaydiffB = b - RB * b + DB * ((bl - b) + (bx(i + 1) - b))
‘ adding the concentration change based on the reaction:
ax(i) = olddecaydiffA + s * (a * a + ba) / b ’ updating of the activator
bx(i) = olddecaydiffB + s * a * a
‘ updating the inhibitor concentration
al = a: bl = b 'The not yet changed concentrations are used as left cell
'concentrations when the subsequent cell is calculated
NEXT i
Activator-Inhibitor Mechanism:
Thus, the concentration change per time unit as used in the original equation…
a
t
a  ba
2
 s
b
 a
2
 ra a  D a
x
2
…and the code for the new concentrations after a time unit loo very similar
and are thus easy to read:
ax(i) = olddecaydiffA + s * (a * a + ba) / b
bx(i) = olddecaydiffB + s * a * a
To obtain a running program, few additional
things have to be done:
1. Setting parameters
KT = 100 'Number of displays
KP = 20 ' number of iterations between the displays
‘( KT * KP = number of iterations in total)
n = 40 ' number of cells
DA = .01 ' Diffusion of the activator
RA = .02 ' Removal rate of the activator
BA = .001 ' Activator-independent activator production rate
DB = .4 ' Diffusion of the inhibitor
RB = .03 ' Removal rate of the inhibitor
’ 2. ------- Setting the initial conditions -------------------------KR = 0: AA = 1.2: GA = 1
REM KR = 1: AA = 1: GA = 1 ' removal of the REM{ark} leads
' initiation by random fluctuations
FOR i = 1 TO n
s(i) = RA * (.99 + KR / 100 * RND)'"Source density" = Production of the
'activator, proportional to the decay rate + KR% fluctuation
ax(i) = GA'general initial activator concentration
bx(i) = 1'general initial inhibitor concentration
NEXT
To obtain a running program, few additional
things have to be done:
‘3. setting boundary conditions (impermeable)
al = ax(1): bl = bx(1): 'al is the concentration in the cell left of the
' actual cell. Left-most cell = virtual cell with the same concentration
ax(n + 1) = ax(n)' concentration in a virtual cell to the right of the
bx(n + 1) = bx(n)' right-most cell is equal to the concentration in the
‘right terminal cell
plott: ' REM ----------------Plot ------------LINE (20, 45)-(620, 50), 1, BF
x1 = 20' Position of the first rectangle
FOR i = 1 TO n
x2 = x1 + idx
afl = 51 + ax(i) * fa: LINE (x1, 51)-(x2, afl), 2, BF'green=activator
LINE (x1, afl)-(x2, 450), 15, BF 'remaining part white: erase old plot
bfl = 51 + bx(i) * fb: LINE (x1, bfl)-(x2, bfl + 10), 12, BF
sfl = 51 + s(i) * fs: LINE (x1, sfl)-(x2, sfl + 3), 1, BF
x1 = x2:
NEXT
IF itot >= KT OR INKEY$ > "" GOTO alldone
This is the essential part
of the program
FOR iprint% = 1 TO KP' Calculations between plots
‘-----------' BOUNDARIES IMPERMEABLE -----------al = ax(1): bl = bx(1): 'al is the concentration in the cell left of the
' actual cell. Left-most cell = virtual cell with the same concentration
ax(n + 1) = ax(n)' concentration in a virtual cell to the right of the
bx(n + 1) = bx(n)' right-most cell is equal to the concentration in the
REM ---------- Reactions -----FOR i = 1 TO n' i = current cell, n = right cell
a = ax(i) 'local activator-concentration
b = bx(i) 'local inhibitor1-concentration
REM ----- Calculation of a new activator and inhibitor concentration in cell i
olddecaydiffA = a * (1 - RA) + DA * ((al - a) + (ax(i + 1) - a))
olddecaydiffB = b * (1 - RB) + DB * ((bl - b) + (bx(i + 1) - b))
ax(i) = olddecaydiffA + s(i) * (a * a + ba) / b
bx(i) = olddecaydiffB + s(i) * a * a
al = a: bl = b 'The not yet changed concentrations are used as left cell
'concentrations in the subsequent cell
NEXT i
NEXT iprint%
Itot = itot + 1: GOTO plott
'-----------------------------------------------------------' A simple program to simulate biological pattern formation
' (C) Hans Meinhardt, MPI Tuebingen
DEFDBL A-G
DEFDBL O-Z
DEFINT H-N
DEFINT H-N
' A simple program to simulate biological pattern formation
' (C) Hans Meinhardt, MPI Tuebingen
' i = 1 ... n= Nsumber of cell
imax = 640: DIM ax(imax), bx(imax), cx(imax), s(imax)
start:
'Parameter
KT = 100 'Number of displays
KP = 20 ' 'number of iterations between the displays
'KT*KP = number of iterations in total
n = 40' number of cells
DA = .01' Diffusion of the activator
RA = .02' Removal rate of the activator
BA = .001 ' Activator-independent activator production rate
DB = .4' Diffusion of the inhibitor
RB = .03' Removal rate of the inhibitor
fa = 60: fb = 40' Scaling factors for display
KR = 0: AA = 1.2: GA = 1
REM KR = 1: AA = 1: GA = 1 ' removal of the REM{ark} leads
' initiation by random fluctuations
REM ----------- Initial conditions -------------------------FOR i = 1 TO n
s(i) = RA * (.99 + KR / 100 * RND)'"Source density" = Production of the
'activator, proportional to the decay rate +KR% fluctuation
ax(i) = GA ‘ general initial activator concentration
bx(i) = 1
‘ general initial inhibitor concentration
NEXT
ax(n / 3) = AA ‘ initial perturbation
SCREEN 12: t = TIMER: CLS 'Initialization of graphic and timing
WINDOW (1, 1)-(640, 480) ' coordinate system
LINE (1, 1)-(640, 480), 15, BF 'background white
igraph = 1
continuo: ' if calculation is continued...
idx = 600 / n: fs = 350 / RA 'Pixel-size of a cell
itot = 0
plott: ' REM ----------------Plot ------------LINE (20, 45)-(620, 50), 1, BF
x1 = 20' Position of the first rectangle
FOR i = 1 TO n
x2 = x1 + idx
afl = 51 + ax(i) * fa: LINE (x1, 51)-(x2, afl), 2, BF'green=activator
LINE (x1, afl)-(x2, 450), 15, BF 'remaining part white: erase old plot
bfl = 51 + bx(i) * fb: LINE (x1, bfl)-(x2, bfl + 10), 12, BF
sfl = 51 + s(i) * fs: LINE (x1, sfl)-(x2, sfl + 3), 1, BF
x1 = x2:
This is the complete
program for copy and
paste
On our website one can find information how
to find the (free) FreeBasic compiler and an
appropriate editor
http://www.eb.tuebingen.mpg.de/de/forschung/emeriti/hans-meinhardt/biuprom.html
…and these are screenshots from the display
Green = activator a
Red = Inhibitor b
Blue = source density of competence s
(in this case without random fluctuations, thus a
local perturbation is required for initiation.
For more information, visit our website
http://www.eb.tuebingen.mpg.de/meinhardt
Academic Press (1982)
Awailable for download
Download