Introduction to Computational Modeling of Social Systems RePast Tutorial IV Prof. Lars-Erik Cederman Center for Comparative and International Studies (CIS) Seilergraben 49, Room G.2, lcederman@ethz.ch Nils Weidmann, CIS Room E.3, weidmann@icr.gess.ethz.ch http://www.icr.ethz.ch/teaching/compmodels Lecture, January 11, 2005
Today’s agenda 2 • More on the GUI mode… – Probes – How to create property descriptors – How to create custom actions • Introducing the batch mode – How to use parameters and parameter files – How to collect data • ExperIPD
Probes 3 • Probes allow the user to view and manipulate single agents • Require the display surface to be “probeable” • Variables become available through introspection using the get-set-methods (with set-methods necessary for changes)
How to create property descriptors 4 • To adjust parameters at startup or when the simulation is paused • Can be applied to both models and agents • Setup through the pre- defined descriptors variable of SimpleModel
How to create property descriptors (cont.) 5 • Drop-down list: public void setup() { super .setup(); Hashtable h1 = new Hashtable(); h1.put( new Integer(0), "Von Neumann"); h1.put( new Integer(1), "Moore"); ListPropertyDescriptor pd = new ListPropertyDescriptor("Type", h1); descriptors.put("Type", pd); } public void setType( int type) { this .type = type; }
How to create property descriptors (cont.) 6 • Numerical slider: public void setup() { super .setup(); RangePropertyDescriptor d = new RangePropertyDescriptor("NumAgents", 10, 100, 20); descriptors.put("NumAgents", d); } public void setNumAgents( int numAgents) { this .numAgents = numAgents; }
How to create custom actions 7 • Modify the simulation while it is running • Setup through modelManipulator variable of SimpleModel • Works for buttons, check boxes, sliders, and arbitrary Java components
How to create custom actions (cont.) 8 • modelManipulator.addButton("Clear Space", new ActionListener() { public void actionPerformed(ActionEvent e){ space.clear(); } }); • modelManipulator.addSlider("Slider", 0, 100, 10, new SliderListener()); • modelManipulator.addCheckBox("Show/Hide", new CheckBoxListener(), false ); • modelManipulator.addComponent(Component c);
Failed invasion of TFT in ALLD-World 9 ALLD: ALLD ALLD ALLD 4+4+4+8 = 5.0 4 3 4 3 3 4 8 ALLD TFT ALLD TFT: 3 4 3+3+3+3 = 3.0 4 ALLD ALLD ALLD
Successful invasion of two TFT players in ALLD-World 10 ALLD: ALLD ALLD ALLD ALLD 4+4+4+8 = 5.0 4 3 3 4 3 12 3 4 12 8 ALLD TFT TFT ALLD TFT: 3 3 4 3+3+3+12 = 5.25 4 ALLD ALLD ALLD ALLD
Further spread of TFT players in ALLD- World 11 ALLD TFT TFT ALLD TFT TFT TFT TFT ALLD TFT TFT ALLD
Separating GUI and batch modes 12 Model extends SimpleModel GraphIPD,GridIPD ExperIPD ModelGUI ModelBatch extends extends Model Model
Subclassing a batch model 13 class ModelBatch extends Model{ Batch variables (data recorder) class Model extends SimpleModel { setup() { model variables super .setup(); params = ... setup() } buildModel() buildModel() { super .buildModel(); step() create data recorder } main() } step() { super .step(); Batch record data mode } main() { Parameter init.loadModel(m, file "params.txt", true ); } }
How to use parameters 14 • Different purpose depending on context: – Batch mode: allow variables to be changed through parameter files – GUI mode: show the variables in the control panel public void setup() { super .setup(); params = {"NumPlayers", "PALLC", "PTFT", "PATFT", "PALLD", "PAdapt"}; }
How to use parameters (cont.) 15 • Requires accessor methods: public void setup() { super .setup(); params = {"Variable", ...} } public double getVariable() { Setters only return value; required to allow } modification public void setVariable( double value) { this .value = value; }
How to use parameter files 16 • Different effects depending on context: – GUI mode: set initial values – Batch mode: allow to run sweeps • Usually defined in a file named params.txt • Runs the simulation with values of 10, 20, and 30: runs : 1 Variable { start : 10 end : 30 incr : 10 }
How to use parameter files (cont.) 17 • Multiple parameters: • Nesting runs : 1 runs : 10 Food { Food { start : 10 start : 10 end : 30 end : 30 incr : 10 incr : 10 { } runs : 10 MaxAge { MaxAge { start : 0 start : 10 end : 40 end : 30 incr : 1 incr : 10 } } } }
How to use parameter files (cont.) 18 • Additional keywords: – set defines a single numerical value as a constant for the entire collection of batch runs. – set_boolean defines a boolean value (true / false). – set_string defines a string value (without any white space). – set_list,set_boolean_list, set_string_list define a space-separated list of values. A batch simulation will iterate through the list.
How to collect data 19 • Recording of simulation states to: – archive simulation runs – further process the data into third-party packages (e.g. Excel, Stata, SPSS, SAS, ...) • Output format: Text files (comma, space or tab delimited)
How to collect data (cont’d) 20 • Prepare for the measurements in buildModel() • Determine the duration of the simulations: setStoppingTime(n); • Create the data recorder with output to file data.txt: recorder = new DataRecorder(“./data.txt”, this ); • Add numeric streams using introspection: recorder.createNumericaDataSource(“X”, this ,”computeX”); • The output can be formatted with x number of digits before the decimal point, and y after …createNumericaDataSource(“X”, this ,”computeX”,x,y);
How to collect data (cont’d) 21 • Using introspection requires a method delivering the values • It is also possible to use inner classes (see the Repast How-To Documentation) • The data recorder has to be told to record and to write the data to file: recorder.record(); recorder.writeToFile(); • The user can change the data delimiter: recorder.setDelimiter(“ “);
Typical output file 22 Timestamp: May 31, 2004 6:09:01 PM Neighborhood: 0 NumOfTimeSteps: 200 PALLC: 0.25 PALLD: 0.25 PATFT: 0.25 PAdapt: 0.2 PTFT: 0.25 WorldSize: 16 "run" "tick" "Topology" "RngSeed" "ALLC" "TFT" "ATFT" "ALLD" "Payoff" 1 200.0 0 1 0.0 256.0 0.0 0.0 3.0000 2 200.0 0 2 0.0 256.0 0.0 0.0 3.0000 3 200.0 0 3 0.0 256.0 0.0 0.0 3.0000 4 200.0 0 4 0.0 256.0 0.0 0.0 3.0000 … 59 200.0 2 19 0.0 0.0 0.0 256.0 1.0000 60 200.0 2 20 0.0 0.0 0.0 256.0 1.0000 End Time: May 31, 2004 6:09:16 PM
Replication results (N = 200) 23 Number of TFT-dominated runs Initial number of TFT players 0 20 40 60
Recommend
More recommend