2016-07-02 42 views
15

To jest po prostu coś, co wymyśliłem sam, ale wydaje się, że jest to zabawny problem i to mnie zaskoczyło.Najszybsza ścieżka z przyspieszeniem w punktach

Masz zestaw punktów w przestrzeni dwuwymiarowej, z jednym punktem oznaczonym "Start" i jednym "Koniec". Każdy punkt ma współrzędne (w metrach od początku), ale także "numer przyspieszenia" (w metrach/sekundę delta-V). Po osiągnięciu punktu (łącznie z początkiem) możesz przyspieszyć do tego punktu liczbę przyspieszeń w dowolnym kierunku. Koszt krawędzi zależy od aktualnej prędkości, ale musisz też poruszać się we właściwym kierunku.

Czy istnieje skuteczny algorytm znajdowania najszybszej ścieżki do punktu końcowego? Nie wymyśliłem niczego lepszego niż "Wypróbuj każdą ścieżkę i sprawdź wyniki". Djikstry i inne proste algorytmy nie działają, ponieważ nie można łatwo powiedzieć, że jedna ścieżka do punktu pośredniego jest lepsza lub gorsza od innej, jeśli przybyliście z różnymi prędkościami początkowymi.

Jeśli to zbyt łatwe, a co jeśli dodasz wymóg, aby zatrzymać się w punkcie końcowym? (to znaczy, musisz mieć mniej niż wartość przyspieszenia, gdy osiągniesz koniec).

EDYCJA: Aby było jasne, kierunek ma znaczenie. Utrzymujesz wektor prędkości podczas przemierzania wykresu, a przyspieszanie oznacza dodawanie do niego wektora, którego wielkość jest ograniczona do liczby przyspieszenia tego punktu. Oznacza to, że są sytuacje, w których budowanie ogromnej prędkości jest szkodliwe, ponieważ będziesz jechać zbyt szybko, aby "sterować" w kierunku innych cennych punktów/miejsca docelowego.

+0

Będziesz musiał podać więcej szczegółów. Jak działałaby Twoja koncepcja "przyspieszenia"? Czy redukuje wszystkie koszty krawędzi wzdłuż ścieżki o "numer przyspieszenia"? Co się stanie, jeśli zgromadzisz "liczbę przyspieszeń" znacznie przewyższającą koszty krawędzi? Wprowadzenie pojęcia "przyspieszenie" sugeruje, że dobrze byłoby wprowadzić odpowiednią koncepcję tarcia/oporu, w przeciwnym razie można by otrzymać "niezaprawioną prędkość". Do tej pory nie sądzę, aby twoje pytanie było wystarczająco jasne, abyśmy mogli sformułować odpowiednie rozwiązanie, ale myślę, że jest to bardzo interesujące. – lightalchemist

+2

Wątpię, czy istnieje analityczne rozwiązanie tego problemu. Zacznę od rozwiązania znacznie prostszego problemu: najszybszej trasy, która przyjmuje punkty w określonej kolejności. (Ta przestrzeń poszukiwań ma wiele wymiarów równą liczbie punktów pośrednich i nie widzę lepszego podejścia niż wyżarzanie.) Po uzyskaniu tej metody możesz stworzyć zmodyfikowaną Dijkstrę. – Beta

+0

@lightalchemist Przez "Acceleration" mam na myśli "Zmiana prędkości". (Tak więc, koszt krawędzi = odległość/prędkość euklidesowa, ale dozwolone tylko, jeśli podróżujesz we właściwym kierunku ... tak) Niezaznaczona prędkość jest w porządku (to ma być układanka matematyki, a nie symulacja ... chociaż ja Początkowo wyobrazimy sobie, że jest to statek kosmiczny zbierający skrzynie z paliwem, więc tarcie nadal nie byłoby rzeczą.) –

Odpowiedz

3

Myślę, że wymóg, aby użyć tylko przyspieszenia z każdego punktu raz sprawia, że ​​problem NP jest kompletny w ogólnym przypadku. Rozważyć wejście, które wygląda tak:

enter image description here

Jeśli „ogromny dystans” między punktem końcowym a resztą punktów jest wystarczająco duża, aby zdominować koszt ostatecznego rozwiązania, znalezienie optymalnego rozwiązania będą sprowadzić się do znalezienia sposobu na pobranie jak największej liczby przyspieszeń od początku wykresu. Jeśli zezwolisz na przekazywanie tylko jednego punktu, będzie to równoznaczne z problemem ścieżki Hamiltonian, który jest NP zupełny.

Powiedziałeś, że twój problem zawiera dodatkowe zasady (odległości są euklidesowe, wykres jest zawsze kompletny), co może w końcu sprawić, że problem będzie łatwiejszy.

+1

Nie sądzę, że jest to problem dotyczący ścieżki Hamiltona (może być trudniej nie jest to łatwiejsze), ponieważ nie ma gwarancji, że odwiedzenie każdego punktu będzie najlepsze. Przyspieszanie polega na prędkości, a nie tylko na zwiększaniu prędkości ... więc jeśli musisz zmienić kierunek, by trafić każdy punkt, możesz wyjść z niego poruszając się wolniej, niż gdy uderzysz 4 lub 5, które są w przybliżeniu kolinearne z twoim przeznaczenie. –

+0

Umm ... Myślę, że być może trzeba będzie wyraźnie określić tryb działania fizyki w swoim modelu. Kiedy je przeczytałem, zrozumiałem, że przyspieszenie było prostym "przyspieszeniem prędkości", dzięki któremu wszelkie przyszłe krawędzie stały się tańsze. – hugomg

+0

OK, zredagowałem problem, aby było bardziej zrozumiałe. Myślałem, że kierunek ma znaczenie (więc gdyby twoja prędkość była wystarczająco wysoka, to nie byłby to kompletny wykres). Myślę, że zgadzam się, że w problemie, jaki opisałeś, w niektórych sytuacjach może dojść do ścieżki Hamiltona. –

3

Możesz spróbować rozwiązać ten problem wstecz, rekurencyjnie śledząc ścieżki od końca do każdego innego węzła, a następnie wyznacz maksymalną prędkość wzdłuż linii, aby móc skręcić z tego węzła do dowolnego innego. Reguła usuwania będzie istniała, jeśli istnieje ścieżka od bieżącego do następnego węzła, z mniejszą prędkością i mniejszym czasem spędzonym od końca, co oznacza, że ​​druga ścieżka jest bardziej optymalna, ponieważ może dotrzeć do większej liczby węzłów i zajmuje mniej czasu. Gdy ścieżka dotrze do węzła początkowego, powinna zostać ponownie obliczona w oparciu o maksymalną prędkość możliwą do osiągnięcia na początku i przechowywaną. Potem zbierasz ścieżkę, tracąc mniej czasu.

Musisz wyszukać tutaj dowolną dostępną ścieżkę, ponieważ dostępne ścieżki na wykresie zależą od stanu przeszłego z pośrednią mechaniką, użycie mniejszej szybkości pozwala na większy wybór.

+0

Nie jestem pewien, czy rozumiem całą twoją odpowiedź ... umysł wyjaśnił kilka rzeczy, które wyglądają, jakby były złe dla mnie? "wyznacz maksymalną prędkość wzdłuż linii, aby móc zmienić z tego węzła na dowolny inny" dźwięk, tak jak traci zbyt dużo informacji, ponieważ możesz być w stanie dotrzeć do niektórych węzłów, a nie do innych, lub dotrzeć do niektórych węzłów, ale tylko w zakresach prędkości, które uniemożliwić ci dotarcie do innych, itp. W "Regułę uboju będzie, jeśli istnieje ścieżka od bieżącego do następnego węzła z mniejszą prędkością i mniejszą ilością czasu spędzonego od końca", co masz na myśli mówiąc o "mniejszej prędkości?" Czasami prędkość jest dobra. –

+0

O "maksymalnej prędkości" - może to być na węźle, węzeł bliżej wektora pozwoli na wyższe prędkości. "Mniejsza prędkość" oznacza, że ​​jeśli pytasz o ścieżkę AB, ustal, jaką prędkość można osiągnąć, skręcając na A, by osiągnąć B, odkryć, że w B, która pochodzi z A, istnieje ścieżka, ale spędzasz mniej czasu na osiągnięciu B I była wolniejsza w AB, oznacza to, że twoja obecna ścieżka pozostaje w tyle i może zostać odrzucona. – Vesper

+0

Ale jest jedno zastrzeżenie, o którym myślałem: co jeśli zaczniesz od A i będziesz mógł odwiedzić A, aby przyspieszyć? Ten algorytm się nie powiedzie, jeśli istnieje węzeł za A. Imagine config: B --- A --- C, źródło to A, cel to C, a możesz przyspieszyć o 5 w A, a 10 w B, z AC jest dość długi. Właściwa ścieżka może skończyć się ABAC, powiedzmy, jeśli podróżujesz z 4 z A na B, wracasz na 6 z B na A, a potem na 11 z A na C, co będzie szybsze niż na 5 z A do C bezpośrednio, i szybciej niż ABC. – Vesper