example_netlogo.py

 1"""
 2
 3This example is a proof of principle for how NetLogo models can be
 4controlled using pyNetLogo and the ema_workbench. Note that this
 5example uses the NetLogo 6 version of the predator prey model that
 6comes with NetLogo. If you are using NetLogo 5, replace the model file
 7with the one that comes with NetLogo.
 8
 9"""
10
11import numpy as np
12
13from ema_workbench import (
14    RealParameter,
15    ema_logging,
16    ScalarOutcome,
17    TimeSeriesOutcome,
18    MultiprocessingEvaluator,
19)
20from ema_workbench.connectors.netlogo import NetLogoModel
21
22# Created on 20 mrt. 2013
23#
24# .. codeauthor::  jhkwakkel
25
26
27if __name__ == "__main__":
28    # turn on logging
29    ema_logging.log_to_stderr(ema_logging.INFO)
30
31    model = NetLogoModel(
32        "predprey", wd="./models/predatorPreyNetlogo", model_file="Wolf Sheep Predation.nlogo"
33    )
34    model.run_length = 100
35    model.replications = 10
36
37    model.uncertainties = [
38        RealParameter("grass-regrowth-time", 1, 99),
39        RealParameter("initial-number-sheep", 50, 100),
40        RealParameter("initial-number-wolves", 50, 100),
41        RealParameter("sheep-reproduce", 5, 10),
42        RealParameter("wolf-reproduce", 5, 10),
43    ]
44
45    model.outcomes = [
46        ScalarOutcome("sheep", variable_name="count sheep", function=np.mean),
47        TimeSeriesOutcome("wolves"),
48        TimeSeriesOutcome("grass"),
49    ]
50
51    # perform experiments
52    n = 10
53
54    with MultiprocessingEvaluator(model, n_processes=-1, maxtasksperchild=4) as evaluator:
55        results = evaluator.perform_experiments(n)
56
57    print()