1、走行パターン
均衡速度Vb、当区間への進入速度Vi、次の区間への進出速度Vo(=次の区間のVi)、勾配nが条件として与えられる。しかし、加速しきれなかったり、速度が低下したりで次の区間へVoで進出できるかどうかは分からない。またVoが低ければ、減速しきるためにViが低くなければならない。それら全てのパターンをグラフとして書き出してみると次の通り。
パターン1、これはVi≦Vbのとき。
区間長D、進入速度Vi、進出速度Vd、制限速度Vlを定めたとき、D=Dx=Da+Dbとして加速曲線と減速曲線の交点は下限値条件無しでDa、Dbを用い、
D=Da(n,Vi,Vx)+Db(n,Vo,Vx)=Da(n,0,Vx)-Da(n,0,Vi)+Db(n,0,Vx)-Db(n,0,Vo)
D+Da(n,0,Vi)+Db(n,0,Vo)=D(n,0,Vx)+Db(n,0,Vx)=加減速距離に対応するVx
を満たすVxを考える。これはエクセル上ではデータ範囲の値を上限として必ず存在する。次に
D=Da(n,Vi,Viex)を満たすViex ⇒ D+Da(n,0,Vi)=加速距離に対応する速度=Viex
D=Db(n,Vo,Vosx)を満たすVosx ⇒ D+Db(n,0,Vo)=減速距離に対応する速度=Vosx
を考えると、Vx、Vl、Viex、Vosxのうち最低値を最高速度Vmとし、(1)を基本とし
D=加速距離Da+巡航距離Dc+減速距離Db ⇒ Dc=D-Da(n,Vi,Vm)-Db(n,Vo,Vm)
Tt=Ta(n,Vi,Vm)+(D-Da(n,Vi,Vm)-Db(n,Vo,Vm))/Vm×3600+Tb(n,Vo,Vm)
Tt=MAX(0,Ta(n , 0→Vm)-Ta(n , 0→Vi))+(D-MAX(0,Da(n , 0→Vm)-Da(n , 0→Vi))-MAX(0,Dd(n , 0→Vm)-Dd(n , 0→Vo))/Vm×3600+MAX(0,Td(n , 0→Vm)-Td(n , 0→Vo))
Vm=Viexのとき次区間のViはViexとなる。Vm=Vosxのとき次区間のVoはVosxとなる。
パターン2、これはVb<Viのとき
減速を開始する速度をVvとすると下限値条件無しでDd、Dbを用い
D=Dd(n,Vi,Vy)+Db(n,Vo,Vy)=Da(n,0,Vi)-Da(n,0,Vy)+Db(n,0,Vy)-Db(n,0,Vo)
-D+Da(n,0,Vi)-Db(n,0,Vo)=Da(n,0,Vy)-Db(n,0,Vy)=加減速距離に対応するVy
を満たすVyを取る。次に
-D+Da(n,0,Vi)=加速距離に対応する速度=Viey
D+Db(n,0,Vo)=減速距離に対応する速度=Vosy
を考えるが、以上3数はエラーが出るので「Iferror」で回避する。(5)はVo<Vy<Viで、(6)はVy<VoでVieyが次区間のViを規定、(7)はVi<VyでVosyが前区間のVoを規定。以上から(1)を基本として
Dd(n,Vi,Vb)+Db(n,Vo,Vb)≦Dのとき、Vv=Vb
D<Dd(n,Vi,Vb)+Db(n,Vo,Vb)でVo<Vv<ViのときVv=Vy
D<Dd(n,Vi,Vb)+Db(n,Vo,Vb)でViey<VoのときVv=Viey
D<Dd(n,Vi,Vb)+Db(n,Vo,Vb)でVosy<ViのときVv=Vosy
として
D=下降距離Dd+巡航距離Dc+減速距離Db ⇒ Dc=D-Dd(n,Vi,Vv)-Db(n,Vo,Vv)
Tt=Td(n,Vi,Vv)+(D-Dd(n,Vi,Vv)-Db(n,Vo,Vv))/Vv×3600+Tb(n,Vo,Vv)
Tt=MAX(0,Ta(n , 0→Vi)-Ta(n , 0→Vv))+(D-MAX(0,Da(n , 0→Vi)-Da(n , 0→Vv))-MAX(0,Dd(n , 0→Vv)-Dd(n , 0→Vo)))/Vv×3600+MAX(0,Td(n , 0→Vv)-Td(n , 0→Vo))
Vv=Vieyのとき次区間のViはVieyとなる。Vm=Vosyのとき次区間のVoはVosyとなる。
2、判断パターン
バカ正直にこれらのパターンを判断しようとするとこんな感じに8段階にごちゃごちゃ判断しなければならないのだが・・・
① 減速のみの区間をVosとViによって判定
VosはVlとVbとViに関わらず次式で求められる。
Vos=Lookup(D+Lookup(Vo,速度Table,n減速距離Table),n減速距離Table,速度Table)
パターン1(8)とパターン2(8)は共にVos<Viのとき無条件で減速のみの区間でかつVosを前区間に渡さなければならないことを示す。当該区間の進入速度Viの上限値としてViに修正をかけると、Vosを直接用いた計算が要らなくなる。
② 減速が無い区間をVoとVieによって判定
Vbを単純に「MATCH(0,加速度Table,-1)」で求めると、0<加速度を満たす最大速度を返してくる。これはVbが誤差で正しいVbの下に出るためで、絶対値積算グラフで「MATCH(0,加速度Table,-1)+d」Vbを求めることで回避する。よってVieは加速と下降で分け、
Viex=Min(Lup(D+Lup(Vi,速度T,n加距T),n加距T,速度T),MATCH(0,加速度T,-1))
Viey=Max(Iferror(Lup(-D+Lup(Vi,速度T,n加距T),n加距T,速度T),0),Match(0,加速度T,-1)+d)
として計算する。「-D+Lup(Vi,速度T,n加距T)」が負の値を取るとき、対応する加速距離は無いのでエラーが出るが、これはつまりVb以下で逆加速を取ってるからなのでVbを取るようにエラーで0が返るようにIFERROR関数を設定しておく。これでVie≦Voを満たしたときに減速が無いことを判定できる。ければならないことを示す。当該区間の進出速度Voの上限値としてVoに修正をかけると、Vieを直接用いた計算が要らなくなる。
③ 前後区間の整合性を取る
進入速度・進出速度は、区間の前後で停車するなら0にする、当該区間より制限が低かったらその低い制限に合わせる、さらに①②より前の区間のVie、後ろの区間のVosを制限速度の一つと考える・・・の3点について整合性を取ることで最終的な決定を見る。が、区間長に対して加速が鈍いときは隣接区間だけでなくその向こう、それで足りなければそのまた向こうの区間まで考慮しなければならないが、これは繰り返し計算をすることで実現し得る。短い区間があればあるほど、最高速度が高ければ高いほど繰り返しが必要になる。
3、関数を再定義
Da=Max(0,Lookup(V2,速度Table,n加速距離Table)-Lookup(V1,速度Table,n加速距離Table))
Ta=Max(0,Lookup(V2,速度Table,n加速時間Table)-Lookup(V1,速度Table,n加速時間Table))
Dd=Max(0,Lookup(V1,速度Table,n加速距離Table)-Lookup(V2,速度Table,n加速距離Table))
Td=Max(0,Lookup(V1,速度Table,n加速時間Table)-Lookup(V2,速度Table,n加速時間Table))
Db=Max(0,Lookup(V2,速度Table,n減速距離Table)-Lookup(V1,速度Table,n減速距離Table))
Tb=Max(0,Lookup(V2,速度Table,n減速時間Table)-Lookup(V1,速度Table,n減速時間Table))
ということで、改めてこんな関数を定義してみる。DはDistance、つまり走った距離。TはTime、つまり走った時間。小文字は、aは加速、dは均衡速度より高い速度で区間に進入、bは減速の場合。aとdはグラフとしては同じものを使う。前回のエクセルについて、加速曲線を伸ばすと曲線が上に反っていく。これがdの部分。逆に言えば速度が上昇してるときは、そこから先は使えない。使えないから均衡速度Vbを使って判断しなければならない。
IF(Vl<Vb,1,-1) を用いると、Vl、Vbを与えることで同じ加速距離Tableを用いてることからDaとDd、TaとTdを統合でき、
D=Max(0,IF(Vl<Vb,1,-1)*(Lookup(V2,速度Table,n加速距離Table)-Lookup(V1,速度Table,n加速距離Table)))
T=Max(0,IF(Vl<Vb,1,-1)*(Lookup(V2,速度Table,n加速時間Table)-Lookup(V1,速度Table,n加速時間Table)))
として統合できる。このときVi、Vo、V、Vl、Vbを定めたときの時間計算式を
Tt=Max(0,T(n,Vi,V))+(D-Max(0,D(n,Vi,V))-Max(0,Db(n,Vo,V)))/V×3600+Max(0,Tb(n,Vo,V))
と再定義できる。
4、走行パターンの整理統合
2によりパターン1、2にあるような、実際の走行速度とVi、Voが乖離するパターンが無くなるので、そこを判断する必要が無くなる。よってパターン1は(1)に(2)(3)(4)(5)が、(6)に(7)(8)、パターン2は(1)に(2)(3)(4)(5)が、(6)に(7)(8)が収斂し、それぞれ整理してみると、
Vl<Vbのとき、
① パターン1(1)加速、Vlで巡航、減速。(加速距離0、巡航距離0を考慮。)
このときV=Vlで良い。
② パターン1(6)制限まで加速せずに減速。(減速開始速度Vx≒Vlを考慮。)
このとき次式からV=Vxで良い。
Vx=Lookup(D+Lookup(Vi,速度Table,n加速距離Table)+Lookup(Vo,速度Table,n減速距離Table),n加減速距離xTable,速度Table)
以上二つからV=IF(Vl<Vb,MIN(Vl,Vx),)として2のTtを求める式を用いれば良い。
Vb<Vlのとき
Dd+Db=Max(0,Lookup(Vi,速度Table,n加速距離Table)-Lookup(Vb,速度Table,n加速距離Table))+Max(0,Lookup(Vb,速度Table,n減速距離Table)-Lookup(Vo,速度Table,n減速距離Table))
Vy=Lookup(Lookup(Vie,速度Table,n加速距離Table)-Lookup(Vo,速度Table,n減速距離Table),n加減速距離yTable,速度Table)
③ D≦Dd+Dbのとき、パターン2(1)で、V=Vb+dでよい。
④ Dd+Db<Dのとき、パターン2(6)で、V=Vyで良い。ViとVoが修正されているので必ずVo≦Vy≦Viを満たす。
以上二つからV=IF(Vb<=Vl,Max(Vb,Vy),)として2のTtを求める式を用いれば良い。
これらの判定をまとめて、性能曲線や制限速度、ViとVoから所要時間を1区間について算出するエクセルは次の通り。
・・・と思ったら容量制限でござるorz