4.5. ModelSwarmのスケジューリング

シミュレートされるすべてのオブジェクトをbuildObjectsで作成すると、次はそれらをbuildActionsメソッドでスケジューリングします。

modelActions = [ActionGroup create: [self getZone]];
[modelActions createActionTo: heat message: M(stepRule)];
[modelActions createActionForEach: heatbugList message: M(step)];
[modelActions createActionTo: heat message: M(updateLattice)];

modelSchedule = [Schedule createBegin: [self getZone]];
[modelSchedule setRepeatInterval: 1];
modelSchedule = [modelSchedule createEnd];
[modelSchedule at: 0 createAction: modelActions];
    

現在のheatbugのモデルスケジュールは、modelActionsと呼ばれるActionGroupと、modelScheduleと呼ばれるScheduleという2つのコンポーネントで構成されています。ActionGroupは3つのメッセージの固く連結されたリストで、そのアクショングループが実行されるたびに3つのメッセージを一行で送ります。
[heat stepRule];
[heatbugList forEach: step];
[heat updateLattice];
      
ActionGroupは送信する3つのメッセージを単独で指定します。これはシミュレーションにActionGroupを入力するためで、次にそのActionGroupはScheduleにドロップされます。Schedule自体は modelActionsを実行する1つのアクションを持っているだけです。このアクションは時刻0で起こりますが、スケジュールの反復間隔を1に設定しているのでスケジュール自体がループして、step1回ごとに実行されることになります。最終的な結果はmodelActionsが時刻 0、時刻 1などで実行されたものです。