自慢になりますが「地下鉄でGO!」の機能として画期的なのはAIがついていること!
今日から3回くらいに分けて自慢の停車AIについて語っていきたいと思います!
0cm停車を自動でする(たまに外す)プログラムは以下の通りです
xxx=x-kohi/50:xxx=xxx/2110*xxx
paa=aa
if xxx/12>y:aa=-1
if xxx/19>y:aa=-2
if xxx/30>y:aa=-3
if xxx/40>y:aa=-4
if xxx/49>y:aa=-5
if xxx/57>y:aa=-6
if xxx/63>y:aa=-7
if xxx/72>y:aa=-8
if paa<aa:aa=paa+1
if paa>aa:aa=paa-1
ここで重要なのは緑色の部分。
緑色の部分では
変数yは残りの距離、xは速度が代入されている変数で
xxxは多少の補正がかかっているもののxの2乗に比例する変数です。
aaはマスコンのブレーキ「B?」の?が代入されている変数です。
マイナスがついているのは加速減速を区別するための意味づけにすぎません。
気にしなくていいです。
(今更ですがこの電車はワンハンドル操作です、加速減速P5~B8までひとつの変数で管理してます)
さて、基礎知識としてここで速度と距離の関係の話をしましょう。
ある速度で移動している物体が一定の減速度で減速して止まったとき、それまでに進んだ距離は最初減速し始めるときの速度の2乗に比例する、っていう法則みたいなのがあります。
たとえば時速60キロで走っている電車がブレーキをかけたら200m先で停車したとしましょう。
同じ強さのブレーキでは時速30で減速した場合50m先で停車することが計算から分かります。
つまり話を戻すと、電車が走っているときのブレーキの強さを決定するAIはどうなっているのかというと、
ブレーキの強さが8パターンあるので、8回、各々の強さのブレーキで減速した場合どこに停車するかを
計算で出し、一番0m(停車位置)に近いときのブレーキの強さを加速度の変数aaに代入する
というふうになっているのです。
計算で出すというのはつまりさっきの2乗の法則で計算すれば出るということです。
8回各々の強さで計算というのは、ちょうど緑のところですね。
このアルゴリズムでは、停車位置が0mをオーバーするものの中で一番近い停車位置の場合のブレーキを計算しています。
さて次は緑の行を1行1行解説していきます。
次回:技術解説「地下鉄でGO!」その7 0cm停車を器用にこなすAI②