Growing ring with energy-driven moving agents - RuleBase

Growing ring with energy-driven moving agents

Author: Ricardo Honorato
tags: none

This model grows a one dimensional ring and inserts new agents on it which diffuse along the ring; the idea is that this is a simple model of receptor clustering in a growing system. The rates of diffusion rules are modulated by the change in system's energy they produce. In turn, the system's energy is related to the number of instance of two different connected components in the mixture, namely Mem(r!1, s!2), Mem(l!1, s!3), Sensor(m!2), Sensor(m!3), which represents a bond between Sensor agents, and Mem(r!1, s), Mem(l!1, r!2, s!3), Mem(l!2, s), Sensor(m!3), which is a free Sensor (entropic term).

The density of receptors in the ring over time is plotted below.

Simulation results

The syntax is KaSim's.

 

Download View code
%agent: Mem(l, r, s)
%agent: Sensor(m)

%var: '-1' 0 - 1
%var: 'kInsert' 2E-6
%var: 'D' 0.018
%var: 'h' 3
%var: 'kMove' 'D'/('h'^2)
%var: 'kGrow' 8E-6

%var: 'alpha' 1/2
%var: 'J' 5
%var: 'lambda' 0 - 1/2

'Insert' Mem(s) -> Mem(s!1), Sensor(m!1) @ 'kInsert'
'Grow' Mem(l!1), Mem(r!1) -> Mem(l!1), Mem(r!2), Mem(r!1, l!2) @ 'kGrow'

# Movements
#'MoveR' Mem(s!1, l!2), Sensor(m!1), Mem(r!2, s) -> Mem(s, l!2), Sensor(m!1), Mem(r!2, s!1) @ 'kMove'
'MoveR:010-10' Mem(r!1, s), Mem(l!1, r!2, s!_), Mem(l!2, r!3, s  ), Mem(l!3, r!4, s!9), Mem(l!4, r!5, s!_), Mem(l!5, s), Sensor(m!9) -> \
               Mem(r!1, s), Mem(l!1, r!2, s!_), Mem(l!2, r!3, s!9), Mem(l!3, r!4, s  ), Mem(l!4, r!5, s!_), Mem(l!5, s), Sensor(m!9) @ \
               'kMove' # dE = 0

'MoveR:010-11' Mem(r!1, s), Mem(l!1, r!2, s!_), Mem(l!2, r!3, s  ), Mem(l!3, r!4, s!9), Mem(l!4, r!5, s!_), Mem(l!5, s!_), Sensor(m!9) -> \
               Mem(r!1, s), Mem(l!1, r!2, s!_), Mem(l!2, r!3, s!9), Mem(l!3, r!4, s  ), Mem(l!4, r!5, s!_), Mem(l!5, s!_), Sensor(m!9) @ \
               'kMove' * [exp] ('lambda' * 'J' * 'alpha') # dE = aJ

'MoveR:110-10' Mem(r!1, s!_), Mem(l!1, r!2, s!_), Mem(l!2, r!3, s  ), Mem(l!3, r!4, s!9), Mem(l!4, r!5, s!_), Mem(l!5, s), Sensor(m!9) -> \
               Mem(r!1, s!_), Mem(l!1, r!2, s!_), Mem(l!2, r!3, s!9), Mem(l!3, r!4, s  ), Mem(l!4, r!5, s!_), Mem(l!5, s), Sensor(m!9) @ \
               'kMove' * [exp] ('lambda' * 'J' * '-1' * 'alpha') # dE = -aJ

'MoveR:110-11' Mem(r!1, s!_), Mem(l!1, r!2, s!_), Mem(l!2, r!3, s  ), Mem(l!3, r!4, s!9), Mem(l!4, r!5, s!_), Mem(l!5, s!_), Sensor(m!9) -> \
               Mem(r!1, s!_), Mem(l!1, r!2, s!_), Mem(l!2, r!3, s!9), Mem(l!3, r!4, s  ), Mem(l!4, r!5, s!_), Mem(l!5, s!_), Sensor(m!9) @ \
               'kMove' # dE = 0

'MoveR: 00-10' Mem(r!1, s), Mem(l!1, r!2, s  ), Mem(l!2, r!3, s!9), Mem(l!3, r!4, s!_), Mem(l!4, s), Sensor(m!9) -> \
               Mem(r!1, s), Mem(l!1, r!2, s!9), Mem(l!2, r!3, s  ), Mem(l!3, r!4, s!_), Mem(l!4, s), Sensor(m!9) @ \
               'kMove' * [exp] ('lambda' * 'J' * (1 - 2 * 'alpha')) # dE = J - 2aJ

'MoveR: 00-11' Mem(r!1, s), Mem(l!1, r!2, s  ), Mem(l!2, r!3, s!9), Mem(l!3, r!4, s!_), Mem(l!4, s!_), Sensor(m!9) -> \
               Mem(r!1, s), Mem(l!1, r!2, s!9), Mem(l!2, r!3, s  ), Mem(l!3, r!4, s!_), Mem(l!4, s!_), Sensor(m!9) @ \
               'kMove' * [exp] ('lambda' * 'J' * (1 - 'alpha')) # dE = J - aJ

'MoveR:010-0'  Mem(r!1, s), Mem(l!1, r!2, s!_), Mem(l!2, r!3, s  ), Mem(l!3, r!4, s!9), Mem(l!4, s), Sensor(m!9) -> \
               Mem(r!1, s), Mem(l!1, r!2, s!_), Mem(l!2, r!3, s!9), Mem(l!3, r!4, s  ), Mem(l!4, s), Sensor(m!9) @ \
               'kMove' * [exp] ('lambda' * 'J' * (2 * 'alpha' - 1)) # dE = -J + 2aJ

'MoveR:110-0'  Mem(r!1, s!_), Mem(l!1, r!2, s!_), Mem(l!2, r!3, s  ), Mem(l!3, r!4, s!9), Mem(l!4, s), Sensor(m!9) -> \
               Mem(r!1, s!_), Mem(l!1, r!2, s!_), Mem(l!2, r!3, s!9), Mem(l!3, r!4, s  ), Mem(l!4, s), Sensor(m!9) @ \
               'kMove' * [exp] ('lambda' * 'J' * ('alpha' - 1)) # dE = -J + aJ

'MoveR: 00-0'  Mem(r!1, s), Mem(l!1, r!2, s  ), Mem(l!2, r!3, s!9), Mem(l!3, s), Sensor(m!9) -> \
               Mem(r!1, s), Mem(l!1, r!2, s!9), Mem(l!2, r!3, s  ), Mem(l!3, s), Sensor(m!9) @ \
               'kMove' # dE = 0

#'MoveL' Mem(s!1, r!2), Sensor(m!1), Mem(l!2, s) -> Mem(s, r!2), Sensor(m!1), Mem(l!2, s!1) @ 'kMove'
'MoveL:01-010' Mem(r!1, s), Mem(l!1, r!2, s!_), Mem(l!2, r!3, s!9), Mem(l!3, r!4, s  ), Mem(l!4, r!5, s!_), Mem(l!5, s), Sensor(m!9) -> \
               Mem(r!1, s), Mem(l!1, r!2, s!_), Mem(l!2, r!3, s  ), Mem(l!3, r!4, s!9), Mem(l!4, r!5, s!_), Mem(l!5, s), Sensor(m!9) @ \
               'kMove' # dE = 0

'MoveL:01-011' Mem(r!1, s), Mem(l!1, r!2, s!_), Mem(l!2, r!3, s!9), Mem(l!3, r!4, s  ), Mem(l!4, r!5, s!_), Mem(l!5, s!_), Sensor(m!9) -> \
               Mem(r!1, s), Mem(l!1, r!2, s!_), Mem(l!2, r!3, s  ), Mem(l!3, r!4, s!9), Mem(l!4, r!5, s!_), Mem(l!5, s!_), Sensor(m!9) @ \
               'kMove' * [exp] ('lambda' * 'J' * '-1' * 'alpha') # dE = -aJ

'MoveL:11-010' Mem(r!1, s!_), Mem(l!1, r!2, s!_), Mem(l!2, r!3, s!9), Mem(l!3, r!4, s  ), Mem(l!4, r!5, s!_), Mem(l!5, s), Sensor(m!9) -> \
               Mem(r!1, s!_), Mem(l!1, r!2, s!_), Mem(l!2, r!3, s  ), Mem(l!3, r!4, s!9), Mem(l!4, r!5, s!_), Mem(l!5, s), Sensor(m!9) @ \
               'kMove' * [exp] ('lambda' * 'J' * 'alpha') # dE = aJ

'MoveL:11-011' Mem(r!1, s!_), Mem(l!1, r!2, s!_), Mem(l!2, r!3, s!9), Mem(l!3, r!4, s  ), Mem(l!4, r!5, s!_), Mem(l!5, s!_), Sensor(m!9) -> \
               Mem(r!1, s!_), Mem(l!1, r!2, s!_), Mem(l!2, r!3, s  ), Mem(l!3, r!4, s!9), Mem(l!4, r!5, s!_), Mem(l!5, s!_), Sensor(m!9) @ \
               'kMove' # dE = 0

'MoveL: 0-010' Mem(r!1, s), Mem(l!1, r!2, s!9), Mem(l!2, r!3, s  ), Mem(l!3, r!4, s!_), Mem(l!4, s), Sensor(m!9) -> \
               Mem(r!1, s), Mem(l!1, r!2, s  ), Mem(l!2, r!3, s!9), Mem(l!3, r!4, s!_), Mem(l!4, s), Sensor(m!9) @ \
               'kMove' * [exp] ('lambda' * 'J' * (2 * 'alpha' - 1)) # dE = -J + 2aJ

'MoveL: 0-011' Mem(r!1, s), Mem(l!1, r!2, s!9), Mem(l!2, r!3, s  ), Mem(l!3, r!4, s!_), Mem(l!4, s!_), Sensor(m!9) -> \
               Mem(r!1, s), Mem(l!1, r!2, s  ), Mem(l!2, r!3, s!9), Mem(l!3, r!4, s!_), Mem(l!4, s!_), Sensor(m!9) @ \
               'kMove' * [exp] ('lambda' * 'J' * ('alpha' - 1)) # dE = -J + aJ

'MoveL:01-00'  Mem(r!1, s), Mem(l!1, r!2, s!_), Mem(l!2, r!3, s!9), Mem(l!3, r!4, s  ), Mem(l!4, s), Sensor(m!9) -> \
               Mem(r!1, s), Mem(l!1, r!2, s!_), Mem(l!2, r!3, s  ), Mem(l!3, r!4, s!9), Mem(l!4, s), Sensor(m!9) @ \
               'kMove' * [exp] ('lambda' * 'J' * (1 - 2 * 'alpha')) # dE = J - 2aJ

'MoveL:11-00'  Mem(r!1, s!_), Mem(l!1, r!2, s!_), Mem(l!2, r!3, s!9), Mem(l!3, r!4, s  ), Mem(l!4, s), Sensor(m!9) -> \
               Mem(r!1, s!_), Mem(l!1, r!2, s!_), Mem(l!2, r!3, s  ), Mem(l!3, r!4, s!9), Mem(l!4, s), Sensor(m!9) @ \
               'kMove' * [exp] ('lambda' * 'J' * (1 - 'alpha')) # dE = J - aJ

'MoveL: 0-00'  Mem(r!1, s), Mem(l!1, r!2, s!9), Mem(l!2, r!3, s  ), Mem(l!3, s), Sensor(m!9) -> \
               Mem(r!1, s), Mem(l!1, r!2, s  ), Mem(l!2, r!3, s!9), Mem(l!3, s), Sensor(m!9) @ \
               'kMove' # dE = 0


%init: 1 (Mem(l!1, r!2), Mem(l!2, r!3), Mem(l!3, r!4), Mem(l!4, r!5), Mem(l!5, r!6), Mem(l!6, r!7), Mem(l!7, r!8), \
          Mem(l!8, r!9), Mem(l!9, r!10), Mem(l!10, r!1))

%obs: 'Mem' Mem()
%obs: 'Sensor' Sensor(m!_)
%plot: 'Sensor'/'Mem'