Wpis z mikrobloga

Cześć, czy mógłby ktoś podrzucić jakieś wskazówki dotyczące znalezienia najkrótszej drogi, z punktu A, do punktu B, ale pomiędzy wieloma punktami (jadąc z punktu A, do punktu B, musi dojechać również do innych punktów, lub prościej - odwiedzić określone punkty, najkrótszą drogą)? Czytałem na temat algorytmu Dijkstry, ale on nie rozwiązuje tego problemu.
Dziękuję.

#programowanie #naukaprogramowania #cpp
  • 22
@ponton: Więc może wiesz na czym opierają się różne nawigacje, gdzie wybieramy punkt A, i B oraz pośrednie? Rozumiem że to nie jest najlepsza droga, ale w pewnym stopniu optymalna.
@Dede18: Tam się po prostu ustala kolejność tych punktów pośrednich i oblicza się najkrótszą odległość między kolejnymi parami. Np. jak ustawisz kolejność Warszawa -> Poznań -> Łódź -> Berlin, to najpierw pojedziesz do Poznania, potem cofniesz się do Łodzi, a z niej dopiero do Berlina, mimo że szybciej byłoby najpierw przez Łódź, a dopiero potem Poznań. Znalezienie tej optymalnej kolejności punktów pośrednich jest możliwe tylko brute forcem.
Więc może wiesz na czym opierają się różne nawigacje, gdzie wybieramy punkt A, i B oraz pośrednie? Rozumiem że to nie jest najlepsza droga, ale w pewnym stopniu optymalna


@Dede18: Po pierwsze nie ma czegoś takiego jak w pewnym stopniu optymalna, albo jest optymalna albo nie jest (optymalna == najlepsza). A nawigacje stosują przeróżne heurystyki żeby znaleźć drogę bliską optymalnej w rozsądnym czasie. Mnóstwo prac naukowych istnieje na temat stosowania heurystyk
@leoha: Raczej się przyjrzę bliżej algorytmowi genetycznemu, żeby rozwiązać ten problem (Chyba że istnieją inne, a również stosunkowo proste algorytmy?). Dzięki!
@Dede18 : ok, ja badałem dla 21 miast i wykonywało się to dłuugo. W zależności od operatorów krzyżowania i dobranych innych parametrów (liczebność populacji, procent nowych potomków, itd) po ok 300 generacjach wynik już znacząco się nie poprawiał.
Czystych genetycznych więc nie polecam.
@Anlak: @wnocy: Czy jestem w stanie jakąkolwiek metodą zejść do czasu kilku-kilkunastu minut przy kilkuset punktach? Oczywiście zakładam duży margines błędu wyniku końcowego, ale jak wspomniałem, to nie jest aż tak istotne przy dużej ilości.