22-04-2014, 19:11
Patch cargodist, dostępny oficjalnie od wersji 1.4.0, jest moim zdaniem jedną z najlepszych modyfikacji OpenTTD, ale wymaga trochę innego podejścia niż standardowe "linia z A do B".
Rzeczy, o których niżej piszę, dla większości być może są oczywiste, ale ponieważ na serwerach widzę wciąż te same błędy (a i sam je popełniam), stąd pomysł tego artykułu.
Na początek cargodist z włączoną opcją tylko dla pasażerów i poczty (o towarach w FIRS i zastosowaniu drezyny opowiem innym razem).
Po pierwsze, pasażerowie sami decydują, gdzie chcą jechać, w obrębie sieci danej firmy.
Nie działają polecenia unload all (rozładuj i załaduj) oraz transfer (przeładunek), a także conditional order jump (warunkowy skok poleceń).
Po pierwsze dlatego, aby się algorytm nie zapętlił, ale przede wszystkim nie ma potrzeby takiego kombinowania.
Do tej pory, aby zasilić pociąg strumieniem pasażerów dowożonych autobusami, trzeba było ręcznie ustawiać w każdym autobusie "przeładunek" i żaden autobus nie mógł mieć innego rozkazu bo by "ukradł" ten ładunek.
Teraz wystarczy zrobić sieć autobusów, które zarówno będą zarabiać na połączeniach lokalnych, jak i dowozić i odwozić pasażerów na/z stacji.
Mało tego, np. pasażerowie generowani przez małą miejscowość i dowożeni do jakiejś stacyjki, będą kontynuowali podróż w różnych relacjach, wystarczy rozwinąć listę czekających pasażerów, aby to sprawdzić:
[Obrazek: cargodist1.jpg]
z Kralovego Hradca dowożeni są do Pardubic, a stamtąd do wielu innych stacji i to się dzieje samo przez się - bo w Pardubicach zatrzymują się pociągi które tam dowożą, lub dowożą do innych stacji przesiadkowych.
Nie trzeba wozić pasażerów od punktu A do B, można zbierać ich po drodze z mniejszych miejscowości, nie ma też wtedy potrzeby blokowania stacji komendą "full load" - pociąg załaduje się po drodze, albo też, co częściej się zdarza, na stacji będzie już komplet przywieziony innymi środkami transportu.
Tu przykład stacyjki Szumperk praktycznie w "szczerym polu" - jest tylko 10 pasażerów z tej stacji, ale wagon motorowy przywiózł kilkuset pasażerów którzy czekają, aby jechać w stronę Pragi lub Ostravy, jednocześnie wagon motorowy odwozi tych, którzy na tej stacji zechcieli wysiąść:
[Obrazek: cargodist2.jpg]
Przy okazji przykład rozwiązywania problemu pociągów osobowych i pospiesznych - osobowe mają perony z boku, dodatkowo w rozkładzie jazdy dobrze jest dać 5-10 "dni" czekania, wtedy pospieszny ma szansę wyprzedzić
(dodatkowo pomaga w tym odpowiednie ustawienie semaforów wyjazdowych).
Generalnie, im więcej stacji i rozbudowana sieć, tym więcej mamy do transportowania, a sam przeładunek to już sprawa pasażerów, nie nasza.
Ale tu właśnie zaczynają się schody, do pokonywania których służy przede wszystkim graf przepływu towarów:
[Obrazek: cargodist3.jpg]
Na powyższym przykładzie widzimy prawidłowe (zielone) strumienie pasażerów - dowożeni i odwożeni są autobusami na jedną stację, a na tej stacji, oprócz dalekobieżnych, są pociągi podmiejskie zawożą na drugą stację w celu przesiadki do innej relacji.
Bardzo istotna jest tutaj wydajność transportu miejskiego. Niestety autobusy czasem nie wystarczają, dlatego bardzo wskazane są tramwaje, a w późniejszych etapach również metro. 2cc trains set zawiera zestaw wolnych (60km/h) ale pojemnych pociągów z szybką wymianą pasażerów. Jest też newgrf 2cc Subways from the 2cc Set zawierający tylko metro (również takie jak w Wawie), polecam uwadze.
Brak wydajnego transportu miejskiego powoduje dwie rzeczy.
Po pierwsze, pasażerowie nie mogą dojechać na stację by zapełnić pociąg:
[Obrazek: cargodist4.jpg]
Na powyższym grafie widzimy czerwoną linię z Kraków Wschód do Kraków - czyli dużo pasażerów chce jechać w tej relacji, a nie może.
Po drugie, i gorsze, pasażerowie czekają na stacji, nie mogąc dojechać do finalnego przystanku przeznaczenia.
A dopiero wtedy dostaniemy przychód!
Przykład dwóch błędów na jednej stacji:
[Obrazek: cargodist5.jpg]
po pierwsze, pasażerowie którzy wysieli w Myszkowie, nie mogą się dostać do Zawiercia, bo za mało jest autobusów. To się da poprawić.
Ale co gorsza, pasażerowie z Zawiercia stoją na stacji i nie mogą pojechać dalej, bo pociągi są już zapełnione.
A jak wiadomo, cała sieć jest tak silna, jak najsłabsze ogniwo.
Te czerwone ogniwa trzeba lokalizować na wykresie, sprawdzać gdzie konkretnie chce jechać większość pasażerów i rozwiązywać problem (więcej pospiesznych bezpośrednich, albo odwrotnie, więcej osobowych).
Inna ważna rzecz związana z cargodist, na przykładzie linii Kraków-Praga przez Bielsko.
Topologia była taka, ze w Bielsku było odgałęzienie na Śląsk:
[Obrazek: cargodist6.jpg]
Gdybym zrobił pociąg bezpośredni Kraków-Praga, to po pierwsze mógłby jechać pustawy, bo w Krakowie jest 2000 pasażerów, ale większość chce w innym kierunku.
Gorzej, bo w Bielsku jest ich 6000, bo nie tylko z Bielska, ale też ze Śląska.
Prędzej czy później Cargodist "zorientował by się" że można ich przewieźć via Kraków, w efekcie płaciliby za dystans Bielsko-Praga ale czas przejazdu Bielsko-Kraków-Praga - czyli mało płacą, dużo jeżdżą.
Z drugiej strony, może być też sytuacja odwrotna - puścimy pociąg do Pragi z zatrzymaniem w Bielsku, ale będzie zajęty przez pasażerów Kraków-Bielsko,
w Bielsku akurat mało kto wsiądzie i dalej pojedzie pustawy.
Na prawdziwej kolei radzą sobie z tym, dając na niektóre pociągi klauzulę
"tylko dla pasażerów w komunikacji międzynarodowej".
I tak samo można w openttd, używając dla stacji Bielsko dyrektywy "no unloading and take cargo" (nie rozładowuj), i to samo w druga stronę, dla węzłowej stacji stacji Pardubice.
Jak ktoś chce jechać Kraków-Bielsko albo Praga-Pardubice, to są do tego osobówki.
Rzeczy, o których niżej piszę, dla większości być może są oczywiste, ale ponieważ na serwerach widzę wciąż te same błędy (a i sam je popełniam), stąd pomysł tego artykułu.
Na początek cargodist z włączoną opcją tylko dla pasażerów i poczty (o towarach w FIRS i zastosowaniu drezyny opowiem innym razem).
Po pierwsze, pasażerowie sami decydują, gdzie chcą jechać, w obrębie sieci danej firmy.
Nie działają polecenia unload all (rozładuj i załaduj) oraz transfer (przeładunek), a także conditional order jump (warunkowy skok poleceń).
Po pierwsze dlatego, aby się algorytm nie zapętlił, ale przede wszystkim nie ma potrzeby takiego kombinowania.
Do tej pory, aby zasilić pociąg strumieniem pasażerów dowożonych autobusami, trzeba było ręcznie ustawiać w każdym autobusie "przeładunek" i żaden autobus nie mógł mieć innego rozkazu bo by "ukradł" ten ładunek.
Teraz wystarczy zrobić sieć autobusów, które zarówno będą zarabiać na połączeniach lokalnych, jak i dowozić i odwozić pasażerów na/z stacji.
Mało tego, np. pasażerowie generowani przez małą miejscowość i dowożeni do jakiejś stacyjki, będą kontynuowali podróż w różnych relacjach, wystarczy rozwinąć listę czekających pasażerów, aby to sprawdzić:
[Obrazek: cargodist1.jpg]
z Kralovego Hradca dowożeni są do Pardubic, a stamtąd do wielu innych stacji i to się dzieje samo przez się - bo w Pardubicach zatrzymują się pociągi które tam dowożą, lub dowożą do innych stacji przesiadkowych.
Nie trzeba wozić pasażerów od punktu A do B, można zbierać ich po drodze z mniejszych miejscowości, nie ma też wtedy potrzeby blokowania stacji komendą "full load" - pociąg załaduje się po drodze, albo też, co częściej się zdarza, na stacji będzie już komplet przywieziony innymi środkami transportu.
Tu przykład stacyjki Szumperk praktycznie w "szczerym polu" - jest tylko 10 pasażerów z tej stacji, ale wagon motorowy przywiózł kilkuset pasażerów którzy czekają, aby jechać w stronę Pragi lub Ostravy, jednocześnie wagon motorowy odwozi tych, którzy na tej stacji zechcieli wysiąść:
[Obrazek: cargodist2.jpg]
Przy okazji przykład rozwiązywania problemu pociągów osobowych i pospiesznych - osobowe mają perony z boku, dodatkowo w rozkładzie jazdy dobrze jest dać 5-10 "dni" czekania, wtedy pospieszny ma szansę wyprzedzić
(dodatkowo pomaga w tym odpowiednie ustawienie semaforów wyjazdowych).
Generalnie, im więcej stacji i rozbudowana sieć, tym więcej mamy do transportowania, a sam przeładunek to już sprawa pasażerów, nie nasza.
Ale tu właśnie zaczynają się schody, do pokonywania których służy przede wszystkim graf przepływu towarów:
[Obrazek: cargodist3.jpg]
Na powyższym przykładzie widzimy prawidłowe (zielone) strumienie pasażerów - dowożeni i odwożeni są autobusami na jedną stację, a na tej stacji, oprócz dalekobieżnych, są pociągi podmiejskie zawożą na drugą stację w celu przesiadki do innej relacji.
Bardzo istotna jest tutaj wydajność transportu miejskiego. Niestety autobusy czasem nie wystarczają, dlatego bardzo wskazane są tramwaje, a w późniejszych etapach również metro. 2cc trains set zawiera zestaw wolnych (60km/h) ale pojemnych pociągów z szybką wymianą pasażerów. Jest też newgrf 2cc Subways from the 2cc Set zawierający tylko metro (również takie jak w Wawie), polecam uwadze.
Brak wydajnego transportu miejskiego powoduje dwie rzeczy.
Po pierwsze, pasażerowie nie mogą dojechać na stację by zapełnić pociąg:
[Obrazek: cargodist4.jpg]
Na powyższym grafie widzimy czerwoną linię z Kraków Wschód do Kraków - czyli dużo pasażerów chce jechać w tej relacji, a nie może.
Po drugie, i gorsze, pasażerowie czekają na stacji, nie mogąc dojechać do finalnego przystanku przeznaczenia.
A dopiero wtedy dostaniemy przychód!
Przykład dwóch błędów na jednej stacji:
[Obrazek: cargodist5.jpg]
po pierwsze, pasażerowie którzy wysieli w Myszkowie, nie mogą się dostać do Zawiercia, bo za mało jest autobusów. To się da poprawić.
Ale co gorsza, pasażerowie z Zawiercia stoją na stacji i nie mogą pojechać dalej, bo pociągi są już zapełnione.
A jak wiadomo, cała sieć jest tak silna, jak najsłabsze ogniwo.
Te czerwone ogniwa trzeba lokalizować na wykresie, sprawdzać gdzie konkretnie chce jechać większość pasażerów i rozwiązywać problem (więcej pospiesznych bezpośrednich, albo odwrotnie, więcej osobowych).
Inna ważna rzecz związana z cargodist, na przykładzie linii Kraków-Praga przez Bielsko.
Topologia była taka, ze w Bielsku było odgałęzienie na Śląsk:
[Obrazek: cargodist6.jpg]
Gdybym zrobił pociąg bezpośredni Kraków-Praga, to po pierwsze mógłby jechać pustawy, bo w Krakowie jest 2000 pasażerów, ale większość chce w innym kierunku.
Gorzej, bo w Bielsku jest ich 6000, bo nie tylko z Bielska, ale też ze Śląska.
Prędzej czy później Cargodist "zorientował by się" że można ich przewieźć via Kraków, w efekcie płaciliby za dystans Bielsko-Praga ale czas przejazdu Bielsko-Kraków-Praga - czyli mało płacą, dużo jeżdżą.
Z drugiej strony, może być też sytuacja odwrotna - puścimy pociąg do Pragi z zatrzymaniem w Bielsku, ale będzie zajęty przez pasażerów Kraków-Bielsko,
w Bielsku akurat mało kto wsiądzie i dalej pojedzie pustawy.
Na prawdziwej kolei radzą sobie z tym, dając na niektóre pociągi klauzulę
"tylko dla pasażerów w komunikacji międzynarodowej".
I tak samo można w openttd, używając dla stacji Bielsko dyrektywy "no unloading and take cargo" (nie rozładowuj), i to samo w druga stronę, dla węzłowej stacji stacji Pardubice.
Jak ktoś chce jechać Kraków-Bielsko albo Praga-Pardubice, to są do tego osobówki.