欄をどう考えるかという問題です。選択は二つ、「通過」か「経路外」かです。言えばいいのかな?)理想的には以下のように定義して区別したい。移動するのであれば、この列車はBを「通過」する。ついては「経路外」である。実際には、Eの走行経路は計算で求められますが、その各点が「Bの構内であるか否か」という判定が難しい。通過線を通る場合はその各点は「駅」の情報の中に入っていないからです。左辺が大きすぎれば「B駅を通ろうとするのは、実際の走行よりも遠回りしすぎだ。通るわけがない」という判定です。(急行は優等ホームから発車、など)比較的軽めでそこそこ悪くない判定だと思いますが、ここでεというパラメータが必要なのが厄介なところ。(ちなみに走行経路の計算は、必ず走行方向に合わせて計算する必要があります。信号や一方通行指示で走行方向によって経路が異なるためです。実際にそこを走行する編成によって経路が異なるのは前述の通りです。その他にも速度制限標識の影響なども)前項に関係している問題:編成が表の上のどの駅行に「止まる」と判断するかが難しいために起こる問題です。途中折り返し路線の表示(例えば、関東では京浜東北線のような折り返しパターンを考えてみるといいのでしょうか。Eという折り返し列車を同時に表示して、期待通りに表示できるかという問題です。なんて加えてみるとどうなるでしょう。周期400で、脳内ダイヤを組むと以下のような感じです。350まず、今のロジックでこのように表示できるかという問題と、さらに「折り返したところで時間表示が飛ぶのは見づらい」という問題があります。(後述の「停車と駅間を区別」ができれば少しは解決します。着時と発時が分離されて掲示されますね。合計の区間時間しか設定できないので「着時(予定)」を掲示することができません。原始情報が足りていないのです。擬似的に表示させたければ、駅手前に中継点を設定して、ここに時間を割当てるかです。(後者の場合は特に、前の記事で書いた「中継点での取り扱い」を実現する必要があります。先行しているか遅れているかを色分けや差分表示で見てみたいですね。今の表は縦方向には差分が表示できているが、横方向の値の関係も表示できるといい、ということです。やり過ぎると、表計算ソフトを作り出すようなことになりますのでほどほどにしないといけませんが。他にも気になるところはあったはずなのですが、思い出したら後で追記します。05:44さっそく使ってもらわせてもらったのだが列車ウィンドウにあった時間差?何秒とかのぐらふはなくなったの?詳細を開いたらあったけど。あと、自分のマップだけなのかもしれないけど自動設定?回復にあるやつ使ってるからかもだけど。私の手元で走っている画面だと表示されているけど。Windowsで走らせてみているから、間違いないと思います。それともパッチを落として自分でビルド?後者だとすると、ビルド時の設定が影響しているかも。自動設定?回復にあるやつ使ってるからかもだけど。見てみてその区間の値が変わってしまっていたらバグです。変わっていても、おそらくバグ。変わるのは、「自動設定」によって始点発時刻が変更されて、それにつられて変わるものなので「正常」です。06:49今やってみると表示バーは出ました。自分のやつではバグぽいものやっぱでました。一応写真つけときます。1枚目が一応通常2枚目が変な奴。福島駅の数値は時によって駅間時間変わりますが。21:16simutransでの参考になればよいかとなと思うので紹介します。昼のパターンダイヤを無限に続けるようにするというのはどうでしょうか。これだとわかりやすい時刻表ができます。輸送力が低下するという問題があります。※1そこで鉄道の昼ダイヤちょっと紹介してみます。※同じ時刻に発車する2つの電車がありますが手前の駅で連結済みの1編成の列車です。昼ダイヤは1時間という周期で作られているのがわかるでしょうか。他の路線もだいたい1時間周期です。大阪環状線普通は昼ダイヤで1週42分でした。天王寺で3分調整して45分間隔運行してるようです。すると時刻表見た感じは1時間周期の運行にちゃんとなってるということです。このダイヤでは3分調整してる間に快速電車が来ます。JR天王寺は駅ホームが多いので別のホームに快速を止めてるんでしょう。同じホーム使うとこの時間調整ができなくなっちゃいます。困りますねぇつまり、simutransでもこういった設備のある駅がないと時間調整できないです。快速が42分周期じゃなかったらダイヤなんてない現状のsimutransそのものです。ダイヤ作るためにはTTTのプログラム考えるのも重要ですがsimutransで大きい駅作る必要もあるということです。JR天王寺駅のでかさは無駄ではないということです。いった配線も考えていかないとsimutransでダイヤを組むのは大変ですね。ところでsimutransではこの1時間ってのがないですね。TTTでこの1時間に相当するものを作ってしまえば楽なんじゃね?って考えもアリかもしれません。輸送力が多少犠牲になります。simutransで限界まで本数を増やしたい場合これだとちょっと不都合です。----線路がつながっている路線(普通、優等、その他乗り入れしてる路線すべて)の運行周期は同じにしておかないとダイヤ組めません。線路つながってない別の路線と運行周期がずれても無問題です。線路がつながってない路線で27分周期ダイヤとかあっても問題ありません。そのへんの説明をみなさんにするのがとても難しいのです。それをTTTに判断させようとするとまた面倒になります。15分でよくね?A:混雑してきた場合14分周期とかする必要あるんです・・・そこで最大運行密度を考えてみよう要するに本数どこまで増やせるの?って話です。普通、急行が2:1の割合で運行させる場合を考えます。普通A、普通B、急行、普通Aの順に団子状態で運行させてみます普通Aが出発してから次の普通Aが出発するまでの時間が最大運行密度です。満員時の列車の加速などで決まります。TTTってプログラム面以外にも難しいところ多いですね。編成数に関してですがまずダイヤを決めてからそのダイヤで運行するための編成数を決めたほうがいいかなと思います。線路の構造や信号配置のミスが原因となるものもあるのでややこしいです。22:38こちらもkanedaiさんと同様の症状が出ていますので、これはバグだと思います。530となってしまい全く同じ画面に表示する意味がなくなってしまいます。これの対策をするには例えば、最初に表示する路線を「基本路線」として、追加する路線は「基本路線」に入っている区間だけ表示するようにすれば線路共有部分のダイヤが組みやすくなるかと思います。(わかりにくかったら言ってください)こうすれば京浜東北線問題も解決できるかな、と思います。継続的な始点発時刻の再計算(「回復アシスタント」の中で、「処方3」の「常に再計算」を有効にしている)状態で起きているということで宜しいでしょうか?もし、これが有効で無いのに勝手に時刻が変わるようでしたらお伝えください。更新)事情がわかってきました。微妙なタイミングで「時刻表を更新」すると、発生しうるようです。常に再計算は、時刻表の表示の上でいうと、最初の駅の行の時刻を変更している。「始点の発時刻」を、最初の区間の計画時間にしてしまうという感じではないかと。アシスタントでボタンを押した時に、すぐに編成に反映されるかどうか」など、情報と操作の関係を整理しないと、安全策をとれないでしょう。修正にはしばらくお待ちを。これより下は、今後また別のトラブルが起きたときのために残しておきますが、今は無視してくださって結構です。以下、書き直します)運行密度の高い路線を作って、gonyoさんの鉄道ダイヤ講座を読みながらしばらく走らせてみましたが、(gonyoさん、あとでお返事しますね)なかなか問題の現象に出会えません。kendaiさんにスクリーンショットを貼っていただいたのは助かったのですが、もう少し情報が欲しい。ずらし時間また、その路線に所属する編成数も参考までに知りたいです。(今回の場合は特に最初の区間。異常が発生した時の時刻表全体の様子。オンで(「周期時間」は絶対オフにしてください。Ctrl+Shift+クリックすれば全部オンになります。(二回クリックすると全部オフになるので、もう一回!)ご面倒をおかけしますが、どうか宜しくお願いいたします。計画時間が、「元設定されていた計画時間」+「運行周期」になってしまっているところ。原則、どの区間の計画時間を変更してもいない。自動調整中に、異常な始点発時刻が設定される問題があることは把握しています。運行周期C、運転間隔P、ずらし時間Sの組み合わせによります。大きい値になってしまうという現象です。現在、デバッグ中です。2変数なので決定的には求まらないというのが厄介で。13:04wackdoneさん:042でVCでのビルドが楽になりました。ありがとうございます。<行見出し>自分が言っていたのは駅名の事です。路線をHIDEしたのに駅名が残ったままなのは変かなぁと。<インスタンス初期化完了前のメンバーインスタンスへthisを渡す>コンストラクタでは何もしないで、initメンバ関数で初期化するとか...自分もよく分かりません。/*hi*/"で通りました。定義されていない識別子です。定義されていない識別子です。"_t"を削除してOKでした。ts_per_dayを作るってのはどうでしょう?これなら1日の長さは固定になりますし、内部はtickのままでUIだけday等に変換するのも簡単な気がします。19:07電車の中でコードを睨んでいたら、時刻表まわりのバグがだいたいとれてきました。:(真夜中になる前には最新版をリリースできると思います。19:48皆様への返信を書いてる途中でXがいかれてしまったorzすみません、手短か版になります。近似的に求めることは可能です。どの区間をどのように走行するか事前計算して「これ以上早くできない」という各列車の区間時間の集合を準備します。(個々の列車の理想走行が決まる)そして、今いる順序で無理に走らせたらどうなるかをシミュレートします。(ボトルネックを見つければいいので、NPではなくP問題に落とせると思う。出てきた総マージン量の逆数が限界密度になるんじゃないかな。実際に人間が見て納得するような結果を出す解法に育てるまでには、ずいぶん手間がかかるでしょう。)今だと、時間制約を全部とっぱらってみて、実績時刻を時刻表ウィンドウ上で眺めてみることで問題がわかってこないかな?そのためには、表示している情報が足りない気もしますが。(今はこの情報は出ていない。計画上の始点出発時刻を使っている)列車間の関係はわかりませんね。これに限らず、ダイヤを組む(あるいは線型改良するなど)人の何か助けになる情報を拾って表示できるといいのですが。TTTで表示させると、という話でいいですよね?一応、よくある簡単なアルゴリズムでそこそこ良くなる版のコードは、手元で眠っているのですが少し改修して次の版に入れられればと思います。「基本路線」つまり、pivotを置いて、そこを中心に描くというのはありですね。表示途中でpivotを再設定して構成しなおすが出来るともっといいのかも。基本のロジックが固まれば、そこはUIとしての作り込みで進められます。完璧なアルゴリズムを見つけるのは簡単ではないでしょう。(すでに世間に出ている論文などご存知の方いらっしゃいましたら、教えて頂けると助かります。)「スケジュール」という形で、各エッジの間には時間的前後関係があるため、これをグラフ上でどう扱うかも問題です。「スケジュール」から読みとれるグラフの中には存在しないノードを作り出さなければならず、このためには、下に示す区分けのうちの(1)が出てくるので、完全に位相空間だけでは取り扱えない。そもそもグラフと捉えているのが問題だろうか。この問題は以下に示す2つの問題に分割でき、それぞれの精度(あるいは人間の期待に沿うか)を出すのが難しいです。他の要素との接続関係が記録されなければならない(単方向でよい。接続先はどれか1つの要素に絞らなければならない)(1)の方は頻繁に使用されるので、できるだけ軽い内容であって欲しい。編成のスケジュールを舐めながら、かつ速くしたいので、できれば線形オーダに毛が生えたくらいであって欲しい。いう要求がきつくって。あとは「場合分け」をできるだけしたくないという私のロジック屋としての性格の問題かな。(2)の方は、パズルとしては楽しめると思うので、参加者募集です。20:19yoyoさん、VCの件了解です。_tつきの定義が無いなんて。いう愚痴はおいといて直します。"*/*"を1つのトークンとして認識するなんて、いったいどんなパーザ書いてんだよMSの連中は。いう愚痴は(以下同文)innerの件は、コンストラクタでやってしまわないとinsecureなんですよね。メンバーにしたいくらいなので。(innerからouterを指すポインタが途中で変化してしまっては、innerクラスとは呼べないだろうというわけで。)また、outerインスタンスへのポインタが定まらないデフォルトコンストラクタも廃絶しないと、危険ですし。linkだけにできる)、もうしばらく我慢してやってください。廃止はできないですね。廃止してしまったら本家の機能の改変にあたるので、まず本家に入れてもらえなくなると考えていいと思います。bits_per_dayを準備して、TTTで見える姿だけ変える感じですかね。もとづく1日の中で行われているわけではないので、いいのかなあとも。00:10電車を走らせて、1周程したときに時刻表を表示して実績時間を選択したらえげつない数が出てきました。00:16何も設定せず環状線を走らせただけです。積荷待ちも設定せずです。ところに出てきたと予想。ごめん、タイムテーブル一切無しの方に気がまわりきっていなかった。これだと、アシスタントでダイヤ作るの難しくなりますね。急いで対応してみます。ところに出てきました。01:13TTT-043、TTT-043bからの差し替えです。何度もお手数をおかけしてすみません。バイナリは↓http://ux.getuploader.com/wackdone_simutrans/download/23/simuwin-wackdone-120719c.zipアシスタントが台無しになるバグだったので修正します。kendaiさん、素早いご指摘本当にありがとうございました。(優等マージは前と変わらずできている)特に「仕様変更」の部分が重要かと思います。今回の修正で、「一部だけ計画区間時間値を入れた運行」が可能になりました。ある駅に計画時間を入れると、前の計画時間が入っている駅からその駅までが、指定された計画時間の制御対象になります。(まぎらわしいので、TTT-043、TTT-043bの投稿は削除しました。02:17さっそくの反応ありがとうございます。あと、前のよりもスムーズになった気がします。18:30いろいろ試していますがよくわからない機能が多いので解説なんてとてもできません。今普通+急行の等間隔運行に成功しました。入線振り分け信号で段落ちが直ったようです。団落ちなおす実験してたつもりじゃないんですけどね。普通同士の退避が行われて列車の順序を自動で正しく並べ変えます。線路構造がいかに大事かということだと思います。TTTが完璧なものになったとき入線振り分け信号は役目を終えるんでしょうね。私はいつも車庫に1編成残して運行しています。増発したいときにそうすると便利なのです。今回車庫で眠ってるものに時刻表が割り当てられちゃいました。simutransは乱開発する人多いのでダイヤあんまり考えてられないことが多いかもしれません。急行13分間隔とかだと困ります。これをあわせるには編成数を計算で求める必要があります。編成数が多すぎると始発駅手前で渋滞する。増発や路線の延伸などの際設定しやすいようしておいてほしいです。↓は成功したもののセーブデータです。適当に3つくらい駅を作って1つ路線を作って列車を走らせます。(tttに関する設定はしなくてもよい。)その後、時刻表を表示してautorefreshをONにします。車庫に入った瞬間にminivec_tpl<T>:[]で落ちます。こちらでは100%で再現してます。OVERRIDEについてoverrideとfinalはvirtualメンバ関数のみが正解らしいです。http://stackoverflow.com/questions/5530022/override-non-virtual-functions-in-c-2011次期C++1yではnon-virtualもOKになるかも知れませんが、今のところダメみたい。gccが先取りしすぎなんですね。uint32_tについてVC++2010にもありますが、ヘッダをインクルードしないと使えません。C99gccでも同じはずなのですが...bits_per_dayについて>TTTで見える姿だけ変える感じですかね。19:48皆様、動作確認ありがとうございます。私事としては8月ががっつりどっぷりの仕事になりそうで、その前にある程度固めておきたいと考えています。(といっても、時刻表の見てくれを改善していくくらいしか今はアイディア無いんですけどね)kendaiさん:深夜に何度もチェックしてくださりありがとうございます。改版する途中で、重そうだ無駄そうだと判断した場所はちょくちょく書き直しているのですが、そんなに一気にスムーズになるような変更はしていないつもりです。いて、どこか直した時にその除霊ができたのかもしれません。mixの振り分け成功おめでとうございます。使えば入線可能ホームの数まではreorderを吸収できますね。原因に車庫内の列車の存在が絡んでいるというのはあり得ますね。(すみません、reorderとは「順序の入れ替わり」。いう風に使っていたります。(で「時刻表を改定」をする必要あり):この段階で、路線の全編成の位置を把握しなおして、始点駅に一番近い列車から順に、n*P+Sの時間をふっていきます。よって、始点に到着するたびに始点発時刻の変更が行われる。ここでまた順序に合った時間が振りなおされるはず。書いたのはあくまで、こういう動きをする*つもり*のプログラムを書いたというだけで、バグあるいは想定できていなかった要素がどこかにあるということになります。車庫にいる編成にどういう値を振るかは考えていなかった。(車庫にいるということの検出すらしてなかった)あとは(2)にバグがある可能性かなぁ。バグとは言い切れないけど、(2)の段階で時刻をふって行く時に最初のnをどうするかは課題です。この予想がうまくないと、まずい。原因には直接はならない)また自分で試していて発生したのは(3)で、列車のスケジュールに(少しでも)無理があった場合ですかね。無理があった時に(3)がきついのは、段落ちしちゃった値をそのまま設定されてしまうこと。して見ると、「区間時間計画だけの運行」というシンプルさから「周期と発時刻」を設定した途端に始まるややこしさの間の開きが大きすぎますね。gonyoさん式のシンプル周期運行も含めて、の間の開きを埋めるものが無いとちょっときつそう。散文ですみませんが、とりあえず頭の中を吐き出しておきます。19:59yoyoさん、ありがとうございます。minivec_tplのfatalで落ちるたしかに車庫行きの状態の扱いが微妙でした。落ちないようにはします。ここで、仕様としての検討課題が。車庫送りにした編成は時刻表の上ではどう扱うべきでしょうか。(ちなみにSimutransの内部の作りとしては、車庫送りにした途端に独自のスケジュールを持って、路線から一時的に外れてしまいます。車庫行きなど何も知らないかのように、いつも通りのダイヤを見せるけど、マーカだけ表示されなくなるaが一番簡単。落ちないようにaにふろうかとは思いますが。overrideすみません、C++脳がStroustrup初版で止まっている人間なものでついていけてませんでした。ご教授ありがとうございます。仕様は読むべきものですね。半端な仕様作りましたね。ここ10年くらいは誰がやってるんだろう。それぞれに作ってしまえばいいだろうに。uint32_tああ、ごめんなさい。stdint.hにまとまったんでしたね。たしかにインクルードしてません。読み込んでいるんで、simutransのどこかが読み込んでいるstdio.hでなんとなくうまくいっちゃうんですよ)いろいろとお行儀悪いですね、私。なくuint32なので、そちらにまとめます。独自の時刻体系での表示まずは時刻表で、それも表示だけで、ということであれば低リスクで実験はできそうです。なりのフォーマットを入力しやすくするのが手間くいそう。あと、これやった場合、路線ごととの運行周期との関係はどうしますかね?まずはそういうのを無視して、えいやっと全体設定でやってみるものなのかな。形式になるという感じ。された場合に、誤差を気にするかどうかですね。24や60で割ることになりますので。ようにしたいのですが。一段、アイディアを集めたく思います。バグ修正はいましばらくお待ちください。TTTで表示させると、という話でいいですよね?はい、そうです。バスで線路を封鎖して以下いろいろやった技を使わない限りできないことです。ひとつの目標が達成されました。http://gyazo.com/2fa5f92036edd808ace477cfa7a9ba2fこれが完成後の時刻表です。見やすいですねこれただ扱いがかなり難しいのが難点です。その過程でいろんなトラブルと遭遇しました。「区間時間」ボタン押して手動で退避駅の前の区間を長くしました。次の駅以降そのままなんで困る。「区間時間」をいじると後のほうも自動で動いてくれました。急行の路線作成して流します。普通電車に妨害された中の運行になります。邪魔な普通電車がいるときといないときでダイヤは変わるため非常に面倒でした。始発駅での発車タイミングを調整します。急行が普通の80ttt遅れで出発し、途中で追い抜くダイヤにしました。発車タイミングによっては退避がうまく行きません。このタイミング難しいですね。勝手に直るとはいえ早送りで何週もまわしました。急行の編成数が1余りました。普通より早いのに同じ数流せば余っちゃいます。駅で長時間(列車間隔より長く)待機する状態になっています。限界まで本数増やすときにはこれが邪魔になるので困ったものです。普通と急行がうまく運行したからこれで1dayが統一されてるのかなとりあえず目標一応達成ですかね。:oやっぱり、乗車中はいろいろと混乱させてましたねorz引き続き見守っております。:-[がんばってください~~自分の幻想を追及すべく、当初イメージした時刻表(管理に特化)を添付しておきます。開いた時点で記録を開始し、閉じると忘れる。編成が駅に到着する度に、駅到着時刻を更新記録させている。少編成数でも評価ができるように最大値、最小値を継続して更新記録。ここでは、異常値(前駅発車が遅れている場合)は、反映しない処理も想定できるが、目に見えない処理は混乱の原因で、問題も隠蔽してしまいそう。例では、さらに区間計画を差し引きし、停車時間の目安を示している。次の周期までの時間と、列車の位置、状態を背景色で示す(手動更新でいいはず)。停滞中の車両に飛べば、他の編成が干渉している現場を確認できる。停車が長くなりそうなら即発車。