前回の緑色の部分だけピックアップしてきました。

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
この1行目から解説します。

if xxx/12>y:aa=-1


だと速度の2乗を12で割ったときの数が残り距離より大きければブレーキをB1にするというプログラムです。


つまり今の速度と距離では、B1のブレーキでは少なくとも0cmをオーバーしてしまいますよ、という意味です。

(でも12という数字は自分で適当だと思って決めた数字なので多少なりとも誤差はあります。)


なのでB1より強いブレーキにしなければなりません。そのための次の行です。


if xxx/19>y:aa=-2


今度は19で割っているので12で割ったときより小さい値になっています。

それでもまだxxx/19のほうが大きいなら、B2でうまく停車できる場合よりもっと速度が速いことになるのでさらに強いブレーキをかけなければいけません。


もしxxx/19のほうが小さいならaa=-2は読まれないのでaa=-1のままとなってしまうのでしばらくB1のブレーキが続くわけですが、

ブレーキで減速中にも常にこのプログラムは読まれ続けているのでいつかB2でも間に合わなくなるまで距離が詰まる瞬間がきます。


そこで2行目のさっきの

xxx/19>y

が満たされはじめてブレーキがB2となります。


こうして徐々に距離が縮まっていくのですが、このままではブレーキがどんどん強くなって限界のB8まで

いってしまいそうです・・・が、そうならないために少しB5あたりで補正を入れてあります。


B6より強いブレーキをなるべく使わせないためです。


まず、B5で停車する位置を計算上で少し狂わせます。


if xxx/49>y:aa=-5

とありますがB5のときに必ずしも

xxx/49

の位置で停車するわけではありません。少し補正を入れて停車までの距離を長く見積もらせています。


するとどうなるのかというと本来B5では手前に停車するはずの距離でもB5のブレーキがかかるということです!



そうすればB6のブレーキがかかることは滅多にないはずです!


B5でずっとブレーキをかけ続けていると手前で停車しそうになるので、だんだんB4でも良くなりブレーキがB4になります。あとはB4とB5の間を行ったりきたりして、うまく0cmに停まります。



一応、勾配とか、加速度の急激な変化を軽減する補正など、様々な要因がはらんでいてブレーキが思うように効かないこともあるのでB6以上でも使われないわけではありません。

なので、B6以上のブレーキアルゴリズムでは、B5のときよりもっと補正をかけて、0m地点よりもっと奥に停車するように見積もらせておきます。



そうすればブレーキが強く効いてB5でも停車できる速度に落ち着くようになります。


当然、補正次第でB6に落ち着かせることやB3に落ち着かせることも可能です。




あとの問題は、ブレーキの効き始めのタイミングをどう決定するかです。

どう言う事かと言うと、残り距離がまだ800mもあるのにB1で停車位置がオーバーするといってブレーキをかけ始めてしまったのでは、惰性走行も加速も思うようにできません。



効率よく電車を停車させるには、駅に残り何m以内に近づいたらAIが機能し始めるというようにしなければいけない・・・と思いつくのですが、速度によってその何mというのが大きく変わることが予想されるので、停車AIを起動し始める残り距離を計算するAIも搭載しておかなきゃいかんのだ、ということになるんですね。



ややこしいかもしれませんが、そうなんです。


国語6点の私の文章は読みにくいかもしれませんが、なんとか悟ってください。



次回はそこのプログラムの解説。


次回:技術解説「地下鉄でGO!」その8 0cm停車を器用にこなすAI③