/*Marcus Daniels 01/27/2000 swarm-support How about something like this? (At the end is the parameter file.) I used a simple object for the experiment manager instead of a Swarm to minimize coding. */ #import // initSwarm #import // List #import // CreateDrop #import // getZone macro #import // Swarm #import // Schedule #import // MT19937gen #define SEEDCOUNT 10 @interface ModelSwarm: Swarm { unsigned seed; int parameter; id generator; id schedule; } - setSeed: (unsigned)seed; - setParameter: (int)parameter; - buildObjects; - buildActions; - printRandom; - activateIn: swarmContext; @end @implementation ModelSwarm - setSeed: (unsigned)theSeed { seed = theSeed; return self; } - setParameter: (int)theParameter { parameter = theParameter; return self; } - buildObjects { [super buildObjects]; generator = [MT19937gen create: self setStateFromSeed: seed]; return self; } - buildActions { [super buildActions]; schedule = [Schedule create: self setAutoDrop: YES]; [schedule at: 0 createActionTo: self message: M(printRandom)]; [schedule at: 1 createActionTo: self message: M(printRandom)]; return self; } - printRandom { printf ("@%u random:%u parameter:%u\n", getCurrentTime (), [generator getUnsignedSample], parameter); return self; } - activateIn: swarmContext { [super activateIn: swarmContext]; [schedule activateIn: self]; return [self getActivity]; } @end @interface ExperimentManager: CreateDrop { unsigned seeds[SEEDCOUNT]; int min, max; unsigned step; } - (void)sweep; @end @implementation ExperimentManager - (void)sweep { unsigned si; int x; for (x = min; x < max; x += step) for (si = 0; si < SEEDCOUNT; si++) { unsigned seed = seeds[si]; printf ("new Model (seed: %u parameter: %u)\n", seed, x); { id modelSwarm = [[[[ModelSwarm createBegin: getZone (self)] setSeed: seed] setParameter: x] createEnd]; [modelSwarm buildObjects]; [modelSwarm buildActions]; [[modelSwarm activateIn: nil] run]; [modelSwarm drop]; } } } @end int main (int argc, const char **argv) { initSwarmBatch (argc, argv); [[lispAppArchiver getObject: "experimentSwarm0"] sweep]; } /* Local Variables: compile-command: "$SWARMHOME/bin/libtool-swarm --mode=link gcc -DAPPNAME=experimentManager -o experimentManager -g -Wno-import -I$SWARMHOME/include/swarm -L$SWARMHOME/lib/swarm experimentManager.m -lswarm -lobjc" End: */ (list (cons 'experimentSwarm0 (make-instance 'ExperimentManager #:seeds #1(10 9 8 7 6 5 4 3 2 1) #:min 100 #:max 200 #:step 10)))