• Nie Znaleziono Wyników

Sterownik rozmyty

N/A
N/A
Protected

Academic year: 2021

Share "Sterownik rozmyty"

Copied!
6
0
0

Pełen tekst

(1)

Sterownik rozmyty

Systemy Sztucznej Inteligencji Instrukcje do ćwiczeń laboratoryjnych

Zadanie do wykonania (zadanie opcjonalne)

Zadaniem systemu jest sterowanie ruchu wirtualną ciężarówką, która musi dojechać do środkowej części górnej krawędzi pola zwrócona ku górze. Pojazd ten porusza się stale do przodu z niezmienną prędkością wykonując jednocześnie ewentualnie niewielki obrót (skręt). System sztucznej inteligencji ma za zadanie na bazie aktualnego, podanego położenia i zwrotu ciężarówki określić w jaką stronę ma się obrócić jadąc stale do przodu. Dla uproszczenia sterownik nie bierze w tym przypadku pod uwagę poprzedniego stanu ciężarówki, lecz skupia się jedynie na aktualnym stanie pojazdu.

Parametry symulacji

Stałe dotyczące zadania zawarte są w strukturze SymulacjaParametry:

public struct SymulacjaParametry {

public static readonly int x_min = -100, x_max = 100, x_zasieg = 200;

public static readonly int y_min = -100, y_max = 0, y_zasieg = 100;

public static readonly int int rampa_lewy = -30, rampa_prawy = +30, rampa_dol = -10, rampa_gora = 0;

public static readonly int rampa_kat_docelowy_min = -20, rampa_kat_docelowy_max = +20;

public static readonly int obrot_min = -20, obrot_max = +20;

public static readonly int kat_min = -180, kat_max = +180, kat_zasieg = 360;

public static readonly double ruch_skok = 5.0;

}

(2)

Wejście

Decyzja na temat ruchu i ewentualnego obrotu dokonywana jest na podstawie aktualnego stanu pojazdu opisanego za pomocą struktury PojazdPolozenie.

public struct PojazdPolozenie {

public int x, y;

public int kat; //-180...+180 stopni

// 0= oznacza zwrot do góry, 90=zwrot w prawo }

Wyjście

Zaimplementowany system ma dla każdego stanu (wejścia) opisanego przez strukturę

PojazdPolozenie zwrócić jedną wartość - obrót (wyjście). Zakres tej zmiennej powinien się mieścić w przedziale [SymulacjaParametry.obrot_min; SymulacjaParametry.obrot_max].

Szczegóły implementacji

Należy użyć projektu SterownikRozmyty_Szablon_projektu. Cały kod odpowiedzialny za sterownik powinien znajdować się w pojedynczym pliku SI.cs. Należy zaimplementować metody SI.inicjuj() oraz SI.zwroc_odpowiedz(…),

• public static void inicjuj() - metoda uruchamiana tylko raz podczas startu programu;

• public static void zwroc_odpowiedz(PojazdPolozenie polozenie, out int obrot) - metoda ma zaimplementować wskazany algorytm sterowania. polozenie - struktura typu

PojazdPolozenie opisuje aktualne położenie ciężarówki. obrot - wartość wyjściowa algorytmu, która powinna zawierać się w przedziale [SymulacjaParametry.obrot_min;

.obrot_max]. Wartość dodatnia oznacza obrót zgodnie z ruchem wskazówek zegara.

Sterownik (Model) rozmyty Takagi-Sugeno

System ten zbudowany jest na bazie reguł, które są w postaci

JEŚLI (wejście_1 jest …) {ORAZ (wejście_2 jest …) ORAZ ...} TO wyjście_1 = … ; {wyjście_2

= …; wyjście_3 = …; ...}

JEŚLI (wejście_1 jest …) {ORAZ (wejście_2 jest …) ORAZ ...} TO wyjście_1 = … ; {wyjście_2

= …; wyjście_3 = …; ...}

Część pomiędzy słowem JEŚLI i TO nazwana jest poprzednikiem reguły i jest to część warunkowa reguły. Może ona składać się z co najmniej jednej części składowej rozdzielonej łącznikiem ORAZ.

Kolejna część reguły występuje po słowie TO i nazywana jest następnikiem. Zawiera on wartości jakie powinny zawierać wyjścia, jeśli spełnione będą warunki zawarte w poprzedniku reguły.

Przykład zbioru reguł mających na celu ustawienie się pojazdu w prawą stronę:

JEŚLI (kat jest bardzo_mocno_w_lewo) TO obrot = obrot_max,

(3)

JEŚLI (kat jest około_w_lewo) TO obrot = obrot_max, JEŚLI (kat jest około_zero) TO obrot = obrot_max, JEŚLI (kat jest około_w_prawo) TO obrot = 0,

JEŚLI (kat jest bardzo_mocno_w_prawo) TO obrot = obrot_min.

Zbiory rozmyte

Warto zwrócić uwagę, iż użyte symbole w poprzedniku: bardzo_mocno_w_lewo, około_w_lewo itp.

są nieprecyzyjne. Do ich reprezentacji zostaną użyte zbiory rozmyte. Zbiór rozmyty (na przykład A) opisany jest na dowolnej przestrzeni i dla każdego elementu z tej przestrzeni określa stopień przynależności (wartość z przedziału [0; 1]) elementu z tej przestrzeni. Wartość funkcja przynależności elementu x do zbioru rozmytego to μA(x) . Oto wartości funkcji przynależności kilku zbiorów rozmytych:

Zwykle jednak kształt funkcji przynależności zbiorów rozmytych jest bardziej jednolity i uporządkowany. Często stosuje się funkcje Gaussa w postaci μA(x)=e(−(

x−srodek sigma )

2

) , na przykład:

Działanie sterownika

Pierwszą czynności jaką należy wykonać jest wyliczenie stopnia aktywności każdej reguły.

Aby wyliczyć aktywność pojedynczej reguły posiadającej jedną części w poprzedniku, należy jedynie wyliczyć wartość funkcji przynależności odpowiedniego zbioru. W przypadku, gdy poprzednik reguły składa się z kilku części należy wyliczyć wartości funkcji przystosowania dla

(4)

poszczególnych części, a aktywacja całej reguły to wartość T-normy z poszczególnych części (zwykle iloczyn albo minimum).

Po wyliczeniu aktywacji każdej z reguł można wyliczyć wartość wyjściową, która jest równa sumie ważonej:

wyjscie1=aktywacjaReguly1∗wyjscie1Reguly1+aktywacjaReguly2∗wyjscie1Reguly2+...

aktywacjaReguly1+aktywacjaReguly2+...

wyjscie2=aktywacjaReguly1∗wyjscie2Reguly1+aktywacjaReguly2∗wyjscie2Reguly2+...

aktywacjaReguly1+aktywacjaReguly2+...

... , w zadanym przykładzie liczba wyjść to 1.

Przykład

Istnieje system, który określa czy pogoda jest dobra do wyjścia na zewnątrz. System tej operuje na (posiada wejścia) temperatura oraz określenie opadu deszczu (w skali [0; 100]). Zadaniem systemu jest zwrot liczby pogoda określającej zadowolenie z pogody w skali [0; 10].

Powstały reguły, które są w postaci

JEŚLI (temperatura jest bardzoNiska) TO pogoda=0;

JEŚLI (temperatura jest niska) ORAZ (opad jest niski) TO pogoda = 3;

JEŚLI (temperatura jest niska) ORAZ (opad jest wysoki) TO pogoda = 0;

JEŚLI (temperatura jest średnia) ORAZ (opad jest niski) TO pogoda = 10;

JEŚLI (temperatura jest średnia) ORAZ (opad jest wysoki) TO pogoda = 1;

JEŚLI (temperatura jest wysoka) TO pogoda = 0;

Warto zwrócić uwagę, że ze zmienną temperatura skojarzone są pojęcia bardzoNiska, niska, średnia, wysoka; natomiast ze zmienną opad pojęcia niski i wysoki. Należy więc skonstruować odpowiednie zbiory rozmyte, na przykład:

(5)

Następnie można przejść do testowania systemu.

Załóżmy, iż wejścia systemu to temperatura =19, opad = 20, a do łączenia składników

poprzedników użyta zostanie T-norma iloczyn. W takim przypadku aktywacje poszczególnych reguł to:

reguła 1. „JEŚLI (temperatura jest bardzoNiska) TO pogoda=0” -

μAtemperatura ,bardzoNiska(temperatura)=0 więc aktywacjaReguly1=0 ;

reguła 2. „JEŚLI (temperatura jest niska) ORAZ (opad jest niski) TO pogoda = 3” ,

μAtemperatura ,niska(temperatura)=0,1 ; μAopad,niski(opad)=0,8 więc

aktywacjaReguly2=0,1∗0,8=0,08 ;

reguła 3. „JEŚLI (temperatura jest niska) ORAZ (opad jest wysoki) TO pogoda = 0” - μA

temperatura ,niska(temperatura)=0,1 ; μA

opad,wysoki(opad)=0,2 więc

aktywacjaReguly3=0,1∗0,2=0,02 ;

reguła 4. „JEŚLI (temperatura jest średnia) ORAZ (opad jest niski) TO pogoda = 10” -

μAtemperatura ,srednia(temperatura)=0,4 ; μAopad,niski(opad)=0,8 więc

aktywacjaReguly4=0,4∗0,8=0,32 ;

reguła 5. „JEŚLI (temperatura jest średnia) ORAZ (opad jest wysoki) TO pogoda = 1” - μA

temperatura ,srednia(temperatura)=0,4 ; μAopad,wysoki(opad)=0,2 więc

aktywacjaReguly5=0,4∗0,2=0,08 ;

reguła 6. „JEŚLI (temperatura jest wysoka) TO pogoda = 0” - μA

temperatura ,wysokoa(temperatura)=0 więc aktywacjaReguly6=0 .

Po wyliczeniu aktywacji reguł można wyliczyć wartość wyjścia pogoda stosując sumę ważoną.

Warto przypomnieć, że wartości wyjścia kolejnych reguł to: 0, 3, 0, 10, 1, 0.

pogoda=aktywacjaReguly1∗wyjscieReguly1+aktywacjaReguly2∗wyjscieReguly2+...

aktywacjaReguly1+aktywacjaReguly2+...

pogoda=0∗0+0,08∗3+0,02∗0+0,32∗10+0,08∗1+0∗0 0+0,08+0,02+0,32+0,08+0 =7,04

Podsumowując, dla zadanych reguł wartość określająca przydatność pogody wyniosła 7,04.

Uwagi końcowe

Projekt można zaimplementować stosując różną liczbę reguł oraz zbiorów rozmytych. Dokładne kształty funkcji przynależności zbiorów rozmytych należy dobrać metodą eksperymentalną. Jeśli kiedykolwiek suma aktywacji wszystkich reguł wynosi 0, oznacza to, iż sterownik rozmyty został nieprawidłowo skonstruowany. Przewiduje się 3 poziomy skomplikowania:

1. Algorytm wstępnie przekształca zmienne x, y, kąt, w jedną zmienną nalezyObrocic, która określa o jaki kąt wyrażony w stopniach należy obrócić pojazd, aby był on skierowany w środek górnej części parkingu (w stronę rampy; punktu [0;0] ). Należy wymusić, aby zmienna nalezyObrocic zawierała się w przedziale [-180; 180]. Po przekształceniu zmienna nalezyObrocic jest traktowana jako jedyne wejście sterownika Takagi-Sugeno.

2. Sterownik rozmyty bierze pod uwagę jedynie x oraz kąt. Ta wersja została użyta w działającym przykładzie.

(6)

3. Sterownik rozmyty bierze pod uwagę x, y, kąt.

Cytaty

Powiązane dokumenty

Sposób urabiania skał zwłaszcza kombajnem chodnikowym ze zmienną prędkości obrotową głowic urabiających regulowaną za pomocą automatycznego układu sterowania, w którym

jako droga przenikania Agrofag może przedostać się z fragmentami roślin, sadzonek oraz z ziemią.. Czy droga przenikania jest zamknięta na

Może być także uprawiane jako bonsai..

Krótki opis, dlaczego jest rozważana W częściach zielonych roślin stanowiących odpady (liście,.. jako droga przenikania ogonki, pędy, pąki, kwiatostany) mogą znajdować się

Rozwiązanie Programistyczne Kryterium 1 (Cena zakupu) Kryterium 2 ( Cena ładowania) Kryterium 3 (Skończoność).. 2 Program

Największe straty mogą wystąpić w przypadku przedostania się patogenu do naturalnych rejonów występowania drzew z rodzaju Abies, często starych drzewostanów. Spore straty

Pozwalałoby to na płynne i natychmiastowe dostosowanie parametrów sprzęgła do zmieniających się warunków pracy napędu i pozwalało na bardzo skuteczne

Sprawca choroby przeżywa w martwych częściach roślin, dlatego też należy dokładnie je usuwać. Jednocześnie należy zwalczać trawy, które mogą być podłożem dla