/* * * MAML TUTORIAL (Model 3.1.1) * For full description refer to * http://www.syslab.ceu.hu/maml/tutorial/ * * (c) 1998, CEU Systems Laboratory * */ @model m3 { @agent Competitor { @var: int row, distance; @sub: (void) jump { distance += [uniformIntRand getIntegerWithMin: 1 withMax: 3]; } } @var: [] Competitor competitors; @schedule cyclic (1) { 0: @forEach groupOfCompetitor jump; } @init: @create [10:i] Competitor competitors { competitors[i] -> row = i; competitors[i] -> distance = 0; } } @observe m3 { @agent FrontLiner { @var: int row, distance; @sub: (void) newJumpOf: (int) row To: (int) distance { if (distance > self->distance) { self->row = row; self->distance = distance; } } @probe: var "row", var "distance"; } @var: FrontLiner frontLiner; @extendAgent Competitor { @probe: var "row", var "distance"; @sub: (void) subscribe { [model->frontLiner newJumpOf: row To: distance]; } } @schedule cyclic (1) { 0: @forEach groupOfCompetitor subscribe; } @init: maxTimeSteps = 100; @buildProbes; @initModel; @create FrontLiner frontLiner { frontLiner->row = -1; frontLiner->distance = 0; } [competitors[0] probe]; [frontLiner probe]; }