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()