3
1
dydaktyka/chris/MIN_2017/Zajecia_9.md

102 lines
3.2 KiB
Markdown

# Wykorzystanie pakietu jFuzzyLogic do modelowania sterownika rozmytego c.d. {#wykorzystanie_pakietu_jfuzzylogic_do_modelowania_sterownika_rozmytego_c.d.}
## Zadanie - Aktywny tempomat {#zadanie___aktywny_tempomat}
Wykorzystując pakiet jFuzzyLogic zaprojektuj system rozmyty sterujący
samochodem. Celem jest **utrzymanie stałego dystansu** od śledzonego
samochodu.
Możesz wziąć pod uwagę np. dwie zmienne opisujące sytuacje: szybkość
samochodu i dystans do samochodu jadącego z przodu i sterować zmianą
prędkości: przyspieszaj, hamuj, utrzymuj prędkość.
- Szkielet aplikacji:
[FuzzyChase.zip](attachment:chris/MIN_2016/Zajecia_9/FuzzyChase.zip "wikilink")
- przygotować plik: tempomat.fcl
### Nazwy zmiennych lingwistycznych powinny być następujące: {#nazwy_zmiennych_lingwistycznych_powinny_być_następujące}
VAR_INPUT
distance : REAL;
speed : REAL;
END_VAR
VAR_OUTPUT
acceleration : REAL;
END_VAR
*Pod systemem Linux dla poprawy wydajności grafiki należy przekazać do
maszyny wirtualnej Java następujący parametr
**-Dsun.java2d.opengl=true***
Kompilacja w laboratoriach:
javac -cp jFuzzyLogic.jar [[FuzzyChase]].java
Uruchomienie Windows
java -cp jFuzzyLogic.jar;. [[FuzzyChase]]
Uruchomienie Linux
java -cp jFuzzyLogic.jar:. [[FuzzyChase]]
Pamiętaj by archiwum z biblioteką [JFuzzyLogic](JFuzzyLogic "wikilink")
[jFuzzyLogic.jar](attachment:chris/MIN_2013/Zajecia_8/jFuzzyLogic.jar "wikilink")
wgrać do katalogu z którego uruchamiasz program.
### Poniżej rozwiązanie proponowane przez Kazuo Tanaki. {#poniżej_rozwiązanie_proponowane_przez_kazuo_tanaki.}
Użyj go jako punkt wyjścia do konstrukcji sterownika.
- Czy spełnia on swoją rolę?
- Poeksperymentuj z definicjami poszczególnych zmiennych
lingwistycznych.
- Jak wprowadzane zmiany wpływają na zachowanie samochodów?
- Jak powinny być one ustawione by sterownik działał optymalnie?
- Czy funkcje przynależności zmiennych powinny być symetryczne?
#### Dystans, szybkość i zmiana - zmienne lingwistyczne {#dystans_szybkość_i_zmiana___zmienne_lingwistyczne}
- **dystans**
`{{attachment:chris/MIN_2013/Zajecia_9/dystans.jpg}}`{=mediawiki}
- **szybkość**
`{{attachment:chris/MIN_2013/Zajecia_9/szybkosc.jpg}}`{=mediawiki}
- **zmiana szybkości**
`{{attachment:chris/MIN_2013/Zajecia_9/przyspieszenie.jpg}}`{=mediawiki}
#### Zbiór reguł {#zbiór_reguł}
- R1: IF dystans jest krótki AND szybkość jest mała THEN utrzymuj
szybkość
- R2: IF dystans jest krótki AND szybkość jest duża THEN redukuj
szybkość
- R3: IF dystans jest długi AND szybkość jest mała THEN zwiększaj
szybkość
- R4: IF dystans jest długi AND szybkość jest duża THEN utrzymuj
szybkość
`{{attachment:chris/MIN_2013/Zajecia_9/reguly.jpg}}`{=mediawiki}
#### Ilustracja działania sterownika: {#ilustracja_działania_sterownika}
`{{attachment:chris/MIN_2013/Zajecia_9/sterownik1.jpg}}`{=mediawiki}
## Zadanie 1 {#zadanie_1}
Oblicz stan sterownika dla parametrów wejściowych:
- prędkość 45 km/h
- dystans 25 m
## Zadanie 2 {#zadanie_2}
Zaimplementuj sterownik w pliku tempomat.fcl, uruchom, przetestuj i
dobierz optymalne jego parametry