Autor Wątek: Talk/Rozmowa: Ciekawe rozkłady generowane przez SWDR  (Przeczytany 1670 razy)

0 użytkowników i 1 Gość przegląda ten wątek.

Offline infinity215

  • Weteran
  • Zbanowany!
  • Wiadomości: 6
  • Siła reputacji: 195
  • infinity215 prezesinfinity215 prezesinfinity215 prezesinfinity215 prezesinfinity215 prezesinfinity215 prezesinfinity215 prezesinfinity215 prezesinfinity215 prezesinfinity215 prezesinfinity215 prezesinfinity215 prezes
Ciekawe rozkłady generowane przez SWDR
« dnia: 15 Lutego 2021, 19:04:35 »
Wybaczcie za jakość zdjęcia, zanim wpadłem na pomysł opcji prsc było już za późno. Wrzucajcie swoje ciekawe rj, które generuje automat SWDR. :)

Offline Mogort

  • Pioneer
  • *
  • Weteran
  • Grupa IV
  • *
  • Wiadomości: 11
  • Siła reputacji: 161
  • Mogort prezesMogort prezesMogort prezesMogort prezesMogort prezesMogort prezesMogort prezesMogort prezesMogort prezesMogort prezesMogort prezesMogort prezes
Odp: Ciekawe rozkłady generowane przez SWDR
« Odpowiedź #1 dnia: 16 Lutego 2021, 05:49:30 »
Nieraz zdarza się, że na posterunkach odgałęźnych generuje się w rozkladzie duże pt, które dubluje się też za nim. Co gorsza przy ręcznym układaniu, mimo że szlak początkowy jest wolny, pojawia się duże pt, którego nie da się pozbyć z rozkładu. Przekładanie scenerii w celu jego eliminacji, na wypadek braku luki czasowej, gdy ktoś inny zajmie ją swoim rozkładem nie pomaga i trzeba układać RJ od nowa. Podsumowując, jak wygląda schemat blokowy generatora RJ? Czemu pierwszy lepszy DR jest w stanie wygenerować ręcznie coś znacznie bardziej sensownego niż automat, który wyrzuca kilka propozycji, ale często krótkie i z postojami? I czy jest możliwa opcja dodania ogranicznika, który by takich kuriozalnych rozkładów nie pokazywał wcale, albo w ostatcznosci gdzieś na końcu listy, jeśli faktycznie sytuacja ruchowa i godziny dyżurów są słabe?

Offline Detiv

  • Weteran
  • Grupa II
  • *
  • Wiadomości: 29
  • Siła reputacji: 124
  • Detiv prezesDetiv prezesDetiv prezesDetiv prezesDetiv prezesDetiv prezesDetiv prezesDetiv prezesDetiv prezesDetiv prezesDetiv prezesDetiv prezes
Odp: Ciekawe rozkłady generowane przez SWDR
« Odpowiedź #2 dnia: 16 Lutego 2021, 08:51:52 »
Moim skromnym zdaniem skrypt generowania rozkładów w SWDR nie jest idealny, ale też nie jest najgorszy. Czasem automat wygeneruje lepszą propozycję niż dałoby radę zrobić ręcznie. Jednak no ... podejrzewam że skrpyt mógłby być bardziej zaawansowany, ale wtedy sam SWDR jeszcze bardziej by lagował przeglądarkę :P
Nic tu nie ma, proszę nie szukać ^^

Offline xoorbes

  • Zarząd
  • Administrator
  • Developer
  • Weteran
  • Naczelnik administratorów
  • Sponsor
  • Grupa VIII
  • *
  • Wiadomości: 701
  • Siła reputacji: 400
  • xoorbes prezesxoorbes prezesxoorbes prezesxoorbes prezesxoorbes prezesxoorbes prezesxoorbes prezesxoorbes prezesxoorbes prezesxoorbes prezesxoorbes prezesxoorbes prezes
    • Blender Development Fund
Odp: Ciekawe rozkłady generowane przez SWDR
« Odpowiedź #3 dnia: 16 Lutego 2021, 09:46:55 »
Automat do układania RJ działa mniej więcej tak:
  • Pobierz listę scenerii
  • Wylosuj 20 scenerii z listy
  • Odrzuć wszystkie nie pasujące do typu pociągu (długości torów, typy możliwe do wjazdu, obecność sieci trakcyjnej, itp
  • Wygeneruj 300 rozkładów
  • odrzuć te, gdzie pt na podg > 10 minut (ta zmiana weszła jakieś 2 miesiące temu)
  • [to co zostało posortuj (nie pamiętam w tej chwili klucza, ale to jest waga zarówno czasu rozkładu, jak i odległości)
  • Wyświetl do wyboru

Jeżeli jest dużo scenerii, a brane jest losowo tylko 20 z nich, to kilkukrotne wygenerowanie dla tych samych warunków wejściowych, daje rożne wyniki, więc polecam tę metodę.

Odpowiadając na pytanie, które za chwile padnie, dlaczego tylko 20 scenerii, a nie wszystkie - dlatego, że permutacja z 50 scenerii, zabija serwery, a permutacja z 20 jeszcze nie. Algorytm nie jest idealny, dlatego czasami ręcznie da się ułożyć Rj lepszy, a na pewno da się ułożyć dłuższy, bo można wybrać ręcznie więcej niż 20 scenerii. Ale, żeby to miało sens, to te scenerie musiałby nie mieć limitów czasowych dyżuru, bo taki przejazd zajmuje wiele godzin. A zdecydowana większość DR ma ustawiony limit na 1-2h do przodu. Więc tak naprawdę w naszych realiach w większości wypadków automat (użyty kilkukrotnie) się sprawdza. Wiem, że część z Was się ze mną nie zgodzi, ale powtarzam, dla większości przypadków, nie dla wszystkich.

To, że czasami automat ułoży rozkład z absurdalnymi czasami odjazdów - no ułoży, w końcu to automat. Po to DR ma głowę, żeby z surowych danych wybrał te, które najbardziej odpowiadają mechanikowi.

Czy będzie kiedyś zmieniony/usprawniony - kiedyś tak.

Offline Ares28

  • Developer
  • Weteran
  • Konstruktor
  • Wiadomości: 934
  • Siła reputacji: 729
  • Ares28 prezesAres28 prezesAres28 prezesAres28 prezesAres28 prezesAres28 prezesAres28 prezesAres28 prezesAres28 prezesAres28 prezesAres28 prezesAres28 prezes
  • Programista systemów SRK
Odp: Ciekawe rozkłady generowane przez SWDR
« Odpowiedź #4 dnia: 16 Lutego 2021, 14:30:18 »
Automat do układania RJ działa mniej więcej tak:
  • Pobierz listę scenerii
  • Wylosuj 20 scenerii z listy
  • Odrzuć wszystkie nie pasujące do typu pociągu (długości torów, typy możliwe do wjazdu, obecność sieci trakcyjnej, itp
  • Wygeneruj 300 rozkładów
  • odrzuć te, gdzie pt na podg > 10 minut (ta zmiana weszła jakieś 2 miesiące temu)
  • [to co zostało posortuj (nie pamiętam w tej chwili klucza, ale to jest waga zarówno czasu rozkładu, jak i odległości)
  • Wyświetl do wyboru

Ostatnio sporo siedzę w tematyce podobnych algorytmów optymalizacyjnych i mógłbym przygotować taki algorytm. Przede wszystkim nie należy brać pod uwagę aż tak samych scenerii, ale trasy które przez nią przechodzą. Rozwiązałbym to w następujący sposób:

Najpierw zdefiniujmy rozwiązanie takiego algorytmu jako rozkład który spełnia następujące wymagania:
  • Dla każdej trasy zgodny jest typ składu i nieprzekroczona maksymalna jego długość,
  • Na każdej trasie czas odjazdu nie przekracza czasu ustawionego przez DR tej scenerii,
  • Trasy są połączone między sobą prawidłowymi szlakami,
  • Każda sceneria pojawia się tylko raz,
  • Inne: np. brak pt na podg i po.

W przyszłości można dodać także ograniczenia połączeń szlaków zgodnie z ich typem blokady np. sbl-sbl / pbl-pbl albo elektryfikacji: spalina-spalina / drut-drut.

Oprócz tego definiujemy też sposób oceny rozwiązania np tak:

Ocena = długość km * a - czas dodatkowych postojów * b
gdzie: a i b są stałymi, stanowiącymi wagę danego czynnika dla obliczania oceny, które zostaną w trakcie testów dobrane tak by dać jak najlepsze wyniki.

Przez czas dodatkowych postojów rozumiemy sumę wszystkich postojów na wszystkich trasach pomniejszoną o ilość planowych postojów. Czyli jak na danej trasie mamy 20min postoju, a autor scenerii ustalił planowy postój (np. handlowy albo manewrowy) długości 5min to nieplanowany postój wynosi 15min.

Do tego równania można także dodać inne niekorzystne warunki, które dodatkowo wpływałyby negatywnie na ocenę takiego rozkładu, takie jak znaczne różnice w prędkościach między łączonymi szlakami np. połączenie LCS Gdańsk PrG (160) - Imielin MKs (30).

Do generowania poszczególnych tras można wykorzystać algorytm mrówkowy. Polega on na tym, że rozwiązania są wybierane w sposób losowy, ale najlepsze rozwiązanie wpływa na prawdopodobieństwo wyboru innych. W ten sposób zmniejsza się prawdopodobieństwo wyboru gorszych rozwiązań na rzecz tych lepszych.

Pseudokod takiego sposobu wyglądałby następująco:

1. Pobierz z SWDRa wszystkie trasy ze wszystkich scenerii
2. Usuń trasy niekompatybilne (nieprawidłowy typ, albo przekroczona długość składu itd.)
3. while (limit czasu na generowanie rozwiązań)
4.     stwórz rozkład algorytmem mrówkowym
5.     oceń rozkład
6.     dodaj go do listy rozwiązań
7.     znajdź najlepszy rozkład z listy
8.     dla najlepszego rozkładu zwiększ prawdopodobieństwo znalezienia podobnych rozkładów w algorytmie mrówkowym
9. repeat
10. pokaż userowi 10 najlepszych rozwiązań

Warto zauważyć że w zaproponowanym przeze mnie sposobie nie obowiązuje obecny limit maksymalnej liczby scenerii. Zamiast tego wprowadzono limit czasowy. Dzięki temu algorytm ten będzie generował tak samo długie rozkłady jakie można stworzyć ręcznie.

Offline Mogort

  • Pioneer
  • *
  • Weteran
  • Grupa IV
  • *
  • Wiadomości: 11
  • Siła reputacji: 161
  • Mogort prezesMogort prezesMogort prezesMogort prezesMogort prezesMogort prezesMogort prezesMogort prezesMogort prezesMogort prezesMogort prezesMogort prezes
Odp: Ciekawe rozkłady generowane przez SWDR
« Odpowiedź #5 dnia: 16 Lutego 2021, 14:58:00 »
Pięknie dziękuję za treściwą odpowiedź :) Tak mnie naszło nad ranem na przemyślenia, więc pozwoliłem je tu przelać. Bardziej żeby o nich nie zapomnieć, niż czepiać się, że SWDR jest zły :P
Głównej rzeczy, czyli logiki automatu już dowiedziałem i chodzi mi o to, żeby zrozumieć skrypt i pomóc w jego poprawieniu. Ciekawym i jasnym jest, że w tej konfiguracji permutacja z 20 losowych scenerii to max i przewijanie generatora jest jakimś wyjściem (pachnie mi to bogo sortem :P) z którego korzystam, kiedy mówię pas, żeby uspokoić nadszarpnięte nerwy. W takim układzie dalej będzie to dawało przewagę ręcznie robionym RJ (tu z kolei kłania i tak spore dociążenie DR na większych stacjach ruchem, czatem i walką z interfejsem, np.: brak skalowania tekstu przy wybieraniu szlaku z większej puli stacji, wyrzucaniu belek z wybranymi już szlakami bez opcji powrotu, konieczność weryfikowania godziny końca dyżuru poza oknem rozkładu).
Reasumując, chętnie bym się dowiedział jeszcze, jakim kluczem są sortowane wyniki i oferować swój czas nad poprawą tego stanu rzeczy. Nie mam może specjalistycznej wiedzy, aczkolwiek ucząc się sztuczek w Excelu udało mi się w dużej polskiej firmie 'z gołębiem w logo' nadgonić lata zastoju i godzin zmarnowanych na obróbce danych, co daje paliwo do chęci dalszego rozwijania się :)

EDIT po poście Aresa28:

Właściwie na takim algorytmie mrówkowym bazują DR przy rozkładach ręcznych i to jest fajna opcja na rozwiązanie tego problemu.
Nie wiem na ile dobrze główkuję, ale przed oceną (która ma ocenić "mniejsze zło", gdy algorytm natyka się na postoje) nie lepiej by było pójść w danie algorytmowi w liście scenerii okienek czasowych, które występują na danej scenerii do końca jej dyżuru i w zależności od vmax i kategoria kazać algorytmowi wylosować wolne miejsce, a dopiero potem jak takich nie ma, to oceniać co będzie można wrzucić w rozkład z jak najmniejszym postojem. :)
« Ostatnia zmiana: 16 Lutego 2021, 15:13:48 wysłana przez Mogort »

Offline xoorbes

  • Zarząd
  • Administrator
  • Developer
  • Weteran
  • Naczelnik administratorów
  • Sponsor
  • Grupa VIII
  • *
  • Wiadomości: 701
  • Siła reputacji: 400
  • xoorbes prezesxoorbes prezesxoorbes prezesxoorbes prezesxoorbes prezesxoorbes prezesxoorbes prezesxoorbes prezesxoorbes prezesxoorbes prezesxoorbes prezesxoorbes prezes
    • Blender Development Fund
Odp: Ciekawe rozkłady generowane przez SWDR
« Odpowiedź #6 dnia: 16 Lutego 2021, 16:24:13 »
Żeby cokolwiek poprawić, to potrzebna jest osoba biegle znająca JSa.

@Ares - dostęp do dokumentacji funkcjonalnej SWDR5 przecież masz, więc jak masz jakiś pomysł, to szczegółowo tam możesz to rozpisać i rozrysować. w SWDR4 żadnych większych zmian wprowadzać nie planujemy.
« Ostatnia zmiana: 16 Lutego 2021, 16:26:23 wysłana przez xoorbes »

Offline kojonek2

  • Developer
  • Weteran
  • Sponsor
  • *
  • Wiadomości: 436
  • Siła reputacji: 153
  • kojonek2 prezeskojonek2 prezeskojonek2 prezeskojonek2 prezeskojonek2 prezeskojonek2 prezeskojonek2 prezeskojonek2 prezeskojonek2 prezeskojonek2 prezeskojonek2 prezeskojonek2 prezes
Odp: Ciekawe rozkłady generowane przez SWDR
« Odpowiedź #7 dnia: 16 Lutego 2021, 17:37:58 »
Właściwie na takim algorytmie mrówkowym bazują DR przy rozkładach ręcznych i to jest fajna opcja na rozwiązanie tego problemu.

Układanie rozkładu ręcznie bardziej przypomina algorytm zachłanny

Offline Angelo

  • User
  • Wiadomości: 111
  • Siła reputacji: 204
  • Angelo prezesAngelo prezesAngelo prezesAngelo prezesAngelo prezesAngelo prezesAngelo prezesAngelo prezesAngelo prezesAngelo prezesAngelo prezesAngelo prezes
Odp: Ciekawe rozkłady generowane przez SWDR
« Odpowiedź #8 dnia: 16 Lutego 2021, 23:13:46 »
Żeby cokolwiek poprawić, to potrzebna jest osoba biegle znająca JSa.

I'm familiar with JS. Who can I ask to about how SWDR4 works? I already have some ideas that I would love to try.
Sorry, the only Polish words I understand are "witam" and "kolej" :)
I'm learning some Polish train-related words. Please be patient if sometimes I ask to speak in English.