Geometria obliczeniowa Wykład 12 Planowanie ruchu Najkrótsza ścieżka między dwoma punktami. Znajdywanie ścieżki między dwoma punktami. Ruch postępowy robota wielokątnego na płasz-czyźnie. Ruch z możliwością obrotów.
Planowanie ruchu – najkrótsza ścieżka między dwoma punktami. Problem. Na płaszczyźnie dany jest obszar A (ograniczony lub nie) z dziurami mający w sumie n krawędzi, reprezentowany w postaci podwójnie łączonej listy krawędzi, oraz dwa wybrane punkty s i t. Znajdź najkrótszą ścieżkę łączącą s i t (o ile istnieje). Lemat. Minimalna ścieżka łącząca punkty s i t jest łamaną składającą się z krawędzi grafu widzialności dla zbioru krawędzi obszaru A oraz punktów s i t (tzn. najkrótsza ścieżka między punktami s i t może zmieniać kierunek jedynie w punktach będących wierzchołkami obszaru A).
Algorytm. stwórz graf widzialności W dla zbioru krawędzi obszaru A oraz punktów s i t; if punkty s i t należą do tej samej spójnej składowej grafu W then zastosuj algorytm Dijkstry w celu znalezienia najkrótszej ścieżki z s do t; return najkrótsza ścieżka; Twierdzenie. Algorytm działa w czasie O(n2). Dowód. Graf W tworzymy w czasie O(n2). Spójne składowe sprawdzamy w tym samym czasie. Najkrótszą ścieżkę znajdujemy w czasie O(|V|log|V|+|E|).
Twierdzenie (Hershberger, Suri 1997) Ścieżkę o minimalnej długości między dwoma danymi punktami w obszarze z dziurami na płaszczyźnie, którego rozmiar wynosi n, można znaleźć w czasie O(n log n) wykorzystując pamięć rozmiaru O(n log n). W celu znalezienia najkrótszej ścieżki konstruowane są SPM(p) – mapy najkrótszych ścieżek, tzn. podział płaszczyzny na obszary, w których pun-kty mają dokładnie jeden najbliższy wierzchołek obszaru widzialny z p.
Znajdywanie ścieżki między dwoma punktami. Problem. Dany jest obszar z dziurami P na płaszczyźnie oraz dwa wyróżnione punkty s i t. Znajdź ścieżkę łączącą s i t (o ile istnieje). Zakładamy, że dziury są zbiorami otwartymi. Obszar P jest reprezentowany w postaci podwójnie łączonej listy krawędzi K. Orientacja krawędzi obszaru P określa jego wnętrze i zewnętrze. Mapa trapezowa. Wykorzystując metodę zamiatania podzielimy obszar P na trapezy o podsta-wach prostopadłych do kierunku zamiatania. Strukturą zdarzeń będzie uporządkowana względem kierunku zamiatania (np. osi y-ów) lista Q wierzchołków obszaru P. Strukturą stanu będzie zrównoważone drzewo wyszukiwań binarnych T za-wierające aktywne krawędzie obszaru P uporządkowane względem kolejności ich przecięć z miotłą (wzdłuż osi x-ów).
Algorytm. stwórz listę Q; while Q do q := POP(Q); usuń z T krawędzie, których końcem jest q; znajdź w T sąsiadów q; for każdy sąsiad q w T do if krawędź łącząca q z sąsiadem należy do obszaru then uaktualnij strukturę K; dodaj do T krawędzie, których koń- cem jest q i są przed miotłą; return K;
Lemat. Mapę trapezową wielokąta z dziurami o rozmiarze n można skonstruować w czasie O(n log n) i pamięci O(n). Dowód. W danym położeniu miotły operacja znalezienia sąsiadów wymaga czasu O(log n). Sprawdzenie należenia badanej podstawy trapezu do wnętrza obszaru D oraz aktualizacja struktury K wymagają czasu stałego. Liczba nowych wierzchołków i krawędzi w mapie trapezowej jest proporcjo-nalna do rozmiaru obszaru D. Rozmiary struktur zdarzeń i stanu są liniowe względem rozmiaru obszaru D. Mapa drogowa. Na podstawie mapy trapezowej tworzymy graf, który umożliwi nam stwier-dzenie, czy dane dwa punkty p1, p2 można połączyć ścieżką.
Algorytm. stwórz mapę trapezową; for każdy trapez do wyznacz punkt wewnątrz trapezu i połącz środki krawędzi tworzących podstawy trapezu z tym punktem; for i=1 to 2 do połącz pi z wyznaczonym punktem wewnątrz trapezu zawierającego pi ; sprawdź, czy w powstałym grafie p1 i p2 należą do tej samej spójnej składowej;
Lemat. Mapę drogową w obszarze z dziurami o rozmiarze n możemy obliczyć w czasie O(n log n) i wymaga ona O(n) pamięci. Dowód. Mapę trapezową obliczamy w czasie O(n log n). Korzystając z podwójnie łączonych list krawędzi tworzymy mapę drogową w czasie proporcjonal-nym do rozmiaru mapy trapezowej, czyli O(n). Zatem jej rozmiar jest również O(n). Twierdzenie. Ścieżkę między dwoma danymi punktami w obszarze z dziurami o rozmiarze n możemy znaleźć lub stwierdzić jej brak w czasie O(n log n). W czasie O(n log n) tworzymy mapę drogową. Zbadanie jej spójnych składowych wymaga czasu O(n).
Ruch postępowy robota wielokątnego na płaszczyźnie. Problem. Dany jest robot, którego rzut na podłoże jest wielokątem (zazwyczaj wypukłym), poruszający się w obszarze z przeszko-dami (dziurami) ruchem postępowym, tzn. każdy z punktów robota porusza się po takim samym torze w tym samym czasie (robot nie obraca się). Definicja. Niech R(0,0) oznacza listę położeń wierzchołków robota w chwili startu. R(x,y) := R(0,0) + (x,y) Załóżmy, że środek układu współrzęd-nych należy do wnętrza robota. Ruch tego punktu opisuje ruch całego robota. Nazywamy go punktem odniesienia. R(x,y) R(0,0)
R(0,0) R(x,y) Przestrzeń rzeczywista Definicja. Przestrzeń, w której porusza się robot nazywamy przestrzenią rzeczywistą. Przestrzeń parametrów robota nazywamy przestrzenią konfiguracji. W przestrzeni tej robot przyjmuje postać jednopunktową odpowiadającą jego punktowi odniesienia. Jak wyglądają przeszkody (obszary za-bronione) w przestrzeni konfiguracji ? Przestrzeń konfiguracji
Przykład. Gdy przesuwany obiekt jest kołem, to przeszkody należy rozszerzyć w każym kierunku o promień koła. Gdy środek koła będzie leżeć poza po-większonymi przeszkodami, to jego brzeg nie będzie nachodzić na żadną z rzeczywistych przeszkód.
Suma Minkowskiego. Definicja. Rozpatrzmy wielokąty A i B jako zbiory wektorów o współrzędnych odpowiadających współrzędnym punktów należących do tych wielokątów. Sumą Minkowskiego wielokątów A i B jest A + B := {x + y : x A y B}. Fakt. Suma Minkowskiego dwóch wielo-kątów zależy od ich położenia. Załóżmy, że w położeniu począt-kowym środek układu współ-rzędnych znajduje się wewnątrz robota.
Fakt. Zauważmy, że jeśli obiekt styka się z brzegiem obszaru lub dziury, to środek obiektu jest odległy od punktu styczno-ści o wektor przeciwny do wektora łączącego środek z punktem styczności. Zatem powiększone przeszkody okreś-lane są przez sumę Minkowskiego D-R. Algorytm. oblicz sumę Minkowskiego D-R; sprawdź, czy istnieje ścieżka między położeniem początkowym i końcowym; R(x,y) R(0,0)
Złożoność algorytmu zależy od kształtu robota i przeszkód. Załóżmy, że robot R ma stałą liczbę wierzchołków, a obszar D ma n wierz-chołków. R D Rozmiar sumy Złożoność czasowa konstrukcji wypukły wypukły O(n) O(n) wypukły niewypukły O(n) O(n log n) niewypukły niewypukły O(n2 ) O(n2 log n) Twierdzenie. Gdy obszar D o n wierzcholkach jest wypukły (dziury są też wypukłe) a robot R jest wypukły i ma O(1) wierzchołków, to możemy znaleźć ścieżkę, wzdłuż której można przesunąć R z punktu między dwoma danymi położeniami bez kolizji z żadną przeszkodą (lub stwierdzić, że jest to niemożliwe) w czasie O(n log n). Dowód. Sumę Minkowskiego D-R znajdujemy w czasie O(n). Następnie znajdujemy ścieżkę między danymi punktami w czasie O(n log n).
Twierdzenie. Niech P i R będą wielokątami o odpowiednio n i m wierzchołkach. Złożoność sumy Minkowskiego wielokątów P i R ma następujące ograniczenia: O(n+m), jeśli oba wielokąty są wypukłe, O(nm), jeśli jeden z wielokątów jest wypukły, a drugi nie, O(n2m2), jeśli oba wielokąty nie są wypukłe. Ograniczenia są ścisłe w pesymistycznym przypadku.
Ruch z możliwością obrotów. W przypadku poruszania się robota, które może się obracać, mamy jeden stopień swobody więcej. Dlatego przestrzeń konfiguracji jest trójwymiarowa (trzeci wymiar odpowiada kątowi obrotu). Sposób planowania ruchu robota jest podobny jak w poprzednim przypadku, choć nieco bardziej skomplikowany. Twierdzenie (Canny, 1987) Problem planowania ruchu, w którym robot ma d stopni swobody można rozwiązać w czasie O(nd log n).
Geometria obliczeniowa Wykład 12 c.d. Algorytmy równoległe Otoczka wypukła. Triangulacja wielokąta monotonicznego. Sprawdzanie istnienia pary przecinających się odcinków.
Otoczka wypukła. Chcemy znaleźć otoczkę wypukłą n elementowego zbioru S punktów na płaszczyźnie. Rozpatrujemy model PRAM, w którym procesory komunikują się poprzez wspólną pamięć. Wyróżniamy różne rodzaje obliczeń w zależności od tego, czy procesory mogą jednocześnie czytać (CR) informacje z tej samej komórki pamięci czy nie (ER) oraz czy mogą jednocześnie zapisywać dane (CW) czy tylko osobno (EW). W przypadku CW określamy dodat-kowo jaki sposób zapisu danych nie powoduje konfliktu. Algorytm 1. Dysponujemy O(n3) procesorami CRCW PRAM typu AND (mogą bez-konfliktowo zapisywać te same informacje).
for każdy p S do CH(p,1) := true; CH(p,2):=true; for każda para q,r S-{p} do if qpr > then CH(p,1) := false; if rpq > then CH(p,2) := false; if CH(p,1) or CH(p,2) then return(p) ; Lemat. Algorytm 1 znajduje otoczkę wypukłą w czasie stałym.
if A(p)+B(p) or C(p)+D(p) then return(p) ; Algorytm 2. Dysponujemy O(n2) procesorami CRCW PRAM typu SMALL (zapisują dane o najmniejszej wartości). Mierzymy kąt między prostą równoległą do osi x-ów przechodzącą przez punkt p a odcinkiem łączącym p z punktem q po-wyżej (G) i poniżej (D), zgodnie (C) i przeciwnie (CC) do ruchu wskazówek zegara. for każdy p S do for każdy q S-{p} do A(p) := GC(q); B(p) := DCC(q); C(p) := GCC(q); D(p) := DC(q); if A(p)+B(p) or C(p)+D(p) then return(p) ;
Lemat. Algorytm 2 znajduje otoczkę wypukłą w czasie stałym. Algorytm 3. Dysponując O(n) procesorami CREW PRAM skorzystamy z metody „dziel i rządź”. posortuj punkty względem x-ów; while zbiory nie są dostatecznie małe do dziel je na pierwiastkowo wiele części o zbliżonym rozmiarze; znajdź otoczki małych zbiorów; while jest więcej niż jedna otoczka do połącz otoczki w kolejności odwrot- nej do kolejności podziału;
Jak łączymy małe otoczki ? oblicz styczne zewnętrzne dla każdej pary otoczek stosując wyszukiwanie binarne; systemem pucharowym znajdź krawędzie lub styczne maksymalnie odchylone od pionu w górę (dla górnych) i w dół (dla dolnych); połącz krawędzie nowych otoczek w listy; zastosuj sumy prefiksowe do określenia kolejności wierzchołków; stablicuj nowe otoczki;
Twierdzenie (Cole’88). Zbiór n liczb rzeczywistych można posortować w czasie O(log n) z pomocą O(n) procesorów CREW PRAM Twierdzenie. Algorytm 3 znajduje otoczkę wypukłą n elementowego zbioru S punktów na płaszczyźnie w czasie O(log n) wykorzystując w tym celu O(n) pro-cesorów CREW PRAM. Dowód. Wyszukiwanie binarne, system pucharowy, sumy prefiksowe na zbiorze n elementowym można wykonać w czasie O(log n). Zatem złożoność algorytmu opisuje równanie: T(n) = T(n1/2) + O(log n), czyli T(n) = O(log n).
Triangulacja wielokąta monotonicznego. Podczas triangulacji wielokąta o n wierzchołkach, reprezentowanego przez ciąg kolejnych krawędzi, korzystać będziemy z O(n) procesorów CREW PRAM. Procesory związujemy z wierzchołkami wielokąta. Algorytm będzie składać się z dwóch faz. W pierwszej podzielimy wielokąt monotoniczny na mniejsze wielokąty, w których jednym z łańcuchów wyznaczających brzeg wielokąta będzie odcinek. Tak otrzymane wielokąty będziemy triangulować w drugiej fazie algorytmu.
Pierwsza faza. posortuj wierzchołki wielokąta względem kierunku monotoniczności (pamiętaj sąsiednie wierzchołki na brzegu); for każdy wierzchołek do if kolejny wierzchołek w ciągu nie należał do tego samego łańcucha then połącz oba wierzchołki krawędzią;
for każdy wierzchołek do Stosując pointer jumping stwórz listy Druga faza. sortuj punkty dłuższego łańcucha względem odległości od pojedynczej krawędzi łańcucha; for każdy wierzchołek do Stosując pointer jumping stwórz listy wskaźników do wierzchołków o minimalnych współrzędnych odległych nie więcej niż kolejne potęgi dwójki; wyszukaj binarnie najbliższe wierzchołki o mniejszych współrzędnych (o ile istnieją) i połącz je krawędzią; 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Twierdzenie. Wielokąt monotoniczny o n wierzchołkach można striangulować z pomocą O(n) procesorów CREW PRAM w czasie O(log n). Dowód. Każdy z kroków pierwszej i drugiej fazy algorytmu można wykonać w czasie O(log n).
Sprawdzanie istnienia pary przecinających się odcinków. Problem. Dany jest zbiór S zawierający n odcinków na płaszczyźnie. Sprawdź, czy istnieją dwa przecinające się odcinki. Dysponujemy O(n log n) procesorami CREW PRAM. W celu znalezienia rozwiązania posłużymy się drzewem odcinków (patrz wykład nr 5).
Drzewo odcinków jest zrównoważonym drzewem binarnym T, w którym liście odpowiadają przedziałom elemen-tarnym określonym przez końce odcinków z I, każdy węzeł wewnętrzny odpowiada przedziałom będącym sumą przedziałów elementarnych liści poddrzewa tego węzła, Int(v) := Int(vl) Int(vr), każdy węzeł wewnętrzny lub liść v pa-mięta przedział Int(v) i zbiór przedziałów I(v) I, który zawiera [x1,x2] I takie, że Int(v) [x1,x2] oraz (Int(ojciec(v)) [x1,x2]). Fakt. Drzewo odcinków ma rozmiar O(n log n) i wysokość O(log n). Czas konstrukcji (sekwencyjnie) wynosi O(n log n). 5,6 2 1 4 1,2 3 2,3 5 1 2 3 4 5 6
5,6 2 1 4 1,2 3 2,3 5 1 2 3 4 5 6 Konstrukcja drzewa odcinków. Posortuj końce odcinków. Stwórz drzewo binarne zupełne o liściach odpowiadających prze-działom elementarnym. Procesory odpowiadające danym odcinkom z S przemieszczają się od korzenia w kierunku liści znajdując węzły (pokrywające), dla których Int(v) [x1,x2] oraz (Int(ojciec(v)) [x1,x2]). Lemat. Wykorzystując O(n) procesorów CREW PRAM możemy stworzyć drzewo odcinków dla danego zbioru S w czasie O(log n). 5,6 2 1 4 1,2 3 2,3 5 1 2 3 4 5 6
Definicja. Niech I(v) oznacza przedział na osi x-ów odpowiadający v, P(v) - pas I(v) (-,+) a Z(v) - zbiór odcinków pokrywanych przez I(v). Niech H(v) oznacza uporządkowane listy odpowiadające punktom kolejnych przecięć Z(v) z brzegami P(v). Każdej etykiecie pokrycia przypisany jest procesor. Zatem wszystkie listy H(v) możemy stworzyć w czasie logarytmicznym. 5,6 2 1 4 1,2 3 2,3 5 w v 1 2 3 4 5 6 I(v) I(w) Z(v) = {3} H(v) = {(3), (3)} Z(w) = {5,6} H(w) = {(5,6), (6,5)}
Mamy dwa przypadki. Istnieje przecięcie odcinków z Z(v). Możemy to stwierdzić badając kolejność odcinków na listach H(v). Odcinki z Z(v) przecinają się z odcinkami, które przecinały pas wyznaczany przez syna v, a teraz mają jeden koniec wewnątrz pasa P(v). Wtedy sprawdzamy, między którymi odcinkami z Z(v) znajduje się koniec danego odcinka należący do brzegu pasa i czy odcinek ten przecina któregoś z sąsiadów. Lemat. Wszystkie powyższe operacje można wykonać w czasie O(log n) równolegle w każdym węźle.
Fakt. Sytuacja, w której przecinają się dwa odcinki nieprzecinające całego pasa nie ma miejsca, bo takie przecięcie zostałoby wykryte na niższym poziomie. for każdy wierzchołek v do stwórz zbiory Z(v) i H(v); if odcinki z H(v) przecinają się then return „przecinają się” else scal H(v) z odcinkami mającymi jeden koniec wewnątrz pasa P(v) if odcinki przecinają się then return „przecinają się”; return „nie przecinają się” 5,6 2 1 4 1,2 3 2,3 5 1 2 3 4 5 6 1 2 3 4 5 6 1 2 3 4 5 6 1 2 3 4 5 6 1 2 3 4 5 6 1 2 3 4 5 6
Twierdzenie. Z pomocą O(n log n) procesorów CREW PRAM możemy sprawdzić w czasie O(log n), czy w danym zbiorze S zawierającym n odcinków na płaszczyźnie istnieją co najmniej dwa, które się przecinają.
Dziękuję za uwagę.
Ćwiczenia. 1. Udowodnij, że ścieżka o minimalnej długości łącząca dane punkty s i t jest łamaną składającą się z krawędzi grafu widzialności dla zbioru krawędzi danego obszaru A oraz punktów s i t (tzn. najkrótsza ścieżka między punktami s i t może zmieniać kierunek jedynie w punktach będących wierzchołkami obszaru A). 2. Dlaczego wybieramy punkty wewnątrz trapezów w mapie drogowej ? 3. Udowodnij, że kształt sumy Minkowskiego robota i przeszkody nie zależy od wyboru punktu odniesienia. 4. Pokaż, że suma dwóch wielokątów niewypukłych, z których jeden ma skończoną liczbę wierzchołków a drugi ma n wierzchołków, może mieć rozmiar O(n2).
5. Wykorzystując O(n2) procesorów CRCW PRAM typu AND znajdź maksimum n liczb w czasie stałym. 6. Wykorzystując O(n) procesorów CRCW PRAM typu AND znajdź pierwsze wystąpienie jedynki w n-elementowym ciągu 0-1 w czasie stałym. 7. Wykorzystując O(n) procesorów CREW PRAM stwórz drzewo odcinków dla danego zbioru n odcinków S w czasie O(log n). 8. Udowodnij, że sytuacja, w której przecinają się dwa odcinki nieprzecinające całego pasa nie ma miejsca, gdyż takie przecięcie zostałoby wykryte w pasie o mniejszej szerokości, który jest w całości przecinany przez co najmniej jeden z danych odcinków. 9. Z pomocą O(n) procesorów CREW PRAM znajdź w czasie O(log n) minimalny pas zawierający dany zbiór n punktów na płaszczyźnie.