Skip to main content
Version: 1.8.2-RC2

Batch Experiments

By the Batch People

Philippe Caillou, Thomas Louail, Nicolas Marilleau, Huynh Quang Nghi, Serge Stinckwich, Patrick Taillandier, Jean-Daniel Zucker

What do we have?​

Define an experiment, batch mode (but same capabilities as GUI mode)

· Parameter exploration: Param element

o Explicit

o List with step

· Method Element

o Exhaustive

o Hill climbing

o Simulated annealing

o Tabu Search

o Reactive Tabu Search

o Genetic Algorithm

· File export

o File

How does it work?​

· The experiment (the plan) creates the simulation (future: Headless mode)

What would be great in Gama 12.4?​

· Export agent/simulation data in the file

o =>Define code in the experiment (loop over agents)

· Put rules for variable exploration

o Ex: explore b={1,2,3}. if a=2 explore b={2,3} only

o How? Put code in the exploring loop => put real GAML code in the agent

o => reflex "method" or "explore"

o Some existing exploration actions can be used with a ParameterSet (Map?) parameter

· Show plots in batch

o Define output with the code/variable of the experiment agent

o Require a getVariable() operator that gets the last simulation variables values

· Compare agent trajectories

o Stats a posteriori

o (not possible inside a simulation because there is no end)

o => action « aftersimulation » défined by the user

o Require a getVariable() operator that gets the last simulation variables values (to be able to loop on agents)

· Define more parameters/variables in the file (CSV)

o => use of the Save already working

· Launch parallel simulation on multicore/clusters

o => special action "runSimulation" parameter to launch 4 in parallel?

· "Generate" agents

o Define agent parameters by using global/previous variables/files

o Use of an "initSimulation" action before the "runSimulation" to be able to change manually the simulation parameters

· Définition graphique de l’espace de valeur, éventuellement en 2D et disjoint

o Specific OutPut

The Solution​

Define a new Experimenter agent and put real code/reflexes/actions... GAML code inside the Experimenter.

One simple example of what would be great:​

experiment InteliExplore type: batch repeat: 2 keep_seed: true until: ( time > 200 ) {
int nbprey init:0;
int nbpredator init:0;

init
{
//for example read experiment plan from file

}


reflex method
{
loop prm over:prey_max
{
do: createsimulation
setParameter("nb_preys_init",pr)

do: initsimulation

if (prey_max<100)
setParameter("nb_predators_init",200)
if (prey_max>100)
setParameter("nb_predators_init",200)

do: runsimulation;

do: aftersimulation;

}
}

action aftersimulation
{
loop over getVariable(agents)
{
log("everything dans file"); //with the save function?
}
}

chart name: 'Species evolution' type: series background: rgb('white') size: {1,0.4} position: {0, 0.05}
{
data initial_number_of_preys value: getValue("nb_preys_init") color: rgb('blue') ;
data final_number_of_predator value: getValue("nb_predators") color: rgb('red') ;
}
file name: 'logsimple' type: text data: 'simulation: '+ step
+'; allparams' + getAllParamters // PROBLEME comment sauver tous les parametres?
+ '; nbPreys: ' + getValue("nb_preys_init")
+ '; finalPredators: ' + getValue("nb_preys") ;
}

TODO​

And Alexis did almost all this in less than a day....... But how does he do that??

  • A new type of Custom Experiment

  • In this experiment block, an ExperimenterAgent manages the simulations

  • Init() may have to create a Simulation to get a Scheduler (?) and/or a World(?)

  • He must have a Scheduler to be able to stop/wait in a loop for the end of a Simulation (contradiction with previous point...)

  • Its most important function is to be able to call Simulation.step()

=>Create a Simulation Type which has a Step() operator

  • Create a ExperimentatorSkill with a lot of usefull actions (Step(int), ...)

  • Check that it is possible to define plots, logs, ...