packages = ["numpy", "matplotlib", "pysd", "pandas",]
source = "# netCDF4"
with open('netCDF4.py', 'w') as f: f.write(source)
PyML with PySD System Dynamics Demonstrations
target = "sim_output"
import pysd
import matplotlib.pyplot as plot
def model_init(start, stop, dt):
global xmile_header, model, model_specs
xmile_header = f"""
Ray Madachy
Battle Simulator
PyML .20 dev
"""
model_specs = f"""
{stop}
{start}
{dt}
"""
model = ""
build_model()
def add_stock(name, initial, flows):
global model
model += f"""
{name}
"{flows}"
{initial}
"""
build_model()
def add_flow(name, equation):
global model
model += f"""
{name}
{equation}
"""
build_model()
def add_auxiliary(name, equation):
global model
model += f"""
{name}
{equation}
"""
build_model()
def build_model():
global xmile_string
xmile_closing = """
"""
model_string = """
""" + f"{model}" + """
"""
xmile_string = xmile_header + model_specs + model_string + xmile_closing
with open('test.xmile', 'w') as f:
f.write(xmile_string)
def model_run():
import pysd
global output
model = pysd.read_xmile('./test.xmile')
output = model.run(progress=False)
return(output)
#PyScript.write(target, output, append=True)
def plot_output(*outputs):
pyscript.write('plot_output', '', append=False)
global fig
for var in outputs:
fig, axis = plot.subplots(figsize=(5, 4))
axis.set(xlabel = 'Time', ylabel = var)
axis.plot(output.index, output[var].values, label=var)
axis.legend(loc="best", )
# plot.show()
pyscript.write('plot_output', fig, append=True)
#xmile_string = ""
model_init(start=0, stop=5, dt=.2)
add_stock("x", 1000, "x_attrition")
add_flow("x_attrition", "y*y_lethality")
add_auxiliary("x_lethality", .8)
add_stock("y", 800, "y_attrition")
add_flow("y_attrition", "x*x_lethality")
add_auxiliary("y_lethality", .9)
model_run()
#output
plot_output('x', 'y')
#model = pysd.read_xmile('test.xmile')
#output = model.run(progress=True)
#output