Vensim Translation

PySD parses a vensim ‘.mdl’ file and translates the result into python, creating a new file in the same directory as the original. For example, the Vensim file Teacup.mdl:

becomes Teacup.py:

This allows model execution independent of the Vensim environment, which can be handy for deploying models as backends to other products, or for performing massively parallel distributed computation.

These translated model files are read by PySD, which provides methods for modifying or running the model and conveniently accessing simulation results.

Translated Functions

Ongoing development of the translator will support the full subset of Vensim functionality that has an equivalent in XMILE. The current release supports the following functionality:

Vensim Python Translation
COS np.cos
EXP np.exp
MIN min
<= <=
STEP functions.step
PULSE functions.pulse
POISSON np.random.poisson
EXPRND np.random.exponential
SIN np.sin
>= >=
IF THEN ELSE functions.if_then_else
LN np.log
PULSE TRAIN functions.pulse_train
RAMP functions.ramp
INTEGER int
TAN np.tan
PI np.pi
= ==
< <
> >
MODULO np.mod
ARCSIN np.arcsin
ABS abs
^ **
LOGNORMAL np.random.lognormal
MAX max
SQRT np.sqrt
ARCTAN np.arctan
ARCCOS np.arccos
RANDOM NORMAL self.functions.bounded_normal
RANDOM UNIFORM np.random.rand
DELAY1 functions.Delay
DELAY3 functions.Delay
DELAY N functions.Delay
SMOOTH3I functions.Smooth
SMOOTH3 functions.Smooth
SMOOTH N functions.Smooth
SMOOTH functions.Smooth
INITIAL functions.Initial
XIDZ functions.XIDZ
ZIDZ functions.XIDZ
np corresponds to the numpy package

Additionally, identifiers are currently limited to alphanumeric characters and the dollar sign $.

Future releases will include support for:

  • subscripts
  • arrays
  • arbitrary identifiers

There are some constructs (such as tagging variables as ‘suplementary’) which are not currently parsed, and may throw an error. Future releases will handle this with more grace.