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.