最近になってArtisoc Cloudを利用している物です。
待ち行列モデルの動きを作ろうとしているのですが、少し躓くところがありました。
窓口のエージェントに向かって、人間のエージェントが動き、窓口の前で行列を作って、一番先頭の人間がサービスを受け終わった瞬間に消えて、残りの行列の人間達が一歩前に出るといった、極めてシンプルなものです。
最初は、空間を動く人間のエージェントに、make_agtset_around_own()を用いて、前方に他の人間や窓口(のエージェント)がいなければ、forward(1)で前に進み、もしいれば、forward(0)で進まないようにすれば良いかと考えました。そうすれば、エージェント同士が重ならずに、よくある行列の動きを作れると思ったからです。
窓口にてサービスを受けた人間のエージェントは、サービス時間終了後に kill_agt()で消すようにしています。
ですがこれだと、make_agtset_around_own()で、周り1マスをサーチしてしまうせいで、前の人間が消えても、後ろの人間がいなくならないため、窓口から前の人がはけたのに、次の人が前に進まず、行列が進まない、といった現象が起きてしまいます。
そこで本題です。
どうすれば、私の作ろうとしているモデルは完成できるのでしょうか?ただし、空間に存在する全エージェントは、重なってはいけないものとします。
有識者の方、どうかよろしくお願いします。
エージェントが空間上を移動するというよりも、
待ち行列を計算して、マップ上にエージェントを表示するという方が簡単だと思います。
例えば、待ち行列wait_listを作成し、
wait_list = [0] * 10
personを1人生成したときにperson_idを代入
wait_list[0] = 1
step毎に、wait_listの中のpersonを移動させつつ(前に誰かいるときは停止)、
[1,0,0,0,0,0,0,0,0,0]
[0,1,0,0,0,0,0,0,0,0]
person_id=2を追加したとき
[2,0,1,0,0,0,0,0,0,0]
[0,2,0,1,0,0,0,0,0,0]
実現したいことができると思いますが、いかがでしょうか?