Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

WIP: initial guess at regnet support #30

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
119 changes: 119 additions & 0 deletions src/regnets.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
using SyntacticModels
using SyntacticModels.SyntacticModelsBase
using SyntacticModels.AMR
import SyntacticModels.AMR: nounit
using ACSets.ADTs
using MLStyle

@as_record struct Properties <: AbstractTerm
rate_constant::String
end

@as_record struct Edge <: AbstractTerm
id::String
source::String
target::String
sign::Bool
properties::Properties
end

@as_record struct Vertex <: AbstractTerm
id::String
name::String
grounding::Any
initial::String
rate_constant::String
sign::Bool
end

@data RegNet <: AbstractTerm begin
Edgelist(vertices::Vector{Vertex}, edges::Vector{Edge})
end

@as_record struct RegNetModel <: AbstractTerm
header::Header
model::RegNet
parameters::Vector{AMR.Parameter}
end


vertices = [
Vertex("R",
"Rabbits",
nothing,
"R0",
"alpha",
true),
Vertex("W",
"Wolves",
nothing,
"W0",
"gamma",
false)
]

edges = [
Edge(
"wolf_eats_rabbit",
"W",
"R",
false,
Properties("beta")),
Edge(
"rabbit_feeds_wolf",
"R",
"W",
true,
Properties("delta"))
]

parameters = [
Parameter(
:R0,
"Initial rabbit population",
nounit,
2.,
PointMass(2)
),
Parameter(
:W0,
"Initial wolf population",
nounit,
1.,
Uniform(.9,1.1)
),
Parameter(
:alpha,
"Maximum per capita prey growth rate",
nounit,
0.667,
PointMass(.667)
),
Parameter(
:beta,
"Effect of predators on prey",
nounit,
1.333,
PointMass(1.333)
),
Parameter(
:gamma,
"Effect of prey on predators",
nounit,
1.,
PointMass(1)
),
Parameter(
:delta,
"Maximum per capita predator death rate",
nounit,
1.,
PointMass(1.0)
)
]

rnm = RegNetModel(
Header("Lotka Volterra", "https://raw.githubusercontent.com/DARPA-ASKEM/Model-Representations/regnet_v0.2/regnet/regnet_schema.json", "regnet", "Lotka Volterra model", "0.1"),
Edgelist(vertices, edges),
parameters
)