Yet Another Pathfinder (YAPF) to najnowszy algorytm oprogramowania używany przez Manual (en) do kontrolowania ruchu pojazdu.
Contents |
Opis
YAPF to trzecia próba stworzenia algorytmu pathfinder dla OpenTTD. Pierwszym nowym algorytmem było New Train Pathfinding (NTP), które działa tylko w pociągach. Drugim było New global Pathfinding (NPF), które działa na wszystkich pojazdach i jest dość inteligentne, ale spowalnia system po zbudowaniu wielu pojazdów. Celem YAPF jest zapewnienie mocy i elastyczności NPF, przy jednoczesnej bardzo dużej optymalizacji, zmniejszającej obciążenie procesora (CPU).
Opcje konfiguracji
Rozwiń konfigurację
- Więcej informacji możesz znaleźć w dyskusji tego artykułu.
- Przeczytaj Instrukcję stylów przed edycją.
- Pamiętaj żeby usunąć ten szablon, kiedy artykuł zostanie rozbudowany.
Zobacz też
Notes
Ulepszenia w porównaniu do NPF
Według forum post by KUDr, istnieją 3 główne ulepszenia w YAPF w porównaniu do NPF:
- NPF tworzy węzeł dla każdego kafelka, podczas gdy YAPF rozszerza węzeł, postępując zgodnie z kafelkiem / trackdir, aż zobaczysz coś ważnego (stacja, punkt trasy, wybór itp.). To rozszerzenie węzła nazywa się "segment".
- YAPF buforuje swoje segmenty - początek/koniec kafelek/trackdir, koszt, ostatni kafelek sygnału/trackdir itp.
- YAPF ma znacznie bardziej złożoną strukturę - jest oparty na szablonach, aby umożliwić kompilatorowi optymalizację połączeń między modułami YAPF poprzez wstawianie.
Te ulepszenia zwiększają wydajność YAPF w porównaniu z NPF, ale także sprawiają, że kod jest bardziej złożony i trudniejszy do zrozumienia.
Strojenie(Tuning)
Można dostosować kilka opcji YAPF. Nie opiszę ich wszystkich, ponieważ są jasne, co robią .
Istnieją 4 opcje (właściwie 3), które są dość tajemnicze:
rail_look_ahead_max_signals = 10
rail_look_ahead_signal_p0 = 500
rail_look_ahead_signal_p1 = -100
rail_look_ahead_signal_p2 = 5
Najpierw sprawdza się, ile sygnałów YAPF patrzy przed naszym pociągiem. Kolejne opcje są używane do obliczania tablicy kar za pomocą następującego wzoru, w którym parametr "i" jest wartością sygnałów:
p=p0 + p1*i + p2*i*i
Tak więc mamy następującą tablicę kar sygnałowych dla określonej liczby w wyniku rail_look_ahead_max_signals:
p[]={500,405,320,245,180,125,80,45,20,5}
Teraz kilka przykładów:
For (the first) 3 signals: Red,Red,Red: penalty=500+405+320=1225
For (the first) 4 signals: Red,Green,Red,Green: penalty=500+0+320+0=820
Ostateczny koszt zostanie dodany do kosztu ścieżki. Może to pomóc w zmniejszeniu korków, gdy mamy pociągi blokujące drogę (4 semafory przed nami) i mamy alternatywny sposób.
To jest wewnętrzny materiał YAPF i nie powinien być dostrajany. Deweloper włożył wiele wysiłku w obliczenie właściwych wartości w p0, p1, p2.
Jedyną regulowaną wartością jest kara p1. Dokładny zakres wartości wynosi od -100 do -90. Jeśli wyjdziesz poza ten zakres, tablica kar będzie miała dziwne wartości i pociągi zaczną jechać inaczej niż się spodziewasz.
Jeśli chcesz bardziej agresywnego równoważenia obciążenia, wybierz p1 = -90, a otrzymasz następującą tablicę:
p[]={500,415,340,275,220,175,140,115,100,95}
Projekty zależne
Odnajdywanie ścieżek jest bardzo ważną częścią OpenTTD, a wprowadzenie nowego pathfindera oznacza duże zmiany w kodzie. To był powód, dla którego wstrzymano rozwój niektórych nowych funkcji, dopóki YAPF nie został ukończony. Ponieważ YAPF jest już w pełni wprowadzony, projekty te mogą zostać ponownie opracowane.
Znaki prędkości
Był skromny projekt kontrolujący, które pociągi jeżdżą po których torach w zależności od ich prędkości, Speed Signs. Jak dotąd ten projekt nie został odebrany po wdrożeniu YAPF. Inne łatki, które pozwalają graczowi kontrolować identyfikację trasy pociągu, można znaleźć w development forums.