宇都宮ライトレールに優先的に乗車させるような、ダイクストラをどうやって作ろうか?

2022年6月2日

wayを取るには、以下のコマンドを使う

utsu_tram_db=# select * from ways where name = '(仮称)宇都宮ライトレール';

で、宇都宮ライトレールのwayが取れることが分かったので(誰か知らないけど、コメント入れてくれた人、ありがとう)、あとは、updateコマンドで、costとreverse_costを、小さく(1/3くらい?)すればいけそう。

SQL文の書き方を調べよう。


いちいちDockerの中に入るのが面倒なので、windows10からpsqlでログインします。

C:\Users\ebata>psql -U postgres -p 15432
Password for user postgres:
psql (13.4, server 12.5 (Debian 12.5-1.pgdg100+1))
Type "help" for help.

で、江端が変態的改造した宇都宮ライトレールのテーブルにコネクションします。

さあ、道から乗って、LRTに乗って、橋を渡って、道に下りられるか?(道路と鉄道の強制マージの件)

postgres=# \c utsu_tram_db
psql (13.4, server 12.5 (Debian 12.5-1.pgdg100+1))
You are now connected to database "utsu_tram_db" as user "postgres".

utsu_tram_dbに直接改造を加えるのは怖いので、utsu_tram_db2 というレプリカを作っておきましょう。

Dockerの中にある、postgreSQLのpostGISのDBを、丸ごとコピーする方法

でも、できるのですけど、面倒なのでWindows10から直接できないか、試してみました。

【PostgreSQL】Windows に psql コマンドだけをインストールする手順

C:\Users\ebata>createdb -U postgres -p 15432 utsu_tram_db2
Password:

で、

utsu_tram_db=# \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
---------------+----------+----------+------------+------------+-----------------------
utsu_tram_db | postgres | UTF8 | en_US.utf8 | en_US.utf8 |
utsu_tram_db2 | postgres | UTF8 | en_US.utf8 | en_US.utf8 |
(12 rows)

あ、できている。凄い。(というか、createdbが使えた、といのも驚いたが)

で、MinGWのシェルから、

$ pg_dump -U postgres -p 15432 -Ft utsu_tram_db | pg_restore -U postgres -p 15432 -d utsu_tram_db2

Password:
Password:

を実施したら、passwordを2回聞かれました(珍しい)。確認したらレプリカ(utsu_tram_db2)が、できていました。こっちで、色々テストします。ちなみに、command.comではパイプ"|"が使えないみたいです。(ちなみに、pg_dump, pg_restoreが使えたことにも驚いたが)


さて、utsu_tram_db2を使って、costと、reverse_costの値を変えてみます。

現在は、こんな感じ。

utsu_tram_db2=# select cost, reverse_cost from ways where name = '(仮称)宇都宮ライトレール';
cost         |        reverse_cost
------------------------+------------------------
0.007490415761689246 | 0.007490415761689246
0.00040536575640007835 | 0.00040536575640007835
0.01932049990115761 | 0.01932049990115761
0.008712540173673398 | 0.008712540173673398
0.007102267864215258 | 0.007102267864215258
0.00684623081981901 | 0.00684623081981901
0.004139533878435676 | 0.004139533878435676
0.005101717091578247 | 0.005101717091578247
0.004405341713757751 | 0.004405341713757751
0.004776545712421741 | 0.004776545712421741

コスト値を小さくすると、ダイクストラで宇都宮ライトレールが選ばれやすくなる(はず)だけど、いくつくらいがいいかなぁ。1/3か 1/5か。とりあえず、効果が見たいから、1/5くらいで書き換えやってみよう。

utsu_tram_db2=# update ways set cost = cost * 0.2 where name = '(仮称)宇都宮ライトレール';
UPDATE 129

さて、どうなっているかな

utsu_tram_db2=# select cost, reverse_cost from ways where name = '(仮称)宇都宮ライトレール';
cost | reverse_cost
------------------------+------------------------
0.0014980831523378492 | 0.007490415761689246
8.107315128001567e-05 | 0.00040536575640007835

まだ、reverse_costの方には手を出していないので比較ができるはず。

0.0014980831523378492  ÷ 0.007490415761689246 = 0.2

おお、できている。

では、reverse_costの方も変えてしまおう。

utsu_tram_db2=# update ways set reverse_cost = reverse_cost * 0.2 where name = '(仮称)宇都宮ライトレール';
UPDATE 129

よし、これにて、cost, reverse_costの強制変換処理を完了

ちょっと問題はあるようですが、動いているようです。

2022年6月2日2022/05,江端さんの技術メモ

Posted by ebata