News:

SimuTranslator
Make Simutrans speak your language.

Simutrans乘客、郵件、貨物如何選擇運輸路線?

Started by yswang, December 29, 2017, 03:19:57 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

yswang

這個問題應該是玩遊戲時最好奇與不了解的地方,我試著用遊玩時的心得來說明看看,遊戲版本是120.0.1,沒有去研究程式碼,純粹就經驗來看。

遊戲中的乘客、郵件、貨物都有要去的目的地,選擇的是可以最快找到的路徑節點,跟車站性質、運輸路線遠近、交通工具快慢、花費成本無關。路徑是指交通工具在車站間實際行駛的軌跡,節點就是指車站。

乘客、郵件以每格建築物為單位,貨物以整棟建築物為單位來計算車站涵蓋範圍(station_coverage)。首先,出發建築物在涵蓋範圍(station_coverage)內隨機找到一個車站,此車站如果有路徑可到達目的地建築物的話,所產生的乘客、郵件、貨物就以此車站為起點站;沒有路徑可到達目的地建築物的部分,會在此車站累積一筆無路線(no route)的資料,然後隨機尋找下一個涵蓋範圍(station_coverage)內的車站,直到全部都有路徑或沒有車站可找為止。所謂有路徑可到達,指的是出發建築物涵蓋範圍(station_coverage)內的車站和目的地建築物涵蓋範圍(station_coverage)內的車站之間有多條路徑可以連接,並且須轉乘的話也不能超過設定的轉乘次數(max_transfers),及程式嘗試尋找的路徑總長度不能超過設定的長度(max_route_steps)、且途中車站總數也不能超過設定的車站數(max_hops),否則就找不到路徑。

有了起點站,表示有路徑可到達目的地建築物,接著要找終點站。跟找起點站一樣,隨機在目的地建築物涵蓋範圍(station_coverage)內找到一個車站,有路徑可從起點站到達的話,就以此站為終點站;否則隨機再尋找下一個涵蓋範圍(station_coverage)內的車站,直到找到為止;如此就決定好了起點站和終點站。

從起點站到終點站之間有多條路徑可以選擇的話,程式會先選擇路線總合加權值最少的組合當做路徑,加權值越少表示路線停靠站越少、可以最快被找到。不須轉乘的路徑稱為路線,每條路線起點站加權值是8,每多停一站加權值加1;有轉乘的話則視為另一條路線。一條路徑可以由多條路線組合而成,加權值為18的2條路線組合比加權值為19的1條路線能更快被找到。

有多條路徑總合加權值一樣時,程式會選擇轉乘次數少的;轉乘次數一樣時,就從第一條路線的加權值開始比較,選擇最少的那條,如一樣,則往第二條路線依序下去;比完全部路線如果還是一樣,在只有一個轉乘站的情況下,選擇最新設立(車站從無到有)的轉乘站;轉乘站有兩個以上時,從第一個轉乘站開始比較,選擇最早設立(車站從無到有)的轉乘站,再依序往第二個轉乘站比下去,如此就能找出唯一的路徑。

找到唯一的路徑之後,路徑上的起點站、轉乘站、終點站即是節點,決定好節點之後,乘客、郵件、貨物就會搭乘途經節點之間任何可以搭乘的交通工具,有合適載貨類別的空位就搭,不論遠近、快慢、大小、種類、貴或便宜。不經節點之間的交通工具,即使中間可以到達終點站,也不會搭乘,因為交通工具沒有經過選定好的節點,不符合規定。

當坐上交通工具時,會遇到終點站、轉乘站在同一路線上時,這時先到達的就先下車。比如先到達終點站就先下車,旅途完成。先到達轉乘站就先在轉乘站下車,然後在同一交通工具排隊上車續往終點站前進,交通工具如不擁擠,就可全數續搭同一班車前進,如果交通工具很擁擠,上車順序是:近的站比遠的站優先上車、轉乘的比直達的優先上車,所以這時候有可能搭不上同一班車,得等下一班次。

:) 以上來源於我自己玩遊戲的心得與自玩自錄影片網站的一篇文章:http://simutransplay.blogspot.tw/2017/11/simutrans21_30.html  :)