Sztuczna inteligencja/SI Moduł 7: Różnice pomiędzy wersjami
Nie podano opisu zmian |
|||
Linia 27: | Linia 27: | ||
W przestrzeni <math>R^n</math> jesteśmy w stanie stosunkowo łatwo generować punkty rozkładem jednostajnym w kostce, czyli zbiorze spełniającym warunek: dla każdego '''i''' <math>l_i \le x_i \le h_i</math>. | W przestrzeni <math>R^n</math> jesteśmy w stanie stosunkowo łatwo generować punkty rozkładem jednostajnym w kostce, czyli zbiorze spełniającym warunek: dla każdego '''i''' <math>l_i \le x_i \le h_i</math>. | ||
Generacja punktu z rozkładem jednostajnym w takiej kostce odbywa się poprzez '''n'''-krotną realizację zmiennej losowej o rozkładzie jednostajnym na odcinku '''(0, 1)''' (można użyć wbudowanego generatora liczb losowych), co prowadzi do uzyskania zbioru wartości <math>u_i</math>. Na podstawie tak uzyskanych liczb losowych wyprowadza się wartości <math>x_i</math> jako <math>x_i = l_i + u_i( | Generacja punktu z rozkładem jednostajnym w takiej kostce odbywa się poprzez '''n'''-krotną realizację zmiennej losowej o rozkładzie jednostajnym na odcinku '''(0, 1)''' (można użyć wbudowanego generatora liczb losowych), co prowadzi do uzyskania zbioru wartości <math>u_i</math>. Na podstawie tak uzyskanych liczb losowych wyprowadza się wartości <math>x_i</math> jako <math>x_i = l_i + u_i (h_i - l_i)</math>. | ||
W przestrzeniach dyskretnych, w których węzły terminalne są osiągalne poprzez podanie ich numeru (np. przestrzeń wektorów bitowych), generacja węzła terminalnego może być wykonana poprzez losowanie z rozkładem jednostajnym wartości z zakresu '''1...N''' (gdzie '''N''' jest liczbą węzłów terminalnych) i odczytanie węzła o wylosowanym numerze. | W przestrzeniach dyskretnych, w których węzły terminalne są osiągalne poprzez podanie ich numeru (np. przestrzeń wektorów bitowych), generacja węzła terminalnego może być wykonana poprzez losowanie z rozkładem jednostajnym wartości z zakresu '''1...N''' (gdzie '''N''' jest liczbą węzłów terminalnych) i odczytanie węzła o wylosowanym numerze. |
Wersja z 09:47, 12 lip 2006
Złożoność obliczeniowa metod przeszukiwania
Zadanie przeszukiwania rozwiązywaliśmy dotychczas w taki sposób, aby zagwarantować znalezienie maksimum bądź minimum globalnego funkcji. Przestrzeń przeszukiwań, która jest drzewem, była przeszukiwana zgodnie z pewnym porządkiem, przy czym określenie kolejności przeglądanych węzłów było elementem różnicującym odmiany algorytmu przeszukiwania. W efekcie prowadzi to do pełnego przeglądu przestrzeni. W tej lekcji zajmiemy się technikami, które wykorzystują elementy losowości. Prowadzi to do algorytmów przeszukiwania, które nie gwarantują pełnego przeglądu przestrzeni w skończonej liczbie kroków, za to są mniej kosztowne obliczeniowo.
Motywacją wykorzystania elementów losowości w procesie przeszukiwania przestrzeni jest teoria złożoności obliczeniowej. Zajmuje się ona określaniem ilości operacji, potrzebnych do rozwiązania problemu, przy czym ta ilość operacji jest wyrażana jako funkcja ilości danych (parametrów) opisujących problem.
Załóżmy, że problem przeszukiwania, który rozwiązujemy, jest wynikiem rozwiązywania zadania scharakteryzowanego parametrami (na przykład liczbą przedmiotów, które można spakować do plecaka). Liczba węzłów przestrzeń przeszukiwań, wynikająca z tej liczby parametrów, da się oszacować jako , gdzie jest współczynnikiem rozgałęziania (dla problemu plecakowego równym 2), zaś jest stałą proporcjonalności. Pełny przegląd przestrzeni wymaga zatem rzędu operacji – mówimy, że złożoność obliczeniowa zadania przeszukiwania wynosi </math>o(k^n)</math>. Z punktu widzenia znajdowania węzła o najlepszej wartości funkcji oceny, oszacowanie powyższe ma pesymistyczny charakter – oznacza, że jeśli dane ułożą się niekorzystnie, metoda przeglądająca przestrzeń w sposób systematyczny natrafi na optymalny węzeł na końcu (co nie znaczy, że dla „korzystnych” danych nie natrafimy na węzeł optymalny nieco wcześniej niż po przejrzeniu wszystkich węzłów).
Zauważmy jednak, że jeśli rozwiązanie problemu wymaga określenia wartości parametrów, a przejście od jednego do drugiego węzła jest związane z określeniem wartości jednego parametru, wówczas węzeł optymalny od początkowego będzie dzielić krawędzi. Oznacza to, że gdybyśmy dysponowali „wyrocznią” wiedzącą z góry, na jakie wartości ustalać kolejne parametry, pesymistyczne oszacowanie liczby operacji wystarczających do wyznaczenia węzła optymalnego wynosiłoby . (W teorii złożoności obliczeniowej taki algorytm „z wyrocznią” ma swój odpowiednik w niedeterministycznej maszynie Turinga). Substytutem takiego algorytmu „z wyrocznią” jest algorytm, w którym wyrocznia jest zastąpiona sekwencją losowych decyzji. Siłą rzeczy, losowe decyzje jedynie z pewnym prawdopodobieństwem są zgodne z wyrocznią. Z tego względu należy powtarzać proces losowania aby zwiększyć prawdopodobieństwo, że choć raz uda się tę zgodność uzyskać.
Niniejsza lekcja jest poświęcona właśnie takim algorytmom z elementami losowości.
Algorytm losowego próbkowania
Przegląd metod zaczniemy od algorytmu losowego próbkowania. Algorytm ten tworzy zbiór węzłów używając poniższego schematu.
Algorytm losowego próbkowania
- powtarzaj k razy
- generuj losowo
Wraz z kolejnymi iteracjami algorytmu, zbiór odwiedzonych węzłów będzie coraz większy, a prawdopodobieństwo, że pokryje się on ze zbiorem wszystkich węzłów , wzrasta do jedności.
W przestrzeni jesteśmy w stanie stosunkowo łatwo generować punkty rozkładem jednostajnym w kostce, czyli zbiorze spełniającym warunek: dla każdego i .
Generacja punktu z rozkładem jednostajnym w takiej kostce odbywa się poprzez n-krotną realizację zmiennej losowej o rozkładzie jednostajnym na odcinku (0, 1) (można użyć wbudowanego generatora liczb losowych), co prowadzi do uzyskania zbioru wartości . Na podstawie tak uzyskanych liczb losowych wyprowadza się wartości jako .
W przestrzeniach dyskretnych, w których węzły terminalne są osiągalne poprzez podanie ich numeru (np. przestrzeń wektorów bitowych), generacja węzła terminalnego może być wykonana poprzez losowanie z rozkładem jednostajnym wartości z zakresu 1...N (gdzie N jest liczbą węzłów terminalnych) i odczytanie węzła o wylosowanym numerze.
Pewien kłopot może natomiast sprawić wygenerowanie węzłów terminalnych w przestrzeniach przeszukiwań takich jak rozważane wcześniej przy okazji heurystycznych metod przeszukiwania. Wzmiankowany kłopot wynika z faktu, że dla każdego węzła umiemy jedynie wygenerować jego najbliższych sąsiadów. A zatem wygenerowanie węzła terminalnego musi być wieloetapowe poprzez generowanie kolejnych nieterminalnych węzłów pośrednich, poczynając od węzła według poniższej metody.