artisoc

artisoc におけるプログラミングの特徴

(サムネイル画像:artisoc 4 の画面)

ここでは artisoc シリーズにおいてプログラミングを始める前に注意すべきポイントについて解説します。
(この特徴は artisoc 4、artisoc Cloud 共通、2021年8月時点のものです。)

今回の記事は具体的なプログラミング手法を紹介するものではなく、あくまでプログラムを書く前に意識してほしいことになります。

そもそも artisoc 自体を使ったことがない、初めて聞くという方は以下の記事もご覧ください。
artisoc の始め方|数学・プログラミング (yamaoka-lab.org)

2種類のコーディング箇所がある

artisoc は人や生物の1個体1個体を表せるエージェントという集合が使えることが最大の特徴です。

そのため、コーディング箇所(ルール画面)がUniverse(全体)用とエージェント用の2種類あり、それらを使い分けていく必要があります。

Universe用ルール画面

Universe とはその名の通り、artisoc でシミュレーションしようとしている世界全てを意味します。

Universe用のルール画面では、Universe全体に作用させる命令やエージェントの生成、変数やエージェント一つ一つの操作などあらゆることができ、シミュレーション全体の流れを決める役割があります。

よって、基本的にプログラムを書く場所は Universe用ルール画面であり、無理をすればここだけでもプログラムを完成させることができます。
(ただし、エージェント用のルール画面を使わないのであれば、無理して artisoc を使わずとも、C言語や python など他でプログラムを組めば事足りるかもしれません。)

Universe用ルール画面は次の4つにさらに分けることができます。

  • univ_init … シミュレーション開始時に一度だけ実行するルール
  • univ_step_begin … シミュレーションの各ステップ開始時に実行するルール
  • univ_step_end … シミュレーションの各ステップ終了時に実行するルール
  • univ_finish … シミュレーション終了時に一度だけ実行するルール

(画像:Cloud版のUniverse用ルール画面)

エージェント用ルール画面

エージェントとは artisoc 特有の変数集合で、これがシミュレーション内で重要な役割を担っています。

1種類のエージェントに対して1つのエージェント用ルール画面があり、同種のエージェントに対しては複数体いても同一のプログラミングが適用されます。

逆に言えば、羊の群れと狼の群れで食物連鎖をシミュレートするなど、別の命令を与える必要がある場合は”羊のエージェント集合”と”狼のエージェント集合”の2つを作る必要があり、エージェント用ルール画面も2つになります。

エージェント用ルール画面は次の2つにさらに分けることができます。

  • agt_init … エージェントが生成されたとき一度だけ実行されるルール
  • agt_step … エージェントが毎ステップ実行するルール

(画像:Cloud版のエージェント用ルール画面)

これら2つのルール画面についての詳細は以下を参照してください。
1. モデルの作成手順を学ぶ — artisoc Cloudドキュメント ドキュメント (kke.co.jp)

処理順

上で紹介した2つのルール画面とそれらの細かいルールたちの処理順は次のようになります。

  1. univ_init
  2. univ_step_begin
  3. agt_step
  4. univ_step_end
  5. univ_finish

ここで、①と⑤はそれぞれシミュレーションの最初と最後に1度だけ実行されるルールですが、②~④は毎ステップごとに実行されます。

さらに、③の agt_step はエージェントの種類だけ異なるルールがあり、各種類のエージェントは設定された個体数ぶんだけルールを実行します。

このとき、エージェントごとの実行順はシミュレーション結果に偏りが出ないよう、毎ステップごとにランダムな順に処理されます。

③の具体例として、”羊エージェント”3体と”狼エージェント”1体がいると仮定すると、あるステップでは

  1. 狼のagt_step
  2. 羊Aのagt_step
  3. 羊Bのagt_step
  4. 羊Cのagt_step

であったとしても、次のステップの処理順は

  1. 羊Cのagt_step
  2. 狼のagt_step
  3. 羊Aのagt_step
  4. 羊Bのagt_step

だったりします。

なお、上の表には agt_init が登場していませんが、これはその種類のエージェントが生成されるたびに1度だけ実行されるもので、エージェントの初期値を設定することに使うことが多いです。

ルールの実行順についての詳細は以下を参照してください。
2. 基本的なテクニックを学ぶ — artisoc Cloudドキュメント ドキュメント (kke.co.jp)

まとめ

Universe とエージェントの2種類のルール画面の使い分けとルールの実行順について理解できたでしょうか?

正直、「習うより慣れろ」なところはあるので、今回の内容は軽く頭に止めておく程度にして、どんどん自分でシミュレーションを作っていきましょう。

試行錯誤する中で自然とわかるようになっていくと思います。

参考

COMMENT

メールアドレスが公開されることはありません。

CAPTCHA