複数の脳内小人(コロポックル)で構成された運転手を用いた交通渋滞シミュレーション(頁1)  〜JAVA プログラム

   ネスト構造を持つマルチエージェントモデル                          >>次頁へ             (Up)


<原理>


 別な所で、交通渋滞のモデルとして、単純サーキット上の交通渋滞の発生のシミュレーションを作成してみました。  そのシミュレーションでは、車と運転手を分離し、運転手に「OVモデル」(最適速度模型:Optimal Velocity Model)を適応し、車の軌道は円形のサーキット上に限られていました。

 ところで、現実の世界でも、車が大平原の中を自由に動きまわるという状況はほとんど無く、通常は車線に沿って移動(1次元の移動)することになります。 そこで、車が走るラインを「トラック」と呼ぶと、トラックは上記のサーキットモデルを1箇所で切り開き直線に引き伸ばし、始点と終点を結んだ有向線分と考えられます。 道には複数のトラックが設定されます。例えば、片側1車線の道路では、「上り車線」と、「下り車線」の2本のトラックが引かれます。 片側2車線では、「上り車線」が2本、「下り車線」が2本、合計4本のトラックが引かれます。 交差点では、異なるトラックとトラックが交わります。 交差点で右左折する等により、車は別のトラックに乗り換えることになります。 また、車線変更や合流、分岐でもトラックの乗り換えを行います。
 トラックの上では複数の車がリスト状につながっており、各車の動作には、前方車に追従するモデル(例えば「OVモデル」)を適応できます。

 単純な事象に対するシミュレーションでは、一つのモデルだけを適用しても、それらしいシミュレーションを行うことが可能です。
 しかしながら、現実の世界では、前方車への追従以外にも、信号機・標識への対応、道路のカーブ、右左折時の対向車、歩行者への対応等、様々な状況に対応する必要があります。 これら全ての状況に対応する事は、単純なモデルでは困難になってきます。 また、全状況に対応するモデルを作成しようとすると、モデルが複雑になり過ぎます。


 ところで、人間の脳内では、色々な機能単位が無意識内で同時に並列して動作しています。 例えば、事故等で右脳/左脳の橋を切断した患者は 右手で服のボタンを止めたにも関わらず、左手で服のボタンを外してしまうことがあるそうです。 健常者でも、疲れている時などは、信号が赤になると無意識にブレーキを踏んだり、前方車が発車すると、それにつれられて、無意識に発進したりすることもあります。
 昔は、脳の中には 小人(ホムンクルス:Homunculus)が住んでおり、それが、脳の判断を行っているという説もあったそうです。 


 そこで、車の運転者モデルとして、脳内に複数の小人(コロポックル:korpokkur)を配置し、各コロポックルがそれぞれ、自分専用の役割を持ち、勝手に独自の判断下し、最後にドライバーが顕在意識の中で、それらの判断の中から、一番適切な判断を採用して、運転を行うというモデルを制作してみました。
 通常のマルチエージェント型の交通シミュレーションでは、エージェントの単位は車両単位ですが、本シミュレーションでは、運転手の脳内に更に「コロポックル」と言うエージェントが存在しています。

 *) コロポックル:アイヌ地方の民話に出てくる小人のこと。


  
                   複数の「独立した脳内機能(コロポックル)」 の 並列動作モデル


 「前方車への追従:OVモデル」、「前方車急ブレーキに対する追突防止」、「信号機の黄色/赤色対応」、「急カーブに対応する徐行」、「別車線への割り込み」、「車線横断」等 各事象に対応する専門のコロポックルがそれぞれ、現在の状況から変更すべき車の加速度を計算します。
 運転手は、各コロポックルが提案した加速度の中から、最も小さい加速度の値を、次の加速度値に採用します。
 
 この様に、運転手の意思決定を、複数のコロポックルに分離しておくと、新しいコロポックルを追加することで、新たな状況に対応するモデルに改良する事が容易に行えます。 例えば、「エコドライブ」を心がける人が増えた時に、交通にはどの様な影響を与えるか・・・ という様な問題に対応しようとすると、一部の運転者の脳内に「省エネ運転」コロポックルを追加します。「省エネ運転」コロポックルは、急加速/急発進を行わないように加速度を提案します。 運転手は 提案された加速度値の候補が増えたのみで、それ以外の事は変更する必要が有りません。

 
 本シミュレーションの構造を下の図に示します。

 車(Vehicle)オブジェクトの中には 運転手(Driver)が一人います。 運転手(Driver)の脳内には複数のコロポックル(korpokkur)が存在しています。

           シミュレーションを構成する各クラス


<シミュレーション:Step1>



 Step1として、コロポックルは、「OVモデル」、「追突防止」、「信号機対応」の3種類を準備しました。
 実は、以前製作した「単純サーキット上の交通渋滞の発生のシミュレーション」では、プログラム内に多少の狡が含まれており、後方車が前方車を追い越すと強制的に位置を変更しています。 つまり、本来は、前方車に追突した状況を無理にストップさせていたのです。 そこで、「追突防止」コロポックルを追加し、速度が大きい時には、前方車との車間距離が一定以下になると、急ブレーキをかけてるように提案します。 運転手は、一番小さい加速度(マイナス値)を採用するため、追突を避ける事ができます。
 また、「信号機対応」コロポックルは、信号が黄色に変わった瞬間 急ブレーキをかけなくても停止できるようならば、次第に速度を落として信号機の前に停止します。 しかし、急ブレーキが必要な場合や、どうしても停車するには間に合わない時には、信号機を通過します。 一方、赤色ならば、必ず停止しますが、黄色の段階で速度を落としているため、急ブレーキをかけなくても停止することが可能です。

 Step1のシミュレーションでは、交差点の無い直線道路(長さ3Km)に 信号機(例えば横断歩行者用)を5機配置し、信号機の 緑/黄色/赤 の点灯タイミングを変更して見ました。
 交通量は時刻とともに変化し、午前中は上り線が多く、午後は下り線が多くなります。
 シミュレーション「頁1」では、5台の信号機が一斉に 「緑/黄/赤」 の点滅を繰り返します。(同頁の上側のアプレット) 一方、同頁の下型のアプレットでは、 5台の信号機の 信号の長さも 点滅の頻度も 全て異なっています。
 通行の評価の指標として、 「1分当り何台通過したか」を示す通過交通量と、 1台の車がトラックを通過する経過時間(最近10台分の移動平均)を示しました。 
 
 通過交通量で見ると、信号機の点滅状況には変化が有りませんが、通過時間で見ると、交通量が多い時には、一斉点滅の方が30秒程度 速くなりました。 交通量が少ない時には両者に変化は見られませんでした。

 シミュレーション「頁2」では、上り車線を走行する車に合わせて、左の信号機から右の信号機に順に赤から緑に変化します。(同頁の上側のアプレット) 運が良ければ、一回も信号待ちしないで通過することができます。 一方、同頁の下側のアプレットでは、信号点滅の順序は下り車線に合わせています。 
 両シミュレーションを比べると、交通量の多さに関わらず、走行方向に同期している側の車線の通過時間が短くなりました。 その効果は 交通量が少ない時の方がより顕著な様です。 それは、交通量が多い時には、自然発生した渋滞により、列の後ろ側の方は、次の信号機に引っ掛かり、3Kmの道路通過中に複数回信号待ちが発生する場合もある為です。


 (動画)
  

                            シミュレーション実行の例



 

<参考文献> 

1) 杉山雄規著    交通流の物理(<特集>交通流)              Physics of Traffic Flow(<Special Reviews>Traffic Flow)‎  (2003) ‎
2) 小松輝久著        交通渋滞と粉体の渋滞(<特集>交通流)     Traffic Congestion and Granular Jamming(<Special Reviews>Traffic Flow)‎  (2003) ‎
3) M.A.アービブ著  『脳』  ューラルネットと脳理論        (株)サイエンス社(1992)  
4) Norman D. Cook著  ブレインコード                紀伊國屋書店(1988)
5) 本間三郎著    人間の脳−その未知なるもの−       朝倉書店(1989)

キーワード: 交通渋滞、マルチエージェント、シミュレーション、Javaプログラム


(JAVAプログラム実行へ)                   >>次頁へ                (Topへ)

 Javaソースプログラムは、上記(Javaプログラム実行へ)の頁からダウンロードできます(ウイルスチェック済み)。

初版:2014/2/10 |





蛇島伸吾