Sterownik rozmyty (na przykładzie parkowania samochodu) 06 kwietnia 2010 Idea ogólna Celem programu jest symulacja zachowania się jakiegoś obiektu, zasymulowanie jakiegoś zjawiska, czynności, na podstawie rozmytych danych wejściowych. Wynikiem będą odpowiednie działania wynikające z takich danych wejściowych. Wersja 1 - dynamiczna: Symulacja ma na celu dotarcie do określonego stanu, np. zaparkowania w danym miejscu, ustawienia dźwigu w określonej pozycji, holowanie samochodu. Dane wejściowe są zmienne i zależne od poprzedniego stanu układu. Wersja 2 - statyczna: Symulacja polega na określeniu stanu układu w jednym momencie, przy zmianie przez użytkownika szeregu parametrów wejściowych, zmienia się wynik układu, np. przy określonych: obciążeniu procesora, temperaturze na procesorze i temperaturze otoczenia wynikiem będzie prędkość obracania się wiatraka (zwizualizowana jedynie ze względów estetycznych). Sterownik rozmyty składa się z bloków. Poniżej przedstawiony jest schemat takiego sterownika. Rysunek 1: Schemat sterownika rozmytego Rozmywanie (fuzyfikacja) Polega na przekształceniu danych wejściowych (można rzec - doświadczalnych) na dane rozmyte, wyrażone zmiennymi lingwistycznymi. Przykładowe dane wejściowe dla parkującej ciężarówki to jest x - przesunięcie względem linii przechodzącej przez środek rampy, oraz µ - kąt między osią ciężarówki, a osią układu, którą jest owa linia środka rampy. Na rysunku zaznaczone są te dane zieloną linią.
Rysunek 2: Parkowanie ciężarówki Inną możliwość stanowi określenie danych wejściowych jako odległość od dwóch wybranych brzegów układu. Na rysunku są to wartości y i d zaznaczone pomarańczową linią. Weźmy jednak jako wartości wejściowe dane x i µ. Dajmy na to, że x jest liczony w centymetrach, zaś µ w radianach. Pierwszą rzeczą, jaką należy zrobić, jest wybór funkcji, które będą nam określały zmienne lingwistyczne. Rysunek 3: Zmienna µ 2
Można zdefiniować dla µ przykładowy zestaw zmiennych lingwistycznych: jeśli koła są skręcone w lewo (zmienna LEWO ), to będzie za to odpowiadała funkcja z, jeśli są w miarę prosto (zmienna PROSTO ), to odpowiada za to funkcja Λ, a jeśli w prawo (zmienna PRAWO ), to będzie to funkcja Γ. Oczywiście taka sytuacja jest czysto hipotetyczna - w końcu nie ma powodu, by skręt w lewo zdefiniowany był inną funkcją niż skręt w prawo. W naszym przypadku należałoby zachować symetrię układu. Zmieńmy zatem funkcje na z, Λ i s, Rysunek 4: Zmienna µ Podobnie trzeba uczynić z odległością x od osi układu. Tutaj jest pięć zmiennych lingwistycznych: MOCNO LEWO, LEWO, ŚRODEK, PRAWO, MOCNO PRA- WO, czyli umiejscowienie ciężarówki jest odpowiednio mocno po którejś ze stron parkingu. Zauważmy, że jeśli ciężarówka będzie bardzo blisko rampy, to taki manewr nie będzie możliwy, dlatego należy sobie założyć jakąś określoną wartość y, która ten manewr umożliwia. Jeśli zaś ktoś wybierze zestaw danych wejściowych x i y, albo d i y, to ten problem przerzucony jest na symulację. Mając już funkcje rozmyte dla danych wejściowych możemy je wprowadzić. Przypuśćmy, że wejściową daną dla kąta ustawienia ciężarówki jest 0.33 radiana, a dla położenia względem osi 54 metry. Podstawiając do wybranych funkcji rozmytych, otrzymujemy wartości: dla kąta LEWO PROSTO PRAWO 0.77 0.34 0 dla przesunięcia MOCNO LEWO LEWO SRODEK PRAWO MOCNO PRAWO 0.5 0.5 0 0 0 3
Rysunek 5: Zmienna x Przyjmujemy, że dla wynikowego kąta skrętu będziemy mieli trzy zmienne lingwistyczne: LEWOSKRĘT, BEZ SKRĘTU, PRAWOSKRĘT. Wnioskowanie Budujemy tablicą wnioskowania. Podstawą takiej tablicy może być własna intuicja, doświadczenie, ale także mogą to być sieci neuronowe, czy siatki stochastyczne. Stąd wiemy, np. że jeśli samochód jest po lewej stronie i jest pod kątem w lewo, to trzeba mocno skręcić w prawo, żeby po kroku tył samochodu znalazł się bliżej rampy. Te wyrażenia zapisujemy w tabeli. MOCNO LEWO LEWO SRODEK PRAWO MOCNO PRAWO LEWO PS BS LS LS LS SRODEK PS PS BS LS LS PRAWO PS PS PS BS LS Wyliczamy wartości tej tabeli na podstawie danych wejściowych stosując t-normę Zadeha, czyli minimum po wartościach: MOCNO LEWO LEWO SRODEK PRAWO MOCNO PRAWO LEWO 0,5 0,5 0 0 0 SRODEK 0,34 0,34 0 0 0 PRAWO 0 0 0 0 0 Teraz grupujemy wartości odpowiadające poszczególnym zmiennym lingwistycznym danych wejściowych za pomocą s-normy Zadeha, czyli maksimum po wartościach. Jest to stopień aktywacji zbioru: LEWOSKRĘT BEZ SKRĘTU PRAWOSKRĘT 0 0.5 0.5 Otrzymujemy zatem funkcję wyjściową, na podstawie której będziemy liczyć konkretną wartość skrętu η. 4
Wyostrzanie (defuzyfikacja) metoda pierwszego maksimum metoda środkowego maksimum metoda ostatniego maksimum Rysunek 6: Zmienna η Mamy do wyboru szereg metod wyostrzania: metoda środka ciężkości. Tak koncepcyjnie należy sprawdzić, w która wartość dzieli pole pod wykresem na połowy: y µ wyn (y)dy y = µ wyn (y)dy gdzie y to ostra wartość na wyjściu regulatora, µ wyn to składana wynikowa funkcja przynależności, a y to zmienna wyjściowa. Całkowanie jest w granicach, w których funkcja przyjmuje wartości dodatnie. metoda singletonów m y i µ akt y i=1 = m µ akt i=1 gdzie y to ostra wartość na wyjściu regulatora, µ akt to stopień aktywacji i-tego singletonu przez daną regułę, y i to wartość zmiennej wyjściowej dla i-tego singletonu, a m to liczba reguł. 5
Jeśli wybraliśmy sobie np. metodę środkowego maksimum, to otrzymamy wartość ok. 0.165 radiana. Rysunek 7: Ostra wartość zmiennej η Symulacja Aby zasymulować parkowanie w tak stworzonym sterowniku, należy dla otrzymanego skrętu kół wyznaczyć następne dane wejściowe, które otrzymamy po jednym kroku symulatora. Krok taki, to może być np. przejechanie ciężarówki z tak skręconymi kołami przez np. 5 metrów. W zależności od tabeli wnioskowania, możemy otrzymać różne tory jazdy. Poniżej przedstawiony jest przykładowy tor. Aby określić nowe położenie ciężarówki i obliczyć wartości kolejnych wejściowych danych, należy zastosować wzory na tor jazdy po okręgu dla przednich kół ciężarówki. Aby to zrobić, musimy określić po kole o jakim promieniu poruszają się te koła, a następnie zastosować wzory: x i = x i 1 + R sin(η) y i = y i 1 + R cos(η) gdzie R to żądana długość przebywanej trasy, np. 5m, a η to kąt, pod jakim są skręcone koła. Uwagi do programu Program powinien umożliwiać: wprowadzenie danych wejściowych (wpisując je, umieszczając obiekt, który ma się poruszać w odpowiednim miejscu - ma to być czysto intuicyjne) ustawienie t- i s-norm, na podstawie których będzie wyliczana wartość wnioskowana oraz określenie funkcji wyostrzania, która będzie stosowana. 6
Rysunek 8: Parkowanie ciężarówki podgląd etapu rozmywania - dla danych wejściowych wykresy funkcji rozmytych, zaznaczona wartość wejściowa i określenie wartości podanych funkcji dla tej danej wejściowej. podgląd etapu wnioskowania - tabela bazy wiedzy podgląd etapu wyostrzania - tabela wartości funkcji rozmytych dla wywnioskowanej wartości wejściowej, wykres funkcji opartej na tych wartościach zwizualizowanie (wystarczy wyrysowywanie kolejnych kroków) oraz przyciski: Animuj, Stop, Krok, lub im odpowiadające, które mają za zadanie odpowiednio: włączyć automatyczną symulację, która się odbywa, np. co sekundę; zatrzymać symulację; przejść przy zatrzymanej symulacji o jeden krok do przodu. Nie trzeba pamiętać historii kroków i umożliwiać przechodzenie do nich w dowolnym momencie - wystarczy umożliwienie prześledzenia na bieżąco całego mechanizmu krok po kroku. Propozycje Szereg propozycji sterowników: 1. stadion (pozostały czas, ilość wykonanej pracy, a liczba pracowników) 2. drzewo (nasłonecznienie, temperatura, a liczba liści) 3. mecz (wynik (np. losowe zmiany) - zaangażowanie, czas do końca, zmęczenie, a tempo gry) 4. maraton (czas straty, zmęczenie, odległość do mety, a prędkość biegu) 5. student (zmęczenie, czas do egzaminu, a prędkość przyswajania wiedzy) 7
6. dokarmiacz rybek (liczba rybek (mogą się zjadać lub rozmnażać - wypadek losowy), wielkość rybek, a ilość pokarmu) 7. owca (tempo wzrostu - wysokość trawy, głód, a prędkość pasienia się) 8. drwal (zapotrzebowanie na drewno, miesiąc, zmęczenie, a prędkość wyrębu) 9. giełda (zaufanie do giełdy, liczba grających, a wskaźnik giełdowy) 10. listonosz (liczba paczek, zmęczenie, a prędkość roznoszenia) 11. winda (in: ciężar, odległość; out: prędkość) 12. chłodzenie procesora (in: częstotliwość taktowania, temp. cieczy chłodzącej; out: szybkość przepływu cieczy) 13. tempomat (in: ukształtowanie terenu, prędkość; out: otwarcie przepustnicy) 14. basen(in: temperatura wody, temperatura powietrza, liczba użytkowników; out: moc grzałek) 15. wyprzedzanie samochodem (in: odległość od samochodu wyprzedzanego, odległość od samochodu na przeciwległym pasie; out: prędkość 16. sterowanie światłami na skrzyżowaniu (in: liczba czekających samochodów w kierunku A i B, czas oczekiwania; out: czas działania świateł 17. sterowanie lotu balonem (in: temperatura zewnętrzna, wysokość; out: moc ogrzewania) lub (in: temperatura zewnętrzna, wysokość; out: wypuszczanie gazu, wyrzucanie balastu) 18. sterowanie opadaniem łodzi podwodnej (in: odległość, prędkość opadania, wyjście: stopień napełnienia balastów) 19. lot samolotu nad wzgórzami (in: odległość od przeszkody, wysokość przeszkody, prędkość lotu; out: ułożenie steru) 20. sterowanie karabinkiem (in: odległość, kierunek wiatru; out: kierunek strzału) inne: basen-temperatura kredyty morale drużyny zysk na produkcie automatyczny rowerzysta (wejście: poziom terenu, prędkość, wyjście: siła nacisku na pedały) ogrzewanie pokoju 8
klimatyzacja z uwzględnieniem liczby osób skręcanie samolotu wznoszenie samolotu dawkowanie insuliny transport osób sterowanie piecem sterowanie filtrem-akwarium liczba policjantów względem liczby przestępców i intensywności ich działań omijanie przeszkód sterowanie rakieta do celu temperatura i wilgotność w pomieszczeniu 9