I have created NetworkJumpProcesses.jl in order to combine the functionalities of JumpProcesses.jl and Graphs.jl, in a similar fashion to NetworkDynamics.jl.
The idea is to define some jumps (discrete state, continuous time, stochastic variables) for the vertices and for edges of an arbitrary Graph
, and the package functionality returns a JumpSet
which can be solved with JumpProcesses.jl
and DifferentialEquations.jl
.
The important functions are:
network_jump_set
: creates theJumpSet
given aGraph
, the jumps defined for vertices (vertex_reactions
), and the jumps defined for edges, (edge_reactions
). These last two can be each a vector of jumps, in which case all vertices or edges behave according to to the same reactions. An other option is that one or both is a vector of vectors. In this case the outer vector should have the same number of elements as vertices (vertex_reactions
) or edges (edge_reactions
) in the graph.dependency_graph, vartojumps, jumptovars
: these create the dependency graphs necessary for some aggregators.
As in JumpProcesses.jl
, the jumps are defined by a rate
and affect!
function.
The rate
returns a single number, while affect!
modifies the arguments directly.
In the case of a vertex the input arguments for both are
v
: state of the vertex itselfnhgbs
: state of the neighboursp
: model parameter valuest
: current timestep
In case of an edge the arguments are(vs, vd, p, t)
wherevs
resp.vd
are the source and destination vertex states.
To this point, I mainly implemented functionality for my own research, thus many limitations remain.
Some of the most important ones are:
- Directed graphs are not supported
- ContinuousJumps are not supported
- No states can be associated with edges
- The dependency graphs do only depend on the structure of the network, and not on the reactions themselves
- ā¦
While I want to keep developing the package, I do not want to put work in anything that nobody is going to use. So, if you have any interest, read the documentation, try some examples or contact me. Also, this this is all quiet new for me, so if you have any constructive feedback or pointers, Iām glad to hear it.