電車の運転曲線最適化プログラム

鉄道博物館の運転士体験教室の最後で実施される修了検定をAIで攻略しようというプロジェクトです。鉄道総研がすでに研究済みのような気もしますが、修論研究のためのトレーニングということで、温かい目で見守っていただけると幸いです。 (プログラムを動かすためにはPython3とそのライブラリであるNumPy、Matplotlibが必要です)
3
しがさか @kmtcrossing0523

ダウンロードは以下のリンクから。これからはDL-trainディレクトリではなくDQN-trainディレクトリを見てください。 github.com/near-Stern/DQN…

2018-01-20 18:31:25
しがさか @kmtcrossing0523

久し振りに運転曲線最適化プログラムを更新しました。def文の大量導入でデバッグをしやすくした他、グローバル変数の導入で車両データの書き換えも容易になりました。

2018-01-20 18:31:08
しがさか @kmtcrossing0523

調布での所用終わり。ソースコード上でdefをあまり利用せずに同じ関数に多くのことを盛り込んでいるからデバッグしにくいと言われたが、DQNと逆誤差伝播について勘違いしていることがあるということは見抜いてくれた。

2018-01-19 18:37:14
しがさか @kmtcrossing0523

下り勾配で惰行しているとどんどん「経済運転」の項目から減点されるバグを修正。 github.com/near-Stern/DQN…

2018-01-12 14:36:59
しがさか @kmtcrossing0523

今後更新したソースコードはGitHubのみに上げます。Dropboxのファイルは更新しないのでご注意を。

2018-01-12 12:46:54
しがさか @kmtcrossing0523

というか、下り勾配の駅間だと惰行していてもどんどん減点されるバグが… (路線勾配を実装したのは最近のことだからそこまで考えていなかった)

2018-01-12 12:43:23
しがさか @kmtcrossing0523

あと、某プログラムの「経済運転」の採点基準はやはりいい加減ですね(最初から分かっていたけど)。目標運転時分に占める加速度(走行抵抗、勾配抵抗込み)が正だった時間の割合に応じて減点とか、どうなんだという感じ。

2018-01-12 12:41:21
しがさか @kmtcrossing0523

今日の輪講で意外に思ったのは、特急と各停で車両運用を分けていない京王電鉄が5000系に車上蓄電池を導入しているということ。蓄電池を積んだ車両は各停運用に固定した方がエネルギー効率がいいと思うのだがどうなんだろう? keio.co.jp/zasekishitei/a…

2018-01-12 12:36:29
しがさか @kmtcrossing0523

例のプログラムも早速アップロードした。 github.com/near-Stern/DQN…

2018-01-11 22:34:51
しがさか @kmtcrossing0523

GitHub入会記念のプログラム。実行注意。 github.com/near-Stern/aaa…

2018-01-11 22:33:40
しがさか @kmtcrossing0523

github入会したけど、ふええ、こんなの使いこなせないよ、ってなってる。

2018-01-11 18:47:26
しがさか @kmtcrossing0523

学習中に残り所要時間の予想値を表示するようにしました。 dropbox.com/s/nfudasqdp3ro…

2018-01-11 18:08:40
しがさか @kmtcrossing0523

ただし、0mより手前や駅間距離[m]より先の勾配を指定しようとするとエラーが起きる。それらの区間と特に指定しなかった区間の勾配は0になる。

2018-01-08 10:31:33
しがさか @kmtcrossing0523

(勾配データslope.csvの書き方) ・「起点[m]、終点[m]、勾配[‰]」の組み合わせを1行あたり1つ書く。上り勾配ならプラス、下り勾配ならマイナス。これは順番通りに書かなくても特にエラーは起きないものと思われる。

2018-01-08 10:27:17
しがさか @kmtcrossing0523

特に指定しなかった区間の制限速度は1行目で入力した最高速度になる。きちんと出発駅から到着駅に向かう方向に順番に書かないとエラーが起きる。

2018-01-08 10:21:35
しがさか @kmtcrossing0523

(路線基本データroute.csvの書き方) ・1行目に駅間距離[m]、最高速度[km/h]をこの順に入力。 ・2行目以降に制限速度の情報を入力。「起点[m]、終点[m]、制限速度[km/h]」の組み合わせを1行あたり1つ書く。

2018-01-08 10:20:33
しがさか @kmtcrossing0523

例のプログラムを更新しました。 (ダウンロードはこちら) dropbox.com/s/nfudasqdp3ro… (変更点) ・路線の勾配を実装しました。

2018-01-08 10:14:23
しがさか @kmtcrossing0523

大宮ー上尾間で、常に平坦な場合と常に3.34‰の上り勾配がかかっている場合と常に3.34‰の下り勾配がかかっている場合の3通りを試してみた。運転方法を常に平坦な場合で手動最適化したものから変えていないので、勾配がかかった場合の結果は散々ですね。 pic.twitter.com/W32T1PqpDo

2018-01-08 10:03:35
拡大
拡大
拡大
しがさか @kmtcrossing0523

勾配の実装完了。いい高校物理の復習になった。(θが0に近いので(日本の普通鉄道においてはtan(θ)の絶対値が0.07を超えることはない)、sin(θ)の代わりにtan(θ)を用いていることに注意) pic.twitter.com/2JMRKkU8Iy

2018-01-08 09:51:00
拡大
しがさか @kmtcrossing0523

今日も今日とて例のプログラムに手を加える。今日は路線の勾配を実装しようか。(<- もっと本質的なところを改善しろ)

2018-01-08 06:53:13
しがさか @kmtcrossing0523

ごめんなさい。ちょっとしたバグがあったので取り除きました。ダウンロードはこちらから。 dropbox.com/s/nfudasqdp3ro… あと行頭の#がコメントアウトの意味なので、手動運転をする際は削除するようにお願いします。

2018-01-07 22:05:32
しがさか @kmtcrossing0523

drive_pattern[][]は、[継続時間、投入ノッチ]という配列がいくつか並んだ2重配列です。継続時間の単位は秒、投入ノッチは0〜13の整数で表します。0〜7がブレーキ、8が惰行、9〜13が力行です。

2018-01-07 21:59:14
しがさか @kmtcrossing0523

dropbox.com/s/nfudasqdp3ro… (手動運転の方法) optimize.pyを開くと下の方に運転方法を手打ちする欄があるので、そこに試行錯誤を重ねながら打ち込んでいくだけです。

2018-01-07 21:57:19
しがさか @kmtcrossing0523

例のプログラムを更新しました。 (変更点) ・エージェント学習中に進捗状況を表示するようにしました。これで学習回数の入力で114514など大きい数字を安心して打てるようになりました。 ・手動運転を実装しました。…嘘です。ソースコードに運転方法を手打ちする領域を明示しただけです。

2018-01-07 21:53:13
しがさか @kmtcrossing0523

ピッタリなのを見つけたけど、性能曲線は載っていないね。これは諦めた方がいいかな? pic.twitter.com/7uQi20d765

2018-01-07 15:44:02
拡大
残りを読む(86)

コメント

atlan @atlan1701 2018年1月11日
井川線で90‰だったっけ?
1
しがさか @kmtcrossing0523 2018年1月11日
atlan1701 コメントありがとうございます。井川線は普通鉄道ではありませんが、90‰がありますね。普通鉄道の場合、箱根登山鉄道の80‰が最高のようです。(よって例のツイートの0.07という数値は誤りです)
0
atlan @atlan1701 2018年1月11日
アプトの路線を速度出して走り回る馬鹿は居ないと思うので、まぁ90‰はどうでもいいや
0