Potrzebuję zaplanować podróż łączącą n lokalizacji na morzu z określonym początkiem i określonym miejscem docelowym z następującymi ograniczeniami.
Podróż musi dotknąć wszystkich lokalizacji.
Jeśli istnieje rezerwacja od A do B, to należy dotknąć przed B
Czas spędzony w każdej lokalizacji jest różny (w zależności od rezerwacji w tej lokalizacji).
Każda lokalizacja ma okno robocze. Jeśli statek dojdzie do okna roboczego, musi poczekać.
Uwaga: Algorytmy "minimalnego drzewa opinającego" mogą nie być takie, jak czas wymagany w każdym porcie zależy od poprzedniej trasy (z powodu okna roboczego).
Czy jest dostępny jakiś algorytm?Algorytm: Planowanie podróży
Odpowiedz
Ant colony optimization wydaje się być najlepszym rozwiązaniem tego znany. Zauważ, że jest to NP problem, a nawet problem NP-zupełny. Oznacza to, że "łatwo" sprawdzić, czy rozwiązanie jest poprawne, ale "ciężko" je znaleźć. Jedynym sposobem na znalezienie "optymalnego" rozwiązania byłoby wypróbowanie wszystkich możliwych rozwiązań, porównanie wyników i zrobienie najlepszego. Oczywiście nie można tego zaakceptować, jeśli chcesz rozwiązać problem w rozsądnym czasie.
Algorytmy ACO znajdą dobre rozwiązanie, zbliżone do optimum. Mówię blisko, ponieważ AFAIK nie może zagwarantować, że zawsze znajdzie najlepszą. Mogą istnieć lepsze rozwiązania. Jednak często nie jest konieczne, aby naprawdę znaleźć najlepsze rozwiązanie, rozwiązanie, które jest po prostu "bardzo dobre", wystarczy, a ACO jest dokładnie tym, czego szukasz. Może znaleźć rozwiązanie w rozsądnych odstępach czasu, a rozwiązanie będzie na pewno dobre.
W Twoim przypadku musisz nieco go zmodyfikować. Zwykle stara się znaleźć tylko najkrótszą trasę, uwzględniając jedynie ścieżkę. W twoim przypadku musi to uwzględniać twoje okno robocze, rezerwacje i czas spędzony na lokalizacji. Ale to tylko modyfikacje "jak mrówki podróżują", podstawowy algorytm pozostaje taki sam i nadal będzie działał tak samo.
Zobacz Traveling salesman problem
Czy zajmuje się częścią okna roboczego? Okno robocze oznacza, że waga krawędzi zależy od trasy do krawędzi. –
To jest problem komiwojażera z modyfikacją dodającą ograniczenie dla okna roboczego ... co oznacza, że rozwiązanie tego problemu będzie jeszcze trudniejsze do znalezienia niż standardowy problem komiwojażera.
Mam kilka podejść, które działają przyzwoicie, aby podać przybliżone rozwiązania.
- Genetic Algorithms
- Tabu Search
- Randomized Algorithm (Np błądzenia losowego)
ja nie wiem, czy odnosi się do problemu, z góry na głowie mówię, że nie , ale dynamic programming może być czasami używany w trudnych sytuacjach.
Jest wiele pracy nad tym problemem. Różni się on pod różnymi nazwami:
- Problem sprzedawcy samochodowego (routing pojazdu) z oknami czasowymi i ograniczeniami pierwszeństwa.
- Problem z odbiorem i dostawą.
Istnieje wiele badań na ten temat, wiele z nich w badaniu operacji Journals. Ten problem jest generalnie NP-trudny, więc ogólne, dokładne rozwiązanie problemu, który opisałeś, nie jest praktyczne, ale mogą istnieć dobre, dokładne lub przybliżone rozwiązania konkretnego problemu. Najlepszy algorytm będzie funkcją twoich danych.
- Jak duży jest twój zestaw danych. Jeśli "n" jest względnie małe (30-100), możliwe jest dokładne rozwiązanie z math programming.
- Jak szczelne są okna czasowe i ograniczenia pierwszeństwa. Jeśli liczba możliwych lokalizacji do odwiedzenia w dowolnym oknie czasowym jest niewielka, możliwe jest rozwiązanie takie jak programowanie dynamiczne.
- Jeśli nie możesz znaleźć szczególnego przypadku, prawdopodobnie chcesz połączyć heurystyczny algorytm budowy z post-procesorem lokalnego wyszukiwania. W prosty alternatywą jest tzw GRASP heurystyki, gdzie
- przystąpienia do istniejącej konstrukcji heurystyki,
- losowy jest tak, że wielu biegnie dadzą Ci wiele rozwiązań,
- uruchomić randomizowane wersję wiele razy
- wynos najlepsze rozwiązanie, które wynika.
- 1. Efektywne planowanie kursów uniwersyteckich
- 2. Planowanie obciążenia za pomocą algorytmu round robin?
- 3. Planowanie Round Robin w java
- 4. Planowanie wielu pojazdów zajezdni
- 5. Planowanie zadania Lua
- 6. API dla czasów podróży w tym ruchu?
- 7. MySQL kwerendy, aby uzyskać trasę podróży
- 8. Planowanie procesora: znalezienie czasu burstowego
- 9. Planowanie zgonów w testach perl
- 10. Planowanie uruchomionych zadań w java
- 11. Planowanie zależnych zadań w Quartz.Net
- 12. Planowanie zdarzeń podczas uruchamiania mysql
- 13. Planowanie zadań na wiosnę/Java
- 14. Planowanie wątków w systemie UNIX
- 15. Planowanie limitu czasu w Haskell
- 16. Dynamiczne planowanie zadań w Railsach
- 17. Teoria prawdopodobieństwa i planowanie projektu
- 18. planowanie wątku po wątku w aplikacji iPhone
- 19. Priorytetowe planowanie ponownego uruchamiania awarii usługi Android
- 20. Rozproszone planowanie zadań, zarządzanie nimi i raportowanie
- 21. Planowanie stylu Crontab w Play 2.4.x?
- 22. Recykling puli aplikacji IIS + planowanie kwarcu
- 23. Planowanie uruchamiania makra w każdej godzinie
- 24. Java: Planowanie zadania w przypadkowych odstępach czasu
- 25. Planowanie długotrwałych zadań za pomocą usług AWS
- 26. Planowanie uruchamiania metody o określonej godzinie.
- 27. ramowe zabaw 2.1 - Planowanie zadań asynchroniczny
- 28. Programowe planowanie/tworzenie Skype dla spotkań biznesowych
- 29. Planowanie publikacji na Google Play Android Market
- 30. Planowanie rezerwacji (nie restauracji) z pytonem
Dzięki. Brzmi obiecująco. Pozwól mi to opracować i zobaczyć, jak idzie. Przy okazji, czy dostępny jest pseudo kod? –
To nie jest problem NP. Szukasz rozwiązania minimalnego czasu. Prawidłowym terminem jest NP-Hard. –