This package provides a function Vensim2MTK
that can produce a Julia file of a model using ModelingToolkit from an exported Vensim model.
Usage of the function: The function takes 3 arguments:
filepath
: the path to the Vensim file that one wants to translate. Default to./examples/Dice.xmile
.filename
: the name of the output file. Default to the name of the input file with the extension.jl
replacing.xmile
.overwrite
: boolean argument that indicate in the case of the file already existing, if the function aborts or overwrite it(true to overwrite).
Example of use:
using Vensim2MTK
filepath= "path/to/a/vensim/model/model.xmile"
filename= "MTKmodel.jl"
overwrite = false
vensim2MTK(filepath, filename, overwrite)
This code will write in the file MTKmodel.jl
an implementation in ModelingToolkit of the model exported in model.xmile
from the Vensim app.
There are currently 4 models used as examples for the parser: DICE, lotka, commitment and community corona 8. Here is a quick explanation of each as well as where we found them:
-
Dice
is William Nordhaus’ Dice model; the implementation of it was found here and is theDICE-heur-7-PLE.mdl
version (as Vensim has some issues with exporting some models as xmile files, some version of the models used may not work. Usually, the .mdl works with no issue). -
lotka
is the simple Lotka-Voltera predation model, found here. -
commitment
is a model that is based on an ArXiv paper. The model was published on this blog post. -
community corona 8
is a model representing the evolution of the coronavirus in a community, and the effectiveness of some method. See this blog post.
if_then_else
EXP
LOG
GAME
(will not cause an error but not implemented, as there is no interactive mode yet)SMOOTH
SMOOTHi
STEP
MAX
MIN
LN
ABS
COS
ARCCOS
SIN
ARCSIN
TAN
ARCTAN
GAMMA_LN
MODULO
SMOOTH3
PULSE
RAMP
SMOOTH3i
DELAY1
DELAY1I
If some variables need to be initialised by other variables that are not directly initialised, the program automatically initialises them with a default value (42). It is necessary to replace these with values that are at least not too far away from the real ones; just so that the model runs correctly without failing. It is then possible to obtain the true initial value and replace these arbitrary values with those calculated by ModelingToolkit; then re-run the model, obtaining from now on the real values for the whole model.
It is necessary to make sure the model that is to be parsed does not contain special characters in it's variable name. The special characters mentioned are:
"
,-
,(
,)
,+
,/
,*
,^
,=
,!
,{
,[
,]
,}
and ,
.
@software{emanuele_natale_vensim2mtk_2023,
author = {Emanuele Natale and
Maël Clergue},
title = {Vensim2MTK.jl: v0.1.0},
month = july,
year = 2023,
publisher = {Zenodo},
version = {v0.1.0},
doi = {10.5281/zenodo.8179079},
url = {https://doi.org/10.5281/zenodo.8179079}
}