電車車両降車のモデル化とシミュレーション

ネットワークシステム研究室
指導教員 坂本 直志
12EC082 髙橋 亜弓

目次

1 はじめに
2 関連研究
3 StarLogo
4 本研究におけるシミュレーション
4.1 モデル化
4.2 シミュレーションプログラム
4.3 シミュレーション結果
5 まとめ
6 参考文献
7 付録
7.1 ソースコード
7.2 測定データ

1 はじめに

 首都圏を中心に電車を使用する人は多く,特に通勤通学の時間帯の車内は非常に混雑している.混雑を緩和するために列車の本数を増やすが,そのため,運転間隔が短く,ダイヤは過密である.これによりある1本の電車が遅延を起こすと,次の電車もその次の電車もと遅延の連鎖を引き起こすことにもなりうる.遅延の原因として,車両や信号の故障,事故が原因で起こる遅延もあるが,一方で,無理な駆け込み乗車,カバンや傘がドアに挟まれることによるドアの再開閉,混雑など,乗降時に想定されるアクシデントに起因する遅延もある.一方,アクシデントではない通勤時間帯の乗降時間の増加による遅延もある. 現在の首都圏の鉄道網において,通勤時間帯の運休や30分以上の遅延は増加傾向にある.30分に満たない遅延は電車会社では正式に統計がまとめられていないが,潜在的には増加していると思われる.東京メトロでは5分以上の遅延に対して遅延証明書を掲載しているため,平日朝の通勤時間帯の遅延証明書の発行件数を見ると路線によっては毎日遅延が発生している〔1〕.

通勤時間帯の遅延発生件数
図1 通勤時間帯の遅延発生件数

 車両や信号の故障,無理な駆け込み乗車などは予測できない要因だが,一方で混雑による乗降時間の増加は予測できる要因だと考える.もし混雑時の乗客の乗降時間を正確に予測することができれば,混雑予想に基づいて各駅・各時間帯の停車時分を混雑に対応したダイヤを作成することができる.そこで研究は混雑度と乗降時間の関係をモデル化とシミュレーションにより導く.

2 関連研究

 関連した研究がいくつかなされている.

 藤田ら〔2〕は,電車内での乗客の行動は乗客が受ける様々な影響に基づくと考え,これらの影響をポテンシャル関数として表現し,乗客は自分のポテンシャルが小さくなるように立ち振る舞うと考えた.そして乗客時に受ける影響の要因を,周囲の乗客からの影響,車両構造による影響,乗降時の影響の3つとして,立ち位置,乗車,降車のそれぞれの場合におけるポテンシャルを数学的にモデル化し,シミュレーションを行った.シミュレーションにより,車内が混んでいるほど1人の人が乗車にかかる時間がより多くかかることが確認された.一方で,降車では降車する人数が車内にいる人数の半分のとき最も時間がかかり,それよりも多くても少なくても降車にかかる時間は減少することが確認された.

 武内ら〔3〕は実寸大のモデルを用いて,乗降時間を測定し,その結果を藤田らのモデルと比較した.彼らは試験用ホームを作り,被験者が乗降する様子をビデオカメラで撮影し,乗降時間を測定した.降車する人数分の客をランダムで100通り選んだ.なお,ドア付近で降車する人の邪魔になっている乗客は一旦ホームに降りるようにした.実測とシミュレーションでは,それぞれ降車時間,再乗車時間,乗車時間に分けて測定を行い,これらの合計を総乗降時間とした.このような実験の結果,乗降速度や乗客の振る舞いなどのモデル不備を除き,ほぼ同じ結果が得られている.

3 StarLogo

 本研究で使用したStarLogoについて説明する.StarLogoを起動すると図1と図2の2つの画面が表示される.図1はStarLogoの本体,図2はコントロールセンターである.本体画面上にあるグラフィックキャンバス上にturtleを表示でき,またturtleの移動範囲にバックグラウンドにpatchと呼ばれるセルオートマトンがある.

 StarLogoでは「タートル」「パッチ」「オブザーバ」についてプログラムを行う.オブザーバは入出力が可能な主プログラムになる.一方オブザーバで生み出したturtleはturtle用のプログラムに従い,画面上のpatchはpatch用のプログラムに従う.StarLogoは手続型言語Logoにおいてturtleを無数に生成できるものである.turtle、patchとも複数存在できるが,それぞれが同じプログラムを実行する.但し,turtle,patchとも,座標や色の制御ができるため全てが同一の動作になるわけではない.

StarLogoウィンドウ
図2 StarLogoウィンドウ
コントロールセンターウィンドウ
図3 コントロールセンターウィンドウ

 プログラムは関数を定義することにより行う.関数定義の方法は「to 関数名」で始まり「end」で終わる.

 なお,この研究で使用したStarLogoのコマンドの機能は以下の通りである.

ca (clear all)
グラフィックキャンパスを初期化する.

 crt n (create turtle)
グラフィックキャンバスにn匹のturtleを生み出す.

 fd n (forward)
グラフィックキャンバスのturtleをステップnだけ前進させる.

 rt n と lt n (right/left turn)
グラフィックキャンバスのturtleを右方向または左方向に、指定した角度回転させる.

 pd (pen down)
turtleが移動した軌跡を表示する.

 die 
すべての実行している命令を止めて永遠に消える.

 seth towards X Y 
グラフィックキャンバスの中のある点に向きを向けさせる.

 ask-turtle [list of commands] 
全てのturtleはlist of commandsを実行する.

 ask-turtle-with[条件][list of commands] 
条件を満たすturtleはlist of commandsを実行する.

 count-turtles-with[list of commands] 
list of commands:カウントするturtleを指定する.
指定した条件が真のturtleの数を返す.

 if 条件式 [処理] 
条件式が真の場合、次の処理を行う.

 loop [list of commands] 
list of commands:実行させる命令リスト.
list of commandsを永久に繰り返す.

4 本研究におけるシミュレーション

4.1 モデル化

 シミュレーションにおいて車両のサイズは実際の1/4のサイズとし,長さ450cm,車体幅260cm,ドア幅130cmの1つ扉とする.本シミュレーションでは,1つのpatchの大きさを45cm程度とするため,StarLogo上での車両サイズは,長さ10,車体幅6,ドア幅2patch分とする.また1人あたりの乗客のサイズは,人の肩幅の平均が約45cmのため,1patchと同等の大きさとする〔4〕.

 本シミュレーションでは,まず車両にn人乗った状態を作る.その中から降車する人をランダムでm人選ぶ.降車する人は扉に体の向きを変え,一直線に進んでいく.人が扉から出たところで消す.降車する人が車内から0人になったらシミュレーションを終了する.このシミュレーションにおける人の動きのルールは以下の3つである.

  1. 降車する人は一斉に扉に向く.
  2. 人の速度は一定とする.
  3. 移動した先のpatchに自分以外の人がいた場合1patch分下がる

4.2 シミュレーションプログラム

実装をStarLogoで行った.人をturtle,車両をpatchで表現した.また,降りる人は降りない人と色を変え,それぞれ別の動きになるように設定した.シミュレーション環境では,インターフェイスウィンドウに「ready」と「start」のボタンを設置し,あらかじめ乗車している人数と降車する人数はスライダーを設置し,選択するようにした.実際のシミュレーション画面は図3と図4である.

 プログラムは付録Aに示した.シミュレーションのパラメータはtime,n,m,の3つであり,timeは経過時間を示し,nはあらかじめ車両に乗っている人数,mは降車する人数である.なお,作成したプログラムの行数は全部で63行である.

シミュレーション画面1
図4 シミュレーション画面1
シミュレーション画面2
図4 シミュレーション画面2

・プログラムの説明

 ・ready関数
 ボタン「ready」を押すと,ready関数が呼び出される.Ready関数では経過時間を測るためのグローバル変数であるtimeに0を代入する.次に車両を書く.ca命令によってグラフィックキャンバスは初期化される.crt 1命令によりturtleを1匹生成し,ask-turtle 0 […]によって,0番であるこのturtleに車両を書かせ,turtleは消える.

 次に車両内にn匹のturtleを配置する.crt n(nには画面上のスライダーで数を入力)によって生成されたn匹のturtleはask-turtles[iti]で関数itiを呼び出すことによって車両内にランダムに配置される.そしてask-turtles[setc blue]ではsetc blueにより全turtleは青くなる.

 次に,降車するm匹のturtleを赤色にする.ask-turtles-with[who > = 0 and who <= m-1][setc red](mには数を入力)によりm匹のturtleである0番からm-1番のturtleが赤くなる.

 最後にsetup-graph関数を呼び出すことにより、グラフを表示するためのウィンドウを表示する.

 ・setup-graph関数
 setup-graph関数ではグラフを書くための画面を表示する.pp1 ppreset setppc greenでpp1(プロットペン1)に対して,初期設定として座標(0,0)へ行き,ペンを下し,ペンの色を緑にする.setplot-title "time"では,グラフのタイトルをtimeとする.setplot-ylabel "乗車している人数"とsetplot-xlabel "経過時間"ではY軸,X軸のラベルに名前をつけ,setplot-yrange 0 100とsetplot-xrange 0 20ではY軸,X軸の目盛りを設定する.最後にviewplotでプロットグラフを表示する.

 ・start関数
 ボタン「start」を押すとstart関数が呼び出されturtleが降車し始める.if count-turtles-with [color = red ] = 0 [stop]により,赤色 のturtleが0のとき,つまり降車するturtleが降車し終えたときにloopが止まるようになっている.このloopが止まるまではグラフを書く.pp1 ppd plot(count-turtles)でpp1(プロットペン1)に対して,ペンを下し,turtleの総数をプロットし,settime time + 1で時間をカウントアップする.ask-turtles-with [color = red] [ go ]では赤色のturtleは関数goを実行する.

 ・go関数
 go関数はturtleの関数である.Turtleが実行するとドアに向かって一歩進む.そして,ドアの外に出られたらturtleを消す.これを実現させるため,次の処理を行う.

 seth towardsにより,指定された全赤色turtleはドアの方向に向く.if pc-ahead = redでは目の前のpachが赤色のとき,つまり壁で行き止まりのときはドアの前の車両内のスペースに向くようになっている.fd 1で1pach分進み,if ycor < -1 [die]ではy座標が-1以下にturtleがいる場合,そのturtleはドアから降りたとみなし,消える.また,同じpach内にturtleが複数いるという重なりがある状態をなくすために,関数overlapを用意した.

 ・overlap関数
 overlap関数ではif count-turtles-here < 1が真のとき,つまりturtleの重なりがある場合,60度以内でランダムに方向を変え,一歩下がり,そして再び自分自身であるoverlapを呼び出す.重なりがなくなるとif文が偽となり,overlapは終了し,関数goにもどる.

4.3 シミュレーション結果

 あらかじめn人乗った状態から降車する人をランダムでm人選び、降車にかかる時間を測定した。n=45、50、55、60、65、m=2、5、10、15、20、25、30の35通りの組み合わせについて、それぞれ5回ずつ測定し、平均降車時間を求めた。これらのシミュレーションにおける降車人数と平均降車時間のグラフが図5である。

降車人数と平均降車時間
図6 降車人数と平均降車時間

 これにより降車人数が乗車人数の約3割のときに降車に最も時間がかかり、それより少なくても多くても降車にかかる時間は減少することが読み取れた.この人数に対して,時間の関数が上に凸になるのは,藤田の結果(図6)と類似している.

降車人数と平均降車時間2
図7 降車人数と平均降車時間2

5 まとめ

 本研究ではStarLogoを用いて,電車車両からの降車のモデル化とシミュレーションを行った.その結果,藤田らの降車モデルのシミュレーションと同じような結果を得ることができた.このことからStarLogoを使用した本シミュレーションは有用であると考える.

 今後の課題として,車内に乗車したままの青色turtleに降車する赤色のturtleの邪魔にならないように道を譲ったり,ドア付近の青色turtleは一度降車し,再乗車する動きをつけたり,今回の問題点を改良し,より洗練された降車モデルを完成させたい.また,今回は降車のみモデル化したが,乗車のモデル化し,降車時間のみでなく,乗降時間の予測を目指したい.

6 参考文献

  1. 「満員電車も遅延も許せない! 通勤問題に特効薬はあるか ≪鉄道進化論≫」東京経済ONLINE 2009.8.7
    http://toyokeizai.net/articles/-/10756
  2. 藤田 陽子「電車内における人の乗降立ち位置モデル」東京工業大学大学院情報理工学研究科数理・計算科学専攻2001年度修士論文 2002.3
  3. 武内 陽子、高橋 幸雄、富井 規雄「シミュレーションと実測実験における電車への乗降時間の比較」2003年日本オペレーション・リサーチ学会秋季研究発表会 pp.230-231 2003.9
  4. 清野純史、三浦房紀、瀧本浩一「被災時の群集避難行動シミュレーションへの個別要素法の適用について」 土木学会論文集 No.537 pp.233-244 1996.4

7 付録

7.1 ソースコード

 本論文で作成したプロブラムを付録として載せる。

 プログラム貼る

7.2 測定データ

 車内に乗車している人数を45,50,55,60,65,降車する人数を2,5,10,15,20,25,30の35通りの組み合わせについて,降車にかかる時間をそれぞれ5回ずつ測定した結果である.また、表内の降車にかかる時間の単位はステップである.

測定結果