Alarm perturbations trigger abnormally with -mixture option
hmedina opened this issue · 1 comments
When taking the mixture from a snapshot via -mixture
, the internal clock should be fast-forwarded to the time declared in the mixture file. If perturbations in a different file use time, weird results happen. In the below, each code pod is in a different file. The perturbation calls for a snapshot at the end of the simulation.
Invocation:
KaSim -i foo_ruleset.ka -mixture foo_mixture.ka -i foo_perturbation.ka -d foo
Parsing foo_perturbation.ka...
done
Parsing foo_ruleset.ka...
done
+ simulation parameters
+ Sanity checks
Parsing foo_mixture.ka...
done
+ Compiling...
+ Building initial simulation conditions...
-variable declarations
-rules
-interventions
-observables
-update_domain construction
4 (sub)observables 0 navigation steps
-initial conditions
+ Self seeding...
+ Building initial state (1000 agents)
Done
+ Command line to rerun is: 'KaSim' '-i' 'foo_ruleset.ka' '-mixture' 'foo_mixture.ka' '-i' 'foo_perturbation.ka' '-d' 'foo' -seed 935530661
1.00 time units in 0 events
Simulation ended
foo_ruleset.ka:
%agent: A(l, r)
A(l[./1]), A(r[./1]) @ 1.0e-2 {1.0}
A(l[1/.]), A(r[1/.]) @ 1.0
%init: 1000 A()
foo_mixture.ka:
%def: "T0" "1"
%init: 1000 A(l, r)
foo_perturbation.ka:
%mod: alarm 4.0 do $STOP "snap.ka" ;
snap.ka:
// Snapshot [Event: 0]
// "uuid" : "574725003"
%def: "T0" "1"
%init: 1000 /*1 agents*/ A(l[.] r[.])
Kappa Simulator: v4.1-6-g89cf84617
Observations:
- Zero events; KaSim did nothing
1.00 time units in 0 events
but I requested a stop atalarm 4.0
- Word options usually take double dash, whereas letter options take single dash, and so
-mixture
makes my muscle memory trigger a syntax error Every. Single. Time. - The alarm for the mixture snapshot and the end-of-sim snapshot is the same
- If I run without that
--mixture
option, I get several thousand events byalarm 4.0
Update: the perturbation need not be in a different file.
With a model containing the perturbation line:
%mod: alarm 400.0 ([T] > 0) do $STOP "snap_T_400.ka" ;
The witness file correctly holds:
/*1*/%mod: alarm 400. ([T] > 0) do $STOP "snap_T_400.ka"; repeat [false]
And yet the requested snapshot snap_T_400.ka
has:
[...]
%def: "T0" "200"
[...]
If T0 remains at 200, why did the perturbation fire?