knitr::opts_chunk$set( collapse = TRUE, comment = "#>", fig.path = "README-" )
An R wrapper for pysd, using the CRAN reticulate package.
The goal of this package is to allow R users run system dynamics models using pysd, (designed and developed by James Houghton). The pysd project "is a simple library for running System Dynamics models in python, with the purpose of improving integration of Big Data and Machine Learning into the SD workflow."
The pysd system must be installed before installing this package: see pysd installation instructions
pysd2r has been tested with python3, and the following command was used to install pysd from source.
python3 setup.py install
Given R's facility for also providing big data and machine learning support, this package opens up the functionality of pysd for R users, and provides an interface to the basic set of methods provided by pysd, including the functions:
The API provide by pysd2r includes the following functions (for list of parameters type ?function_name in R) which call the mapping functions in pysd.
You can install pysd2r from github with:
# install.packages("devtools") devtools::install_github("JimDuggan/pysd2r")
The following example shows how pysd2r can be used to run a simulation model (Population.mdl which is a one-stock Vensim model of population growth).
## basic example code library(pysd2r) library(ggplot2) target <- system.file("models/vensim", "Population.mdl", package = "pysd2r") py <- pysd_connect() py <- read_vensim(py, target) results <- run_model(py) l <- list("Growth Fraction"=0.02) set_components(py,l) out2 <- run_model(py) ggplot(data=results)+ geom_point(aes(x=TIME,y=Population),colour="blue")+ geom_point(data=out2,aes(x=TIME,y=Population),colour="red")
The following example shows how pysd2r can be used to run an ensemble of simulations.
library(pysd2r) library(ggplot2) library(plyr) library(dplyr) target <- system.file("models/vensim", "Population.mdl", package = "pysd2r") gr <- seq(0.01,0.04,by=0.0025) py <- pysd_connect() py <- read_vensim(py, target) ans <- lapply(gr, function (g){ l <- list("Growth Fraction"=g) set_components(py,l) out <- run_model(py) out$Key <- paste0("GR=",g) out <- select(out,TIME,Population,Key) }) full <- rbind.fill(ans) ggplot(data=full)+ geom_point(aes(x=TIME,y=Population,colour=Key))
Acknowledgements This project gratefully acknowledges the support of the Bill & Melinda Gates Foundation – Grand Challenges Explorations Initiative, Award Reference #OPP1182305, "HealthSIM: A Supply Chain Simulator for Supply Chains."
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.