> Strona automatycznie zmigrowana z systemu Eduwiki z wykorzystaniem Pandoc # 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