Skip to content

Commit

Permalink
Bugfix: update propensities once during initialization
Browse files Browse the repository at this point in the history
  • Loading branch information
johnsekar committed May 10, 2022
1 parent 4188137 commit 7f93e6e
Show file tree
Hide file tree
Showing 4 changed files with 50 additions and 6 deletions.
6 changes: 3 additions & 3 deletions examples/simple_addremove/model.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from wc_rules.schema.entity import Entity
from wc_rules.graph.collections import GraphContainer, GraphFactory
from wc_rules.modeling.pattern import Pattern,SimpleObservable
from wc_rules.modeling.rule import InstanceRateRule
from wc_rules.modeling.rule import InstanceRateRule, Rule
from wc_rules.modeling.model import RuleBasedModel

class X(Entity):
Expand All @@ -21,15 +21,15 @@ def __init__(self,name):
gx,gy,gz = [GraphFactory([C(c)]) for C,c in [(X,'x'),(Y,'y'),(Z,'z')]]
px,py,pz = [Pattern(x) for x in [gx,gy,gz]]

r1 = InstanceRateRule(
r1 = Rule(
name = 'adding_x',
factories = {'px':gx},
actions = ['add(px)'],
rate_prefix = 'k1',
parameters = ['k1']
)

r2 = InstanceRateRule(
r2 = Rule(
name = 'adding_y',
factories = {'py':gy},
actions = ['add(py)'],
Expand Down
42 changes: 42 additions & 0 deletions tests/simulator/simdata.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
{
"time": 0.0,
"observables": {
"binding_model.binding_rule.propensity": 100.0,
"binding_model.unbinding_rule.propensity": 0,
"binding_model.x": 10,
"binding_model.y": 10,
"binding_model.xy": 0
Expand All @@ -10,6 +12,8 @@
{
"time": 0.1,
"observables": {
"binding_model.binding_rule.propensity": 49.0,
"binding_model.unbinding_rule.propensity": 3.0,
"binding_model.x": 7,
"binding_model.y": 7,
"binding_model.xy": 3
Expand All @@ -18,6 +22,8 @@
{
"time": 0.2,
"observables": {
"binding_model.binding_rule.propensity": 36.0,
"binding_model.unbinding_rule.propensity": 4.0,
"binding_model.x": 6,
"binding_model.y": 6,
"binding_model.xy": 4
Expand All @@ -26,6 +32,8 @@
{
"time": 0.30000000000000004,
"observables": {
"binding_model.binding_rule.propensity": 25.0,
"binding_model.unbinding_rule.propensity": 5.0,
"binding_model.x": 5,
"binding_model.y": 5,
"binding_model.xy": 5
Expand All @@ -34,6 +42,8 @@
{
"time": 0.4,
"observables": {
"binding_model.binding_rule.propensity": 16.0,
"binding_model.unbinding_rule.propensity": 6.0,
"binding_model.x": 4,
"binding_model.y": 4,
"binding_model.xy": 6
Expand All @@ -42,6 +52,8 @@
{
"time": 0.5,
"observables": {
"binding_model.binding_rule.propensity": 16.0,
"binding_model.unbinding_rule.propensity": 6.0,
"binding_model.x": 4,
"binding_model.y": 4,
"binding_model.xy": 6
Expand All @@ -50,6 +62,8 @@
{
"time": 0.6,
"observables": {
"binding_model.binding_rule.propensity": 25.0,
"binding_model.unbinding_rule.propensity": 5.0,
"binding_model.x": 5,
"binding_model.y": 5,
"binding_model.xy": 5
Expand All @@ -58,6 +72,8 @@
{
"time": 0.7,
"observables": {
"binding_model.binding_rule.propensity": 16.0,
"binding_model.unbinding_rule.propensity": 6.0,
"binding_model.x": 4,
"binding_model.y": 4,
"binding_model.xy": 6
Expand All @@ -66,6 +82,8 @@
{
"time": 0.7999999999999999,
"observables": {
"binding_model.binding_rule.propensity": 9.0,
"binding_model.unbinding_rule.propensity": 7.0,
"binding_model.x": 3,
"binding_model.y": 3,
"binding_model.xy": 7
Expand All @@ -74,6 +92,8 @@
{
"time": 0.8999999999999999,
"observables": {
"binding_model.binding_rule.propensity": 9.0,
"binding_model.unbinding_rule.propensity": 7.0,
"binding_model.x": 3,
"binding_model.y": 3,
"binding_model.xy": 7
Expand All @@ -82,6 +102,8 @@
{
"time": 0.9999999999999999,
"observables": {
"binding_model.binding_rule.propensity": 9.0,
"binding_model.unbinding_rule.propensity": 7.0,
"binding_model.x": 3,
"binding_model.y": 3,
"binding_model.xy": 7
Expand All @@ -90,6 +112,8 @@
{
"time": 1.0999999999999999,
"observables": {
"binding_model.binding_rule.propensity": 4.0,
"binding_model.unbinding_rule.propensity": 8.0,
"binding_model.x": 2,
"binding_model.y": 2,
"binding_model.xy": 8
Expand All @@ -98,6 +122,8 @@
{
"time": 1.2,
"observables": {
"binding_model.binding_rule.propensity": 4.0,
"binding_model.unbinding_rule.propensity": 8.0,
"binding_model.x": 2,
"binding_model.y": 2,
"binding_model.xy": 8
Expand All @@ -106,6 +132,8 @@
{
"time": 1.3,
"observables": {
"binding_model.binding_rule.propensity": 4.0,
"binding_model.unbinding_rule.propensity": 8.0,
"binding_model.x": 2,
"binding_model.y": 2,
"binding_model.xy": 8
Expand All @@ -114,6 +142,8 @@
{
"time": 1.4000000000000001,
"observables": {
"binding_model.binding_rule.propensity": 9.0,
"binding_model.unbinding_rule.propensity": 7.0,
"binding_model.x": 3,
"binding_model.y": 3,
"binding_model.xy": 7
Expand All @@ -122,6 +152,8 @@
{
"time": 1.5000000000000002,
"observables": {
"binding_model.binding_rule.propensity": 9.0,
"binding_model.unbinding_rule.propensity": 7.0,
"binding_model.x": 3,
"binding_model.y": 3,
"binding_model.xy": 7
Expand All @@ -130,6 +162,8 @@
{
"time": 1.6000000000000003,
"observables": {
"binding_model.binding_rule.propensity": 9.0,
"binding_model.unbinding_rule.propensity": 7.0,
"binding_model.x": 3,
"binding_model.y": 3,
"binding_model.xy": 7
Expand All @@ -138,6 +172,8 @@
{
"time": 1.7000000000000004,
"observables": {
"binding_model.binding_rule.propensity": 9.0,
"binding_model.unbinding_rule.propensity": 7.0,
"binding_model.x": 3,
"binding_model.y": 3,
"binding_model.xy": 7
Expand All @@ -146,6 +182,8 @@
{
"time": 1.8000000000000005,
"observables": {
"binding_model.binding_rule.propensity": 9.0,
"binding_model.unbinding_rule.propensity": 7.0,
"binding_model.x": 3,
"binding_model.y": 3,
"binding_model.xy": 7
Expand All @@ -154,6 +192,8 @@
{
"time": 1.9000000000000006,
"observables": {
"binding_model.binding_rule.propensity": 9.0,
"binding_model.unbinding_rule.propensity": 7.0,
"binding_model.x": 3,
"binding_model.y": 3,
"binding_model.xy": 7
Expand All @@ -162,6 +202,8 @@
{
"time": 2.0000000000000004,
"observables": {
"binding_model.binding_rule.propensity": 9.0,
"binding_model.unbinding_rule.propensity": 7.0,
"binding_model.x": 3,
"binding_model.y": 3,
"binding_model.xy": 7
Expand Down
5 changes: 3 additions & 2 deletions wc_rules/matcher/initialize_methods.py
Original file line number Diff line number Diff line change
Expand Up @@ -195,7 +195,7 @@ def initialize_rule(self,name,rule):
self.add_channel_variable_update(source=pattern,target=node_name,variable=pname)

self.add_channel_variable_update(source=node_name,target='end',variable=node_name)

self.function_node_variable(self.get_node(core=f'{name}.propensity'),token={})

def initialize_rules(self,rules,parameters):
for name,value in parameters.items():
Expand All @@ -218,7 +218,8 @@ def initialize_observable(self,name,observable):
)
for pname,pattern in observable.helpers.items():
self.add_channel_variable_update(source=pattern,target=name,variable=pname)
self.add_channel_variable_update(source=name,target='end',variable=name)
self.add_channel_variable_update(source=name,target='end',variable=name)
self.function_node_variable(self.get_node(core=name),token={})
return self

def initialize_observables(self,observables):
Expand Down
3 changes: 2 additions & 1 deletion wc_rules/simulator/simulator.py
Original file line number Diff line number Diff line change
Expand Up @@ -172,7 +172,8 @@ def simulate(self,start=0.0,end=1.0,period=1,write_location=None):
return self

def write_observables(self,time,write_location):
write_location.append({'time':time,'observables':subdict(self.variables,self.observables)})
variables = [x.core for x in self.net.get_nodes(type='variable') if x.data.subtype=='recompute']
write_location.append({'time':time,'observables':subdict(self.variables,variables)})
return self


Expand Down

0 comments on commit 7f93e6e

Please sign in to comment.