#はじめに
大学の授業の方でartisocを用いてシミュレーションする機会があったので備忘録として残そうと思います。
特に需要はないと思われますが、こんなツールでこんなシミュレーションができるのだなぁと感じていただければ幸いです。
artisocを使ったことある方はモデルの一例として読んでいただけると嬉しい限りです。
#artisocとは
artisocは、人間同士の相互作用をコンピュータ上で再現することでダイナミックに変化する社会現象を分析する社会シミュレータです。
と、あるように「構造計画研究所」が作成したマルチエージェント・シミュレーションプラットフォームです。
こちらのツールを使うことで災害時の避難経路シミュレートや、新型コロナウィルスの感染拡大シミュレート等が可能になっています。
#実際のシミュレーション
今回、自分が作成したのは「タピオカ店売上シミュレーション」です。
#####左グラフが顧客の状態とその遷移、右上が累計売上個数、右下が単位時間あたりの売上個数グラフとなっています。
コードは複雑かつ多いのでこちらのGithubから見る、あるいは保存するとよいです。
HPからインストールするか、artisoc cloudからmodelを読み込むと実行可能だと思います。
#modelの解説
#####ここではどのような操作をしているのか述べていきます。実行だけしたい方は読み飛ばしてもらって構いません。
- エージェントcustはyellow(通りすがりの人),red(店外にいる人),blue(店内にいる人),green(購入した人)の4状態。
- エージェントcustの初期人数をcustumor initial としてコントロールパネルで変化させられるようにした。また initial rate として開店時の yellow,redの人を作った。
- time変数を用いて期間の場合分けをする。timeは毎ステップで増え0〜39をピークタイム前、40〜69をピークタイム、70~100をピークタイム後とする。100ステップで営業終了とする。
- 通りすがるyellowの人は一定の確率で増え、消えていく。
- yellow⇒redは呼び込み能力の変数advertisementによって確率的に変化する。
- red⇒blueは厨房能力の変数kitchenによって確率的に変化する。
- blue⇒greenは一定の確率で変化する。
- custの視野1に自分を除いてレジ能力変数cash*0.1以上の人が存在するとblueだった人はredに戻り3人以上存在するとyellowはさらに消える。
- greenになった客はreputationを1つ出して新たな状態whiteという複製を作り、変数afterbuyを +1する。afterbuyはstepごとに+1される。
- red の状態の客の周りに reputation が 10個以上 存在するとredはさらにblueとなる。
- 3〜6は2の期間によって確率が異なる。ピークタイム後は yellow,red,blue の状態の人は 著しく減る。
- afterbuy=2 となる状態 whiteの人はステップの 最後に消える。
- Universe にて yellow,red,blue の人をカウントし グラフ化する。
- Universe にて green の人をカウントすることで タピオカの総売り上げ個数をグラフ化する。Whiteの人をカウントすることで毎ステップでの売り上げ個数をグラフ化する。なお10stepで1時間のため、1stepでは6分である。
- 各能力(advertisement,cash,kitchen)もコントロールパネルで入力可能とした。
*注釈*
・新たにwhiteの状態を作ったのは毎ステップの売り上げを作るためである。greenから複製させ、次のステップで消去させることで可能とした。
・購入の想定ルートとしては道を通りすがった人が店外へと意識を向け、店内へと入り、検討したうえで購入に踏み切るといったものである。なお8,9のreputation は購入客の無意識な宣伝と考えた。タピオカを飲み歩いている人の容器を見ること・買った人からの評判やSNSでの評価が宣伝に繋がり、外でまよっている人が中に入る状況の再現をした。
・7は混み具合に よって店外で迷っていた人が踵を返すことや通りすがりの人が店を意識しても混雑しているためその場を離れることを再現した。
#終わりに
本来はシミュレーションの前に線形計画問題を解くpythonライブラリのpulp
を用いて最適人員配置をもとめてからartisocに手を出したのですが、今回の本筋ではないため定式化やpythonプログラムコードは割愛させていただきます。
講義の方の結論としては
タピオカ専門店の従業員人数・仕事量を加味した最適な役割配置を求めることは1日の売り上げの最大化につながることが判明した。さらなる利益を求めるには客の時間帯変動(ピークタイム)に応じてシフトを変化することが必要である。
という感覚値の通りの主張となりました。
Qiitaにてartisocの記事を調査したところほとんどなかったためこうして書いてみました。
正直使いづらい印象を覚えたため必要に迫られない限り使うことはないと思います・・・。