空飛ぶ車がぶつからないようにするために向けて(モデル化編1/2)

最近エンジニアもすなるQiitaを始めてみました。
Markdownに慣れるためにも練習がてら記事を書いてみる事にします。

執筆の動機

twitterを眺めてたらこんな記事が流れてきました。

「空飛ぶ車」国内メーカーの開発 後押しへ 経産省

東京でたまにレンタカー借りると、結構渋滞にハマります。なので、空をスイスイ飛ぶ自動車で目的地にストレスなく到着できる世界は個人的に夢があります。

ただ、「空飛ぶ車って事故ったりしないのだろうか」という疑問がすぐに脳をよぎります。
大学時代に数理最適化問題をかじった身としては、なんでも数理最適化問題に落とし込もうとする癖があるので、すぐこういう発想になります。

空飛ぶ車の実現はト○タとかに任せておくとして、気が変わらないうちに早速問題について考えます。

数理最適化の一般的な流れとしては
「問題の観察」⇒「モデル化」⇒「アルゴリズム考案」⇒「評価」
だと認識しているので、本ページではまず「問題の観察」と「モデル化」について記載しようと思います。

問題の観察

まずは簡単なところから問題を眺めていくことにしましょう。

車1台の場合

まず、一つの車が空飛ぶ世界がどんな感じなのかを妄想してみます。
色々議論があるかとは思いますが、私のイメージでは下記のような感じです。

空飛ぶ車がぶつからないようにするために向けて(数理モデル化編)_1.jpg

それっぽくモデル化するために難しいことを捨象したとか言わない

ある車に着目した際に、その挙動を記述するために必要な変数は下記のような感じでしょうか。

動作に関する変数

太字が変数
動作1. z軸の正の向きにある加速度ある時間加速度運動
動作2. ある時間等速直線運動
動作3. z軸の負の向きにある加速度ある時間加速度運動
動作4. ある地上距離で停止
動作5. 到着地点(x,y)の正の方向にある加速度ある時間加速度運動
動作6. ある時間等速直線運動
動作7. 到着地点(x,y)点の負の方向にある加速度ある時間加速度運動
動作8. ある地上距離で停止
動作9. z軸の負の向きにある加速度ある時間加速度運動
動作10. ある時間等速直線運動
動作11. z軸の正の向きにある加速度ある時間加速度運動

出発・到着に関する変数

太字が変数
ある出発地点からある出発時刻に離陸し
ある到着地点ある到着時刻に着陸する。

車複数台の場合

一台の車が空を占有できるならいいのですが、そんなことはありえないので車同士がぶつかるという要素を考えなければいけません。

では車同士がぶつかりそうで危険な時とはどんな時でしょうか。
自然に思いつくこととしては「車間距離がある閾値未満である」事象であると思います。
現実でも安全運転のため車間距離を空けて運転すると思いますので、車間距離がある閾値以下だとキケン!みたいなイメージです。

絵で表すとこんな感じです。

空飛ぶ車がぶつからないようにするために向けて(数理モデル化編)_2.jpg

複数車に着目した際に、その挙動を記述するために必要な変数は下記のような感じでしょうか。
太字が変数
ある時刻における各車の車間距離
各車の車間距離の閾値

その他

航空法とかで飛べる高さにも限界があると思うので、高度に関しても配慮が必要です。
高度について記述するために必要な変数は下記のような感じでしょうか。

太字が変数
最低高度以上最高高度以下で運転する

モデル化

今後、アルゴリズムを考えて数値解析なりシミュレーションをやるために必要である、モデルを構築していこうと思います。

記号化

変数は記号化したほうが都合がいいので、じゃんじゃん記号化していきます。

まずは問題全体を記述するための変数記号です。

変数記号 変数の意味(太字に対応) 制約
$i$ 空を飛んでる車体にふる番号 正の整数
$t$ 時刻 正の実数
$h_{min}$ 最低高度以上最高高度以下で運転する 正の実数
$h_{max}$ 最低高度以上最高高度以下で運転する 正の実数

次に各車を記述するための変数記号です。

変数記号 変数の意味(太字に対応) 制約
$t_{i}^{N}$ 動作N終了時刻 正の実数
$p_{i}^{t} = (x_{i}^{t},y_{i}^{t},z_{i}^{t})^{T}$ 時刻$t$における車の位置 正の実数
$\dot{p_{i}^{t}} $ 時刻$t$における車の速度 実数
$\ddot{p_{i}^{t}}$ 時刻$t$における車の加速度 実数
$p_{i}^{takeoff}$ ある出発地点からある出発時刻に離陸し 要素は全て正の実数
$t_{i}^{takeoff}$ ある出発地点からある出発時刻に離陸し 正の実数
$a_{i}^{rise,positive} $ 動作1. z軸の正の向きに ある加速度 である時間加速度運動 正の実数
$d_{i}^{rise,positive} $ 動作1. z軸の正の向きにある加速度で ある時間 加速度運動 正の実数
$d_{i}^{rise,uniform} $ 動作2. ある時間等速直線運動 正の実数
$a_{i}^{rise,negative} $ 動作3. z軸の負の向きにある加速度である時間加速度運動 正の実数
$d_{i}^{rise,negative} $ 動作3. z軸の負の向きにある加速度である時間加速度運動 正の実数
$a_{i}^{flight,positive}$ 動作5. 到着地点(x,y)の正の方向にある加速度である時間加速度運動 正の実数
$d_{i}^{flight,positive}$ 動作5. 到着地点(x,y)の正の方向にある加速度である時間加速度運動 正の実数
$d_{i}^{flight,uniform}$ 動作6. ある時間等速直線運動 正の実数
$a_{i}^{flight,negative}$ 動作7. 到着地点(x,y)点の負の方向にある加速度である時間加速度運動 正の実数
$d_{i}^{flight,negative}$ 動作7. 到着地点(x,y)点の負の方向にある加速度である時間加速度運動 正の実数
$a_{i}^{fall,negative} $ 動作9. z軸の負の向きにある加速度である時間加速度運動 正の実数
$d_{i}^{fall,negative}$ 動作9. z軸の負の向きにある加速度である時間加速度運動 正の実数
$d_{i}^{fall,uniform} $ 動作10. ある時間等速直線運動 正の実数
$a_{i}^{fall,positive} $ 動作11. z軸の正の向きにある加速度である時間加速度運動 正の実数
$d_{i}^{fall,positive} $ 動作11. z軸の正の向きにある加速度である時間加速度運動 正の実数
$p_{i}^{landing} $ ある到着地点にある到着時刻に着陸する。 要素は全て正の実数
$t_{i}^{landing}$ ある到着地点にある到着時刻に着陸する。 正の実数
$\hat{p} $ 出発地点から到着地点の方向の単位ベクトル 要素は全て実数

なお
$\hat{p} = \frac{(p_{i}^{landing} - p_{i}^{takeoff})}{|p_{i}^{landing} - p_{i}^{takeoff}|} $
となります。

最後に複数車を記述するための変数記号です。

変数記号 変数の意味(太字に対応) 制約
$D_{(i,j)}^{t}$ ある時刻における車$i$と車$j$の車間距離 正の実数
$D_{th}$ 各車の車間距離の閾値 正の実数

記号間の関係

$D_{(i,j)}^{t}$を各変数から導いていきます。

各車の動きを記述するための変数の導出

まずは、時刻$t$における車の加速度、速度、位置を他変数から導いていきます。
場合分けして高校物理の知識を用いて整理していきます。

動作  時刻$t$ 加速度$\ddot{p_{i}^{t}}$ 速度$\dot{p_{i}^{t}}$ 位置$p_{i}^{t}$
離陸  $t = t_{i}^{takeoff}$ $(0,0,0)^{T}$  $(0,0,0)^{T}$  $p_{i}^{takeoff}$
動作1  $t_{i}^{takeoff} < t < t_{i}^{takeoff} + d_{i}^{rise,positive}$ $a_{i}^{rise,positive}*(0,0,1)^{T}$  $a_{i}^{rise,positive}*(0,0,1)^{T} * (t-t_{i}^{takeoff})$  $p_{i}^{takeoff} + \frac{1}{2} * a_{i}^{rise,positive}*(0,0,1)^{T} * (t-t_{i}^{takeoff})^2$
動作1後  $t = t_{i}^{1} = t_{i}^{takeoff} + d_{i}^{rise,positive}$ $(0,0,0)^{T}$ $\dot{p_{i}^{t_{i}^{1}}} = a_{i}^{rise,positive}*(0,0,1)^{T} * d_{i}^{rise,positive} $ $p_{i}^{t_{i}^{1}} = p_{i}^{takeoff} + \frac{1}{2} * a_{i}^{rise,positive}*(0,0,1)^{T} * (d_{i}^{rise,positive})^{2}$
動作2 $t_{i}^{1} < t < t_{i}^{1} + d_{i}^{rise,uniform}$ $(0,0,0)^{T}$ $\dot{p_{i}^{t_{i}^{1}}} $  $ p_{i}^{t_{i}^{1}} + \dot{p_{i}^{t_{i}^{1}}} * (t-t_{1})$
動作2後 $t = t_{i}^{2} = t_{i}^{1} + d_{i}^{rise,uniform}$ $(0,0,0)^{T}$ $\dot{p_{i}^{t_{i}^{2}}} = \dot{p_{i}^{t_{i}^{1}}} $  $p_{i}^{t_{i}^{2}} = p_{i}^{t_{i}^{1}} + \dot{p_{i}^{t_{i}^{1}}} * d_{i}^{rise,uniform}$
動作3 $t_{i}^{2} < t < t_{i}^{2} + d_{i}^{rise,negative}$ $ a_{i}^{rise,negative}*(0,0,-1)^{T} $ $ \dot{p_{i}^{t_{i}^{2}}} + a_{i}^{rise,negative}*(0,0,-1)^{T} * (t - t_{i}^{2}) $ $ p_{i}^{t_{i}^{2}} + \dot{p_{i}^{t_{i}^{2}}}*(t - t_{i}^{2}) + \frac{1}{2} * a_{i}^{rise,negative} *(0,0,-1)^{T} * (t - t_{i}^{2})^{2} $
動作3後 $t = t_{i}^{3} = t_{i}^{2} + d_{i}^{rise,negative} $ $(0,0,0)^{T}$ $ \dot{p_{i}^{t_{i}^{3}}} = \dot{p_{i}^{t_{i}^{2}}} + a_{i}^{rise,negative} * (0,0,-1)^{T} * d_{i}^{rise,negative} = 0 $ $ p_{i}^{t_{i}^{3}} = p_{i}^{t_{i}^{2}} + \dot{p_{i}^{t_{i}^{2}}}*d_{i}^{rise,negative} + \frac{1}{2} * a_{i}^{rise,negative} * (0,0,-1)^{T} * (d_{i}^{rise,negative})^{2} $
動作5 $t_{i}^{3} < t < t_{i}^{3} + d_{i}^{flight,positive}$ $ a_{i}^{flight,positive} * \hat{p} $ $ a_{i}^{flight,positive} * \hat{p}*(t - t_{i}^{3})$  $ p_{i}^{t_{i}^{3}} + \frac{1}{2} * a_{i}^{flight,positive} *\hat{p} * (t - t_{i}^{3})^{2} $
動作5後 $ t = t_{i}^{5} = t_{i}^{3} + d_{i}^{flight,positive} $ $ (0,0,0)^{T} $ $ \dot{p_{i}^{t_{i}^{5}}} = a_{i}^{flight,positive} * \hat{p}*(t - t_{i}^{3}) $  $p_{i}^{t_{i}^{5}} = p_{i}^{t_{i}^{3}} + \frac{1}{2} * a_{i}^{flight,positive} *\hat{p} * (d_{i}^{flight,positive})^{2} $
動作6 $t_{i}^{5} < t < t_{i}^{5} + d_{i}^{flight,uniform}$ $ (0,0,0)^{T} $ $ \dot{p_{i}^{t_{i}^{5}}} $ $ p_{i}^{t_{i}^{5}} + \dot{p_{i}^{t_{i}^{5}}} * (t - t_{i}^{5}) $
動作6後 $ t = t_{i}^{6} = t_{i}^{5} + d_{i}^{flight,uniform} $ $ (0,0,0)^{T} $ $ \dot{p_{i}^{t_{i}^{6}}} = \dot{p_{i}^{t_{i}^{5}}}$  $p_{i}^{t_{i}^{6}} = p_{i}^{t_{i}^{5}} + \dot{p_{i}^{t_{i}^{5}}} * d_{i}^{flight,uniform} $
動作7 $ t_{i}^{6} < t < t_{i}^{6} + d_{i}^{flight,negative} $ $ a_{i}^{flight,negative} * (-\hat{p}) $ $ \dot{p_{i}^{t_{i}^{6}}} + a_{i}^{flight,negative} * (-\hat{p}) * (t - t_{i}^{6}) $   $ p_{i}^{t_{i}^{6}} + \dot{p_{i}^{t_{i}^{6}}} * (t - t_{i}^{6}) + \frac{1}{2} * a_{i}^{flight,negative} *(-\hat{p}) * (t - t_{i}^{6})^{2} $
動作7後 $ t = t_{i}^{7} = t_{i}^{6} + d_{i}^{flight,negative} $ $ (0,0,0)^{T} $ $ \dot{p_{i}^{t_{i}^{7}}} = \dot{p_{i}^{t_{i}^{6}}} + a_{i}^{flight,negative} * (-\hat{p}) * d_{i}^{flight,negative} = 0 $  $ p_{i}^{t_{i}^{7}} = p_{i}^{t_{i}^{6}} + \dot{p_{i}^{t_{i}^{6}}} * d_{i}^{flight,negative} + \frac{1}{2} * a_{i}^{flight,negative} *(-\hat{p}) * (d_{i}^{flight,negative})^{2} $
動作9 $ t_{i}^{7} < t < t_{i}^{7} + d_{i}^{fall,negative} $ $ a_{i}^{fall,negative}*(0,0,-1)^{T} $ $ a_{i}^{fall,negative}*(0,0,-1)^{T} * (t - t_{i}^{7}) $  $ p_{i}^{t_{i}^{7}} + \frac{1}{2} * a_{i}^{fall,negative} * (0,0,-1)^{T} * (t - t_{i}^{7})^{2} $
動作9後 $ t = t_{i}^{9} = t_{i}^{7} + d_{i}^{fall,negative} $ $ (0,0,0)^{T} $ $ \dot{p_{i}^{t_{i}^{9}}} = a_{i}^{fall,negative}*(0,0,-1)^{T} * d_{i}^{fall,negative} $ $p_{i}^{t_{i}^{9}} = p_{i}^{t_{i}^{7}} + \frac{1}{2} * a_{i}^{fall,negative} * (0,0,-1)^{T} * (t - t_{i}^{7})^{2}$
動作10 $ t_{i}^{9} < t < t_{i}^{9} + d_{i}^{fall,uniform} $ $ (0,0,0)^{T} $ $\dot{p_{i}^{t_{i}^{9}}}$  $p_{i}^{t_{i}^{9}} + \dot{p_{i}^{t_{i}^{9}}} * (t - t_{i}^{9})$
動作10後 $ t = t_{i}^{9} + d_{i}^{fall,uniform} $ $ (0,0,0)^{T} $ $ \dot{p_{i}^{t_{i}^{10}}} = \dot{p_{i}^{t_{i}^{9}}} $ $p_{i}^{t_{i}^{10}} = p_{i}^{t_{i}^{9}} + \dot{p_{i}^{t_{i}^{9}}} * (t - t_{i}^{9})$
動作11 $ t_{i}^{10} < t < t_{i}^{10} + d_{i}^{fall,positive} $ $ a_{i}^{fall,positive}*(0,0,1)^{T} $ $\dot{p_{i}^{t_{i}^{10}}} + a_{i}^{fall,positive}*(0,0,1)^{T} * (t - t_{i}^{10})$ $ p_{i}^{t_{i}^{10}} + \dot{p_{i}^{t_{i}^{10}}} * (t - t_{i}^{10}) + \frac{1}{2} * a_{i}^{fall,positive} * (0,0,1)^{T} * (t - t_{i}^{10})^{2} $
着陸 $ t = t_{i}^{10} + d_{i}^{fall,positive} = t_{i}^{landing} $ $ (0,0,0)^{T} $ $ \dot{p_{i}^{t_{i}^{11}}} = \dot{p_{i}^{t_{i}^{10}}} + a_{i}^{fall,positive}*(0,0,1)^{T} * d_{i}^{fall,positive} = 0 $  $ p_{i}^{t_{i}^{11}} = p_{i}^{t_{i}^{10}} + \dot{p_{i}^{t_{i}^{10}}} * d_{i}^{fall,positive} + \frac{1}{2} * a_{i}^{fall,positive} * (0,0,1)^{T} * (d_{i}^{fall,positive})^{2} = p_{i}^{landing}$

各車間の距離を記述するための変数の導出

2車間の車間距離

先ほど導いた$p_{i}^{t}$を用いて導いていきます。
2車間の車間距離は単にユークリッド距離を使います。

$D_{(i,j)}^{t} = |p_{i}^{t} - p_{j}^{t}| = \sqrt{(x_{i}^{t}-x_{j}^{t})^2+(y_{i}^{t}-y_{j}^{t})^2 + (z_{i}^{t}-z_{j}^{t})^2}$

あるときに最も車間距離が近い2つの車の車間距離

あるときに最も車間距離が近い2つの車の車間距離が閾値以上であれば、その時は全ての車が車間距離を保っていて安全な世界といえるでしょう。

あるときに最も車間距離が近い2つの車の車間距離は下記のとおりとなります
$\min_{i,j} D_{(i,j)}^{t}$

おわりに

問題の観察とモデル化を行いました。
次回は本モデルを用いて、数値解析プログラムを書いていこうと思います。

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.