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.jlreplacing.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:
-
Diceis William Nordhaus’ Dice model; the implementation of it was found here and is theDICE-heur-7-PLE.mdlversion (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). -
lotkais the simple Lotka-Voltera predation model, found here. -
commitmentis a model that is based on an ArXiv paper. The model was published on this blog post. -
community corona 8is a model representing the evolution of the coronavirus in a community, and the effectiveness of some method. See this blog post.
if_then_elseEXPLOGGAME(will not cause an error but not implemented, as there is no interactive mode yet)SMOOTHSMOOTHiSTEPMAXMINLNABSCOSARCCOSSINARCSINTANARCTANGAMMA_LNMODULOSMOOTH3PULSERAMPSMOOTH3iDELAY1DELAY1I
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}
}