基礎電気電子工学実験・課題G1

© 2018 - 2020 H. Toyoki


Table of Contents

概要説明

1本の道路を多数の車が走る場合の数値シミュレーションを行います.直線的な高速道路のようなもっとも単純な道路においてさえ自然渋滞が発生しうることが理解できる数理モデルを数値計算(コンピュータシミュレーション)してみます。

まずは、下記URLの動画を見てください。

http://iopscience.iop.org/1367-2630/10/3/033001/media

最初に等間隔で走行している車列がちょっとしたきっかけで乱れたとき、元に回復せず部分的に混んだ状態(渋滞クラスタ)が生じてしまうことが見て取れます。高速道路での自然渋滞はこのような現象だと考えられています。

このような1本道の車の動きをあらわす数理モデルとして「最適速度モデル」(Optimal Velocity Model, OVモデル)というものがよく知られており、その派生モデルは現在でも研究されています。

この実習では、OVモデルを数値計算して動作を観察してみます。

最初にjupyterノートブック(以前はipython notebookと呼ばれた)の説明と操作練習を少し行い、そのあと最適速度モデルのシミュレーションを行い、レポートを作成します。

レポート作成は、Wordを用いることにしましょう。メモのために、早速、Wordを立ち上げておいてください。

前処理

プログラムは、Webブラウザ内で動くものだけを使用しますが、ブラウザがInternet Exploreだとうまく動作しないことがあります。

念のため、Windowsのメニュー「設定」から、下の図のように「設定>システム>既定のアプリ」でWebブラウザをGoogle Chromeにしてください。

set chorome

pythonによるプログラムとjupyter notebook

プログラム言語pythonは、最近、データ解析や機械学習などに用いられることが多い人気言語で、さまざまな周辺ツールやライブラリがどんどん作られつつあります。ここでは、プログラムと様々な説明(通常の文章)を混在させることができるjupyter noteboookを利用します。

pythonはC等と異なり、インタプリタ型の言語です。スクリプト言語と呼ばれることもあります。Cのように、機械語に翻訳(コンパイル)してから実行するのではなく、実行段階で一行一行プログラムを読み取って実行していきますから速度は遅いですが、プログラムが簡単です。

プログラム上の大きな違いは、変数宣言をせずにいきなり使うことができる点です。変数の型もその場に応じて解釈されます(その解釈も時間がかる要因です)。

jupyter notebookの使い方

jupyter notebookはWindowsメニューから立ち上げます。ノートブックの編集、実行などの操作はWebブラウザ内で行われます。つまり、jupyterはpythonインタプリタの本体(バックエンド)とWebサーバ及び動的なページ(HTML5)を作成するシステムから成り立っています。

このページもjupyterを使って作成しました。

サンプルプログラムのダウンロードとjupyterの立ち上げ

jupyterの基本的なメニュー 編集、実行など

ここで、練習用ノートブックを使って、jupyterを操作する練習をします。(新規作成はしなくても構いません。)

ノートブックの読み込み、新規作成

メニュー

Web上にたくさんのチュートリアルがありますので、参考にしてください。

編集上のTips

jupyterにはプルダウンメニュー以外にもたくさんの機能、機能に対するショートカットキーがあります。"Help"→"Keyboard Shortcuts"で一覧が表示されます。 日本語での紹介は、たとえば、http://qiita.com/masafumi_miya/items/6524dbd227705351a00c

レポートについて

作成及び提出方法

jupyter notebookやpythonに関して試したこと、最適速度モデルのシミュレーションをやってみてわかったことを画像付きで報告してください。

作成は、Wordあるいはjupyter notebookで作成してください。Wordで作成した場合は、かならずpdf形式に変換して提出してください。ipynb形式の場合はそのままで結構です。(jupyterはpdf形式に変換する機能も備わっていますが、現在のところ日本語が入っているとうまく処理できません。工夫次第で可能になりますが、教室のパソコンでは無理です。)

提出は、レポートを電子メールに添付してtoyoki@yamanashi.ac.jp宛に送ってください。

実習

以下に示す最適速度モデルのシミュレーションプログラムを実行し、「基本的なパラメータ」の値によって交通流がどのように変化するか(車の軌跡や空間パターンのスナップショット)を調べ、レポートを作成しなさい。

Tips

レポートへの画像の貼りこみ

文書への画像の貼りこみは、Wordの場合は、「挿入」→「スクリーンショット」を用いるのが簡便です。

Markdownの記法

Markdownの記法はたとえば、http://qiita.com/tbpgr/items/989c6badefff69377da7 を参照してください。

最適速度モデル

実習時間が少ないので、詳細は理解できなくてもよいが、簡単に説明する。

実際の運転者の行動、車の動作は複雑ですが、もっとも本質的に重要なのは次のようなことだと考えられます。

とあらわされます。速度の変化は加速度であり、上記の考えを

$$ \frac{dv_n}{dt} = a \left[ V(\Delta x_n) - v_n\right] $$

のように定義します(右辺は[力/質量]、この場合は人間の操作も含めた[車の駆動力/質量]を表します)。最適速度は$V(0)=0$であり、単調増加して一定値に近づく関数として

$$ V(\Delta x_n) = \tanh (\Delta x_n - c) + \tanh(c) $$

を採用します(上の図)。ただし、$\qquad n=0,1,2, .... ,N-1$であり、$n=N-1$の前は$n=1$、つまり周期的とします。

道路も実験のビデオと同様に周回道路とします。

OVモデルのシミュレーション

OVモデルの数値計算本体のクラス定義

次のセルは、OVモデル(2N次元の微分方程式)を数値的に解くプログラムの本体で、下に述べる可視化プログラムで利用します。

この部分はクラス(関数と変数の集合体)として記述してあります。クラスはオブジェクト指向言語C++やJava等に共通する書法(概念)です。

下の方にある可視化プログラムを実行する前に、直下にセルを実行しておいてください。pythonインタプリタに記憶されます。

軌跡の描画

説明は後回しにして、次のセルをまずは実行してみる。

これは、横軸を時刻、縦軸を道路上の位置として車の軌跡を描くプログラムです。

主要なパラメータをGUI(Graphical User Interface)でセットできるようになっています。

次のことに注意して試してみてください。

車の動きのアニメーション

実験ビデオに対応する車の動きをシミュレーションによって再現してみましょう。

まずは、次のスクリプトを実行して見て下さい。次のような別ウィンドウが開けばOKです。

上の軌跡を描くプログラムと行ったり来たりしていると、表示されなくなるかもしれません。 その場合は、メニューの「カーネル(kernel)」→ 「再起動(restart)」をしてみてください。

ov_amination.png

アニメーション作成にはmatplotlibに備わっているanimationというライブラリを用いています。パラメータを入力するGUIを作るのは簡単ではないので、プログラムの初めのところに埋め込みます。(4~6行目)

アニメーションは、静止画を連続的に同じ画面に表示することにより動いているように見せかけるものです。36行目のframe数分だけintervalミリ秒間隔で表示します。速すぎるようであればintervalを長くしてみてください。repeatをTrueにするとエンドレスで繰り返し表示されます。

参考

各自のパソコンでの実習

Jupyterを含むpythonの処理及び開発環境は複数ありますが、anacondaというパッケージがよく使われています。自分のパソコンでやってみたい人は、それをインストールしてみてください。"anaconda python"のようなキーワードで検索するとたくさんの情報が得られます。

たとえば、

https://www.python.jp/install/anaconda/index.html

を参照してください。

説明図の作成

本文で説明のために使用した図を作成するプログラムを参考のために示します。関数を描画するだけのものです。なれると手軽に使えて重宝します。

安定・不安定領域の図作成プログラム

最適速度関数の描画

車間距離-速度のアニメーション

次のセルは、横軸に前方車との車間距離、縦軸に速度をとって車の状態を描画するプログラムです。

この図は何を物語っているのだろうか。考えてみましょう。現象をつかみやすいように台数を増やし、描画間隔を短くしてあります。14~16行目や52行目のパラメータを変更して試してみてください。(このプログラムも別ウィンドウ上に結果が表示されます。)

不安定性の直感的理解

「ポテンシャル関数」の極小値が安定点だと考える。

2次の係数が正から負に変わると、$\phi=0$の点が不安定化し、正負両方に安定な点が出現する(双安定)。