投稿者 トピック: tiny timetable patch / 簡易タイムテーブルパッチ  (参照数 126235 回)

wackdone

  • 準急
  • ***
  • 投稿: 126
本スレ(Part54)の503です。
Nightlyに簡単なタイムテーブル機能を追加しているので、こちらをお借りして話を進めさせていただきます。

現在の実装の概要は:
  • スケジュール編集画面で駅と駅の間に計画所要時間を設定できる
  • 乗り物は(計画所要時間が設定されている場合は)その時間に合わせて運行するよう努力する
  • 早着の場合は停車時間をのばす。遅延の場合は発車を早めて先の運行での調整にまかせる。

というような感じです。
積載率などに関係なく動作します。(オリジナルにある積載率指定、停車時間設定とは独立です。)

最新版のパッチやバイナリは、このトピックの最新のレスからどうぞ。
(現在は 返信#12 です。)

また、
  • Windows用などにバイナリビルドしてくださる方
  • 試用してみてくださる方
  • (あるいかないかわからない)将来、本家へ提案するかもしれない時にご協力いただける方
などなど募集しております。お気軽にお声がけください。
« 最終編集: 2012/07/02 02:04 by wackdone »

wackdone

  • 準急
  • ***
  • 投稿: 126
簡単な路線を一晩走らせてみて大きな問題はなかったので、現状のパッチをここにアップします。
(Forumの使い方にまだ慣れていないため、添付など問題ありましたらご指摘をお願いいたします。)

simr5787-tip002.zip
タイムテーブル周期を指定しての、指定時刻出発機能まで実装して試しました。
機能の詳細は同梱の TIMETABLE_ja.txt をごらんください。
パッチのあて方、使い方は最初にロダにあげたものと同じです。まだその他の「いろいろ」な機能が一緒のままですが、
落ち着いたところで「簡易タイムテーブル機能」のみに分離する予定です。

また、本スレの方でスクリーンショットのご要望がありましたので、簡単な実験線ですがアップします。
(今は余裕なくフルスクリーンのままです。すみません)
timetable-ss01.png
(pak128.japanだったり、配線ぐだぐだだったり、どこから来たのかというようなオブジェクトが入っていたりしますがスルーしてください)

左上と右下に情報ウィンドウを開いた二つの編成が4駅+引き上げ線の複線区間を往復運行しています。
(引き上げ線や車両基地を使ってダイヤ調整をするテクニックは使っていません。)
全ての駅間を計画所要時間 160ttt に設定。(駅間距離にはばらつきがあるが発時を揃えてみている)
路線では運行周期を1280に設定し、それぞれの編成はoffset 0 と 640 で走らせています。
まだいまいち揃ってないところでの絵ですが、繰り返し往復させても、この中央の門真駅ですれ違い出発します。
二つの編成に性能の差があっても、このように安定した運行になります。
時間ができたら優等や途中折り返しもダイヤに組み込んで実験してみます。(あと環状線かな)

いろいろと説明や質問をしたいところですが、まずは現状報告まで。
ご意見、お待ちしております。

wackdone

  • 準急
  • ***
  • 投稿: 126
言葉や静止画を並べるよりも、簡単でも動いている様子を見てもらった方が感覚をつかみやすいと思うので、
ごく単純な例ですが、設定をして走らせるまでの様子をキャプチャしてYoutubeにアップしました。

キャプチャしてそのままのもの:(比較的高画質)
 Simutrans Tiny Timetable Patch DEMO
 http://youtu.be/XtmyXlTxvM4

日本語での説明テロップを入れたもの:(画質は劣る)
 Simutrans 簡易タイムテーブルパッチのデモ (再エンコード版)
 http://youtu.be/1qY7uJKrscI
   (再エンコードしてアップしなおしました。古い方は消します)


4駅+引き上げの複線往復運用で、性能の異なる二つの編成が続行運転になってしまっていたものが、
タイムテーブル設定をおこなうことで、安定して等間隔運行する様子を見せています。
(ラストにおまけで、市内循環バスが等間隔運行を続けている様子もちょろっと)


次は中間点の2面4線駅で緩急接続、その先の2面3線駅で途中折り返しでもやってみようかと考え中。
信号機にスケジュールを持たせる案についても実装できるか調査してみていますが、これはまた別のトピックでするのがいいですかね。ご意見やご誘導を募集。
« 最終編集: 2012/06/27 10:19 by wackdone »

wackdone

  • 準急
  • ***
  • 投稿: 126
簡易タイムテーブルパッチ 最新版
« 返信 #3 on: 2012/06/28 22:10 »
簡易タイムテーブルパッチの最新版です。
この版から、他の機能のパッチとは分離してTTTだけでの配布にします。
(他の機能のパッチ(STSKK、MIP) はまた別にアップします。)

対象バージョンは Nightly r5788 ですが、111.3 にもちょっとした手修正だけであたること、動作することを確認しています。

ChangeLog:
   FIX: delayがセーブできていなかった
   ADD: 実績時間表示をトグルできるように ("Show RecTime" ボタン)
   ADD: 全ての列車の遅延をリセット: 路線管理ウィンドウに追加
   ADD: 自動オフセット設定機能を路線管理ウィンドウに追加
   ADD: pitchフィールドを路線管理ウィンドウに追加
   CHANGE: セーブゲームバージョンが 0.811.5に
   ADD: 列車詳細ダイアログにlast_departureを表示 (デバッグ用?)

既知の問題点:
  路線管理ウィンドウで pitch が 0 のまま、AutoOffsetを押すと、プログラムがフリーズします。
  (次のバージョンで修正されます)

上記のようにセーブバージョンが上がっていますが、前のバージョンのセーブも読み込めます。
また、古いバージョン(111.xなど)のゲームをロードして、タイムテーブル関連の設定をして保存すると、
新しいセーブバージョンになり、タイムテーブル関連の設定も保存されます。
(当然ですが、オリジナルのSimutransではロードできなくなります。)

ほか使用方法など詳細は、同梱の README_TTT_ja.txt (UTF8、CR+LF) をごらんください。

2012.06.29追記:
Windows用のバイナリも作ってみました。
  http://ux.getuploader.com/wackdone_simutrans/download/2/simuwin-r5788-ttt-030.zip
簡単に動作確認はしていますが、あまり作り慣れていないものなので不具合があったらすみません。


ご意見、ご感想をお寄せいただけますと幸いです。
« 最終編集: 2012/06/29 20:45 by wackdone »

gonyo

  • 各駅停車
  • *
  • 投稿: 16
ダウンロードさせて使わせていただきました どうも使い方がよくわかりません 設定するところが英語になってるようなのでできるなら日本語でお願いします。 技術的に日本語入力が難しいのであればローマ字表記 (taikijikan)みたいに・・・
使い方よくわからないまま路線編集→Auto Offset と押すとフリーズしました。 バグなのかもしれないので検証お願いします

結構難しいプログラム組んでいるようですが そこまでしなくてもダイヤ組めると思いますよ


このパッチを使わなくとも強引に踏み切りに長さ2マスの自動車を停車させる方法で鉄 道の定時運行が可能ですので 何からの役に立つはずだと思うのでその方法を紹介します。
http://gyazo.com/a96cd1c65d19c54b94c6f8afe047aff0.png?1340958447
http://gyazo.com/cb43a0d0a138c8c6bed32cff3b64ac8e

南北+東西=60秒 つまり現実時間で60秒間隔運行   60秒に一回青になる信号を作ったわけです。。
オフセット値は他の場所にもう1つあるほかのこの装置より信号が変わるタイミングが 34秒早い という意味です 2つ目のオフセットが8なので26秒調整していることになります。 この方法で同時入線同時発車ができました。
同時入線の様子です。  退避等も問題なくできると思います
http://gyazo.com/10168512f6b05c9608af5741fea10b5b

問題点
非常に見た目が悪いこと 
調整(オフセット値の調整)が非常に面倒   (駅間の移動時間の計測などが非常に大変)
1秒でも遅延すれば次の筋まで待つことになる
踏み切りで列車を妨害している場所以外では調整ができない
バグ利用のため更新で使えなくなる恐れ※1
※1踏み切り手前で自動車は踏み切りの次の1マスに障害物がないかを確認して進む 1マスの自動車ならそれで問題ないが連結された長い自動車で 踏み切りの2マス先に障害物(ここでは交差点の赤信号)があった場合 踏み切りを渡りきれず列車の運行を妨害してしまう。 これを利用して鉄道のダイヤを組んでみたものだということ

以前ここに要望として書き込んでみました 道路の交差点用信号をうまく使えないかということです。

http://forum.japanese.simutrans.com/index.php?topic=477.0 

このとおり道路の交差点用信号を鉄道に置き換えていただくと スムーズに動くかと思います。 要するに一定の時間ごとに一編成の電車を通過させる装置を作るというわけです そしてオフセット値で調整
他の種別の列車がそこを通ると困る、 1秒でも遅延は許されない という問題点があります。
« 最終編集: 2012/06/29 19:13 by gonyo »

moka

  • 各駅停車
  • *
  • 投稿: 42
パッチ作成ありがとうございます。動画を見る限りではかなり使いよさげですね
これからwin環境で試してみるつもりです

>>gonyoさま
>設定するところが英語になってるようなのでできるなら日本語でお願いします。
ja.tabへの追記で対応が妥当でしょうね。試しながらちょこっと追記分を書いてみることにします。

wackdone

  • 準急
  • ***
  • 投稿: 126
gonyoさん
お試しいただきありがとうございます。

まずはじめに、「道路信号と同じものを鉄道に」という話については了解しています。
信号方式とこのタイムテーブル方式にはそれぞれ長所・短所がありますし、併存、かつ場合によっては併用してもいいと考えています。
とりあえず、とりかかっていたこちらのタイムテーブル方式を固めてみました。
信号の方もおおまかな実装の目処は立ってきましたので、比較も含めてgonyoさんの方のトピックで進めましょうか?
(比較はまた別トピックを立ててもいいですし。)

日本語化はmokaさんのおっしゃるように、ja.tabでの対応が良いと考えています。
mokaさん、試してもらうのに甘えちゃっていいですか?

使い方よくわからないまま路線編集→Auto Offset と押すとフリーズしました。 バグなのかもしれないので検証お願いします

使い方についいてですが、
同梱の README_TTT_ja.txt では、やはりわかりにく過ぎますでしょうか?
(チュートリアル風になっていないのは申し訳ないです)
足りていない情報などありましたらご指摘ください。
(20:44 先程、gonyoさんの文章の意味を読みとりそこなっていたため、失礼な表現をしました。訂正してお詫びいたします。)

フリーズの件はこちらでも確認しました。
(20:42修正)
pitch や cycle が 0 のまま押すとフリーズしてしまいます。
次のバージョンまでに、この場合は無視するか、できれば Auto Offsetボタンの状態を制御するようにいたします。


引用
問題点
非常に見た目が悪いこと 
 :
この問題点は、道路信号で車両を制御して踏切を踏ませる制御方式のほうの話ということでいいですよね?
(斜め読みしてる時に最初の項目を見て、ドキッとしましたw)

とり急ぎ。
« 最終編集: 2012/06/29 20:49 by wackdone »

wackdone

  • 準急
  • ***
  • 投稿: 126
TTT-032
« 返信 #7 on: 2012/06/29 22:21 »
最新版の TTT-032 をアップします。
路線管理ウィンドウで、pitchが0の時に Auto Offset を押すとフリーズするバグを修正しました。
gonyoさん、ご指摘ありがとうございました。

機能やセーブファイルバージョンに変更はありません。

ソースパッチ: この記事に添付
Windows用バイナリ:
  http://ux.getuploader.com/wackdone_simutrans/download/3/simuwin-r5788-ttt-032.zip

前のバージョンのバイナリは削除します。

(ソースの方に新しいクラスが増えていますが、今はスルーでお願いします。整理できてなくてすみません)

moka

  • 各駅停車
  • *
  • 投稿: 42
>>wackdoneさん
>mokaさん、試してもらうのに甘えちゃっていいですか?
はい、かまいませんよ♪
良ければマウスオーバー時のメッセージをテキストで頂けないでしょうか?
一つづつ書き写していくのが思った以上に面倒で…。

遅くなりましたが、ボタン名に対応したja.tabを添付します。
simuwin-r5788-ttt-030\simutrans\text\ja.tab の末尾に追記した形です。

追記内容は以下になります
#__________________________________TTT_text__________________________________
#__________________________________TTT_text__________________________________
Timetable Cycle
運行周期(TTT)
= SumOfSplits
総所要時間積算
Convoy Offset
発車時間修正(TTT)
Show RecTime
実所要時間
Split time
各所要時間(TTT)
Clear Timetable
全所要時間クリア
Reset Delay All
遅延時間総リセット
Pitch
発車間隔
Auto Offset
発車時刻修正

wackdone

  • 準急
  • ***
  • 投稿: 126
うを、mokaさん、すばやっ!ありがとうございます。
こうして見ると、まずは私のつたない用語選びからどうにかしないといけませんね。

mokaさんwrote:
>> 良ければマウスオーバー時のメッセージをテキストで頂けないでしょうか?

ざくっと抽出してみたので .txtで添付します。(改行コードの問題とかありませんか?)
抽出といっても、自分のパッチの中から、"set_tooltip" で検索して手でコピーしただけです。
文末に'.'(ピリオド)を入れてしまっているところがありますね。
先々は取り除かなければと思いますが、今はバイナリがこうなっているので、このままにさせて下さい。
また、コード内で正しく翻訳される手順を踏めていないところがあって英語のまま出てしまうものもあるかもしれません。
適宜、ご指摘いただければ。

それでは、私の偽物英語にもう少しお付き合いいただければ幸いです。

moka

  • 各駅停車
  • *
  • 投稿: 42
語句若干修正&マウスオーバー時メッセージに対応したja.tabを添付します
”設定所要時間”という表記を使い方ファイルの”計画時間”に訂正するなど、若干の語句修正もしました。
※Reset Delay Allボタンのメッセージ(英)が隣のボタンと同じです。パッチ側の修正おねがいいたします。

実際に使用するシーンを想定しながら文章をつくりましたが、
確かにUIに関してはもっと詰めないといけないようですね。
私の感じた所感としては
・使い方が直観的ではない:
設定画面を見ただけでは操作の流れがわからないので、大変使いにくく感じます
見た目でぱっと操作を誘導することが必要ですね。
・各設定が分散している:
上記に絡んでですが、設定ウィンドウを行ったり来たりすることになり、操作が煩雑です

改善例としては;
計画時間から運行周期を求めるボタン以外に
測定された実所要時間から運行周期を計算する機能(ボタン)を追加して
実所要時間測定→運行周期決定→発車間隔設定の流れを作る
+上記全てを自動で行うフルターンキー的なボタンを路線編集ウィンドウの目がつく場所に置く
などと言ったやり方があるかと思います

以下、今回のja.tabのTTT-text部
#__________________________________TTT_text__________________________________
#__________________________________TTT_text__________________________________
Timetable Cycle
運行周期(TTT)
= SumOfSplits
総計画時間積算
Convoy Offset
発車時間修正値(TTT)
Show RecTime
実所要時間
Split time
計画時間(TTT)
Clear Timetable
計画時間クリア
Reset Delay All
遅延時間総リセット
Pitch
発車間隔
Auto Offset
設定開始/修正値
Reset delay time from timetable.
路線に所属する全ての編成の積算遅延時間をリセットします
#View line in Timetable view window
#
#Convoi is sold when all wagons are empty.
#
Click here to calculate cycle/num_convois automatically
編成が始発駅を発車する間隔を入力/クリックで自動計算
Set offset for all convoys
クリックで各編成への間隔自動設定開始\n/右欄に発車時刻を基準からどれだけずらすか値を入力
Auto calculate cycle of the timetable
各駅の計画時間(所要時間の設定値)の合計を運行周期として設定します
Show recorded split time of the convoy
この編成の実所要時間を表示します
Clear all split time
全ての停車駅の計画時間(所要時間の設定値 ※実所要時間では無い)をクリアします

wackdone

  • 準急
  • ***
  • 投稿: 126
TTT-033
« 返信 #11 on: 2012/07/02 02:03 »
他のパッチも取り込んだバイナリを作る前に、TTTの現状最新版をアップします。

本バージョンは機能の変更はほとんどありませんが、将来のことを考えセーブゲームのバージョンを変えてみました。
新しい実行ファイルでセーブすると、
  0.112.5
になります。
これは「Release 112 までには本家に入っていて欲しいなあ」という私の弱い意志の表われでもあります。
なお、これまでのバージョンで書いた0.811.*系のファイルもロードできます。

実験的に、時刻表風の表示をするウィンドウを作ってみました。
ドキュメントにも記載していますが、ビルド時に
  CFLAGS += -DSCHECULE_TIMETABLE_TTV
  SCHEDULE_TIMETABLE_TTV=1
の2行をコンフィグ追加することで
まだほんど役に立ちませんし落ちる可能性もあるので、心臓の弱い方はボタンを押さないでください。


mokaさんとgonyoさんから、いろいろな機能改善案を頂いています。ありがとうございます。
やはりユーザインターフェースが現状の最大の課題ですね。
皆様の案はあとで整理しようと思いますが、いずれにしても今のようにSimutransオリジナルにすでにある
ウィンドウ (スケジュール編集、路線管理) に寄生している限りは、いろいろと難しくなってきています。

今回、実験的に作ってみた「時刻表ウィンドウ」、または別に新たにウィンドウを作成して、
TTTに関する設定をまとめてできるようにするべきだと考えています。
(「時刻表ウィンドウ」は複数の路線を並べて見られるようにしていきたいので、これもちょっと違うなというところです)

まずはパッチをアップして、RRC (RouteCost) の方のパッチのアップと一緒にバイナリも配ります。

wackdone

  • 準急
  • ***
  • 投稿: 126
TTT-033 パッチ本体
« 返信 #12 on: 2012/07/02 02:04 »
上で説明したパッチ本体です。

wackdone

  • 準急
  • ***
  • 投稿: 126
みなさまから頂いているユーザインターフェースの改善案を整理しつつ、
値の関連の整理や案出もしてみました。
コメントいただければ。

TTTのユーザインターフェース改善

= いただいている改善案のまとめ

  * 総論: 操作の流れを直感的にわかりやすく
    (現状のは必要操作がわからない、設定箇所が散っている)

  * 測定された実所要時間から運行周期を計算する機能

  * 実所要時間の計測 → 運行周期決定 → 発車間隔設定という流れ

  * 仮ダイヤ一発作成ボタン

  * 必要編成数の計算 (周期は計測または設定、運行間隔を設定、周期 / 間隔で計算)

  // 以上の全ては、新たなウィンドウを作って機能の集約・追加がされればよいか?

  * 「ダイヤが乱れています」という警告メッセージを出す
    (「駅が混雑しています」みたいな感じで)

  // 「ダイヤ乱れ」の評価方法を考えないといけない


= 前提: Simutransの構造上の話
路線につけられたスケジュールと、
列車につけられたスケジュールとがある。
つまり、路線の割り当てられていない列車がある。

(歴史的には先に列車のスケジュールがあったからだっと思う。かなり昔の記憶ですが)

これらを統一して扱えるインターフェースにしないといけない。
あるいは、「TTTを使う場合は必ず路線を作ってね」と言う方法もあるけど。


= タイムテーブル編集画面を考えてみる
路線編集から呼び出せるような形で (あるいは単体列車に対しては列車情報ダイアログから?)
タイムテーブル編集ウィンドウを作る。
これを時刻表表示ウィンドウと組み合わせるかどうかは悩ましい。
  タイムテーブル編集ウィンドウ ← 一つの時刻表(スケジュール)
  時刻表表示ウィンドウ ← 複数のスケジュールを並べて
というイメージがある。
後者の方がサイズが大きくなりそうなので、いつも後者が表示されるのも困りそう。
ただ「他の種別列車の様子を見ながら編集したい」というニーズはありそう。


= 必要なパラメータの整理
原則として、全てのパラメータの設定は任意である。
設定されていない値を使用する機能は動作しない(無視される)という作り。

各機能に必要な設定値はそれぞれ以下の通り

  一定時間運行機能: 計画駅間時間
  周期時間運行機能: 周期、オフセット(出発時間)

  出発時刻自動設定: 周期、間隔、ベース

以下、"(←)" は自動計算・測定が可能な項目。何かの機能の後の()の中はその機能への引数。
"路線ごと"と言った場合は、路線化されていない列車のスケジュールも含む。

== 一定時間運行機能
  <列車ごと> 実績駅間時間  (← 運行時間自動計測(列車))
  // 今はほっといても普段から裏でやっている 

  <路線ごと> 計画駅間時間  (← 実績駅間時間(列車))
  // 自動設定の際はどの列車から実績時間を取り出すかの指定が必要になる
  // 列車にまだ実績駅間時間が入っていない(計測されていない)区間がありえる
  // 全列車の中から、最小値、あるいだ最大値を選び出すという方法もある

== 周期運行機能
  <路線ごと> スケジュールの周期時間
    (← 時間合計(スケジュール内各項目の計画駅間時間))
    (← 時間合計(スケジュール内各項目の実績駅間時間))
    //後者は、駅間計画を設定したくない場合

    //同様に、どの列車の値を採用するかの問題がある

  <列車ごと> 出発時刻 (時間オフセット)
    (← 発時自動設定(周期時間,間隔,ベース) : この機能はモーダル)

  <路線ごと> 出発時刻自動設定のための間隔
  <路線ごと> 出発時刻自動設定のためのベース
    //上の二つは発時自動設定を行うためだけに必要
    //ただしユーザが覚えておきやすいように保存しておくのも良い

= ダイヤ乱れの評価
実績時間の合計が周期を上回っていたら?
ただしこの場合は、周期が設定されている必要がある。

= 実装上の問題点
あまりウィンドウをわけすぎると、ウィンドウ間の情報の同期が難しくなってくる。
(ユーザの混乱や、バグのもとになりやすい)

moka

  • 各駅停車
  • *
  • 投稿: 42
やはりスケジュールが路線と編成本体の二つあるのがややこしい元なんですね。
どのような意図でこのようになってるんでしょうね?将来的になにか二つに分けた意味が出てくるのかな?

全部載せのバイナリ、ダウンロードしてしばらくいじってみます。
このような素晴らしい機能の実装に尽力してくださるwackdoneさんに感謝です

« 最終編集: 2012/07/04 23:16 by moka »