10%許容法についてです。(あくまで実験中機能)
また長くなります。(下手に丁寧にしようとして言葉が多すぎるのかな?)
列車は始点に到着した時、到着時刻Aと、運行周期Cと始点発時刻Oから
「自分の次の始発時刻はDだ」という判断をして、時刻Dまで駅で待機しますが
10%許容法は、このDの求め方を少し修正します。
まず、許容がいくつであろうと、前に定義した式
D = Cの倍数 + O
であることは違いありません。
違いは、この中で Cを何倍するかです。
元の方法 (0%許容):
D > A
この条件に合う最小の Cの倍数を選びます。必ず出発予定時刻は到着時刻より後になります。
10%許容法:
D > A - (C x 0.1)
この条件に合う最小のCの倍数を選ぶのですが、右辺の値が小さくなっているので
選択されるCの倍数がひとまわり小さくなる(1周期前になる)可能性が生まれます。
これによって、一定範囲内(Cの10%未満)で到着している場合の段落ちを防げます。
具体例を以下に示します。
路線の C を2400とし、列車のOは800とします。
言葉を簡単にするため、Cを仮想1日とし、列車は 8時の列車ということにします。
運行開始から 4日目、ゲームの絶対世界時刻 W は9600 を過ぎています。
この日の列車の出発予定時刻は
D = 2400 x 4 + 800 = 10400
です。
列車が出発予定時刻より前に駅に到着した場合は、予定通り 10400 に出発します。
列車が遅れて 10450 に駅に到着したとしましょう。
元 (0%許容)だと:
D = 2400 x 5 + 800 = 12800 > W
つまり「この日は運休」してしまいます。(当然、後続の列車はつまります。)
10%許容だと:
D = 2400 x 4 + 800 = 10400 > W - Cx0.1 = 10450 - 2400 x 0.1 = 10210
このように遅れてはいても、この日の8時に出発するもりでしたので直ちに出発します。
(この時、積載時間なども加わり実際の出発時刻が 10750 になったとすると、
実績出発 10750 - 予定出発 10400 = 350 が、現在のこの列車の遅延時間として記憶されます。
これは先の運行で取り返そうとします。)
このように、ちょっとの遅れのせいで、まるまる1周期飛ばされてしまうのを防ぎます。
(大幅な遅れは無理ですが。)
大雑把に 50% 許容までは意味を持つと思われますが、いろいろ問題もありそうなので、今は 10%で試しています。
◆ 10%許容法は、周期落ちさせないかわりに、行列発車させてしまうという事ですか?
「行列発車」という意味がとりきれていませんが、「予定出発時間を無視して」という意味で言っているのなら、
正確にはそうではありません。たしかにすぐに出発はしますが、予定時刻 D を求めて参考にします。
実績出発時刻 - 予定出発時刻 が遅れとして記憶されていますので、
先の運行でこれが 0 になるよう (元のダイヤに戻るよう) 調整されていきます。
(これは、駅間指定だけの運行と一緒)
違う意味でおっしゃっていたら、ご指摘ください。
これって、放置すると行列が成長してデットロックかかる可能性が高くなるような。。
ダイヤ全体を見て無理が無いのなら、(どこか無理な区間があっても、他で余裕があるなら)
(ある程度長く見て) 行列が成長していくということは無いはずです。
行列が成長してしまうようなら、根本的にダイヤが無理なはず。
これは10%許容法の有無に関係ありません。
また、この調整法単体は列車間の関係などを見たり影響を与えたりするアルゴリズムじゃないので、
理論的にデッドロックを生むような性質のものではありません。
(単調増加する「ゲーム内の絶対時間」しか使っていないので、「ロック」が無いのです。)
起こるとすると、「デッドロック」というよりは「ポジティヴフィードバック」ですかね?
しかしこれも10%許容法の有無には関係ないはずです。
なぜなら、列車全てについて D の判断に使う世界時刻の目盛が、一様に (C*0.1) だけ前にずれるわけで、
この中に他の状態変数が入っていないので「フィードバック」はかかり得ないからです。
(Cは係数ですので運行状態によって変化はしない。)
また、実際の列車の運行可能周期よりCが極端に短いと、「駅に到着する度に遅延していると判断してしまう」ように見えますが、
調整分が C に対する割合いで決まっていること
出発時刻 D が C の整数倍 (+ O) から算出されること
の二点により、やはりフィードバックにはなりません。
証明(?)に間違いがあったらご指摘ください。
(なんとなく、o_oさんの言っている「何かしら詰まりが増長する問題」がどこかにありそうな気がすんだよなあ。。。)