Simulations- u. Regelungstechnik im Wintersemester 2025/26
(EN google-translate)
(PL google-translate)
|
|
SRT am Dienstag den 16.11.2025 -- TEIL 1: FUZZY LOGIK, FUZZY SYSTEME, FUZZY REGLER
Themen
|
1. Überblick
In der Lehrveranstaltung Simulations- und Regelungstechnik 2 werden Themen aus der ersten Vorlesung, wie der Zustandsregler, weiter vertieft und Sonderthemen, wie beispielsweise Fuzzy-Regler, neu eingeführt. Auch erhält das Thema Optimierung ein größeres Gewicht.
2. Fuzzy-Logik
62_Regelungssysteme/18_Fuzzy -- Theorie
62_Regelungssysteme/18_Fuzzy/03_Uebung9 -- Beispiel 1
02_WS2021_22/05_REGmecha5/01_day_by_day -- Beispiel 2
72_COACH2/12_Fuzzy/01_Uebungsaufgabe -- Übung
80_Robuste_Systemintegration/10_EvoFuzzy -- Preview: Aufbau von Fuzzy-Reglern und deren Optimierung über Evolutionäre Algorithmen
3. Fuzzy-Regler
Bild 0-1: Beispiel für einem Fuzzy-Regler.
Übung: Ersetze den Zustandsregler unten durch einen Fuzzy-Regler
Bild 0-2: Umzusetzender Fuzzy-Regler (gleiche Geometrie wie oben, aber andere Regeln und erweitertes Ausgangsfuzzyset)
clear;
function F = fregler(x,v)
F = -x-v;
endfunction
function f = rechteSeite(t,y)
x = y(1,1);
v = y(2,1);
F = fregler(x,v);
f(1,1) = v;
f(2,1) = -x + F;
endfunction
t = 0:0.01:10;
y0 = [2,0]';
t0 = 0;
y = ode(y0,t0,t,rechteSeite);
plot(t,y(1,:)',t,y(2,:)');
Code 0-1: Rahmensystem, in dem der Zustandsregler durch die Implementierung eines Fuzzy-Reglers ersetzt werden soll.
clear;
function nzp = fuzzysetX(x)
endfunction
function nzp = fuzzysetV(v)
endfunction
function F = fregler(x,v)
// 1. Fuzzifizieren der Eingangsgrößen x und v, heißt: zu jeder Fuzzygröße
// jedes der beiden Eingangsfuzzysets wird der Erfülltheitsgrad berechnet.
nzp_x = fuzzysetX(x);
nzp_v = fuzzysetX(v);
// 2. Erfülltheitsgrade jeder Regel berechnen
erfuelltheit = zeros(9);
erfuelltheit(1) = min(nzp_x(1),nzp_v(1));
//...
// 3. Defuzzifizierung der Ausgangsgröße (Kraft F), heißt Schwerpunktberechnung.
endfunction
function f = rechteSeite(t,y)
x = y(1,1);
v = y(2,1);
F = fregler(x,v);
f(1,1) = v;
f(2,1) = -x + F;
endfunction
t = 0:0.01:10;
y0 = [2,0]';
t0 = 0;
y = ode(y0,t0,t,rechteSeite);
plot(t,y(1,:)',t,y(2,:)');
Code 0-2: Noch unfertige Umsetzung, jedoch mit kompletter Programmstruktur.
clear;
function A=flaecheTrapez(h)
q = 2.0;
p = 2.0*(1.0-h);
A = h*(p+q)/2.0;
end
function nzp = fuzzysetX(x)
nzp = zeros(3);
if x<-1 then
nzp(1)=1.0;
nzp(2)=0.0;
nzp(3)=0.0;
elseif x<0 then
nzp(1)=-x;
nzp(2)=1-nzp(1);
nzp(3)=0.0;
elseif x<1 then
nzp(3)=x;
nzp(2)=1-nzp(3);
nzp(1)=0;
else
nzp(1)=0.0;
nzp(2)=0.0;
nzp(3)=1.0;
end
endfunction
function nzp = fuzzysetV(v)
nzp = zeros(3);
if v<-1 then
nzp(1)=1.0;
nzp(2)=0.0;
nzp(3)=0.0;
elseif v<0 then
nzp(1)=-v;
nzp(2)=1-nzp(1);
nzp(3)=0.0;
elseif v<1 then
nzp(1)=0.0;
nzp(3)=v;
nzp(2)=1-nzp(3);
else
nzp(1)=0.0;
nzp(2)=0.0;
nzp(3)=1.0;
end
endfunction
function erg=mini(x,y)
if x<y then
erg=x;
else
erg=y;
end
end
function F = fregler(x,v)
// 1. Fuzzifizieren der Eingangsgrößen x und v, heißt: zu jeder Fuzzygröße
// jedes der beiden Eingangsfuzzysets wird der Erfülltheitsgrad berechnet.
nzp_x = fuzzysetX(x);
nzp_v = fuzzysetV(v);
// 2. Erfülltheitsgrade jeder Regel berechnen
ef = zeros(9); //erfuelltheit
ef(1) = mini(nzp_x(1),nzp_v(1)); //Regel 1
ef(2) = mini(nzp_x(2),nzp_v(1)); //Regel 2
ef(3) = mini(nzp_x(3),nzp_v(1)); //...
ef(4) = mini(nzp_x(1),nzp_v(2));
ef(5) = mini(nzp_x(2),nzp_v(2));
ef(6) = mini(nzp_x(3),nzp_v(2));
ef(7) = mini(nzp_x(1),nzp_v(3));
ef(8) = mini(nzp_x(2),nzp_v(3));
ef(9) = mini(nzp_x(3),nzp_v(3));
//...
//F = F/Ages;
// 3. Defuzzifizierung der Ausgangsgröße (Kraft F), heißt Schwerpunktberechnung.
F=0.0;
Ages=0.0;
sp=[2,1,0,1,0,-1,0,-1,-2];
//Regel 1..9:
for i=1:9
A=flaecheTrapez(ef(i));
s=sp(i);
Ages=Ages+A;
F=F+s*A;
end
F=F/Ages;
endfunction
function f = rechteSeite(t,y)
x = y(1,1);
v = y(2,1);
F = fregler(x,v);
f(1,1) = v;
f(2,1) = -x + F;
endfunction
t = 0:0.01:10;
y0 = [2,0]';
t0 = 0;
y = ode(y0,t0,t,rechteSeite);
plot(t,y(1,:)',t,y(2,:)');
Code 0-3: Komplettes System.
4. Übungen
Aufgabe 1
Am Eingang eines Fuzzy-Systems liegen folgende Werte an: x=2, y=-1
Bild 0-3: Fuzzy-System.
Die Fuzzy-Regeln lauten:
r1: WENN xgross UND ygross DANN Fklein r2: WENN xgross UND yklein DANN Fklein r3: WENN xklein UND ygross DANN Fgross r4: WENN xklein UND yklein DANN Fgross
Code 0-4: Fuzzy-Regeln
Geben Sie den Erfülltheitsgrad zu jeder Regel an.
r1=... r2=... r3=... r4=...
Code 0-5: Erfülltheitsgrad zu jeder Regel.
Aufgabe 2
Bild 0-4: Fuzzy-System.
|
SRT am Dienstag den 16.11.2025 -- TEIL 2: OBJEKTORIENTIERTE PROGRAMMIERUNG
|
Studentische Lösung
clear;
mode(0);
clc;
A=3.5;
B=2.5;
function a = SystemA(A)
if A<=2 then
a(1)=1;
a(2)=0;
a(3)=0;
end
if A>2 && A<=3 then
a(1)=-A+3;
a(2)=A-2;
a(3)=0;
end
if A>3 && A<=4 then
a(1)=0;
a(2)=-A+4;
a(3)=A-3;
end
if A>4 then
a(1)=0;
a(2)=0;
a(3)=1;
end
endfunction
function b = SystemB(B)
if B<=2 then
b(1)=1;
b(2)=0;
b(3)=0;
end
if B>2 && B<=3 then
b(1)=-B+3;
b(2)=B-2;
b(3)=0;
end
if B>3 && B<=4 then
b(1)=0;
b(2)=-B+4;
b(3)=B-3;
end
if B>4 then
b(1)=0;
b(2)=0;
b(3)=1;
end
endfunction
function A=flaecheTrapez(h)
q = 2.0;
p = 2.0*(1.0-h);
A = h*(p+q)/2.0;
end
function C = berechneC (A,B)
a=SystemA(A);
b=SystemB(B);
Reg1=min(a(1),b(3));
Reg2=min(a(2),b(2));
A1=flaecheTrapez(Reg1);
A2=flaecheTrapez(Reg2);
s1=4;
s2=5;
C=(s1*A1+s2*A2)/(A1+A2);
pause;
endfunction
C=berechneC(A,B);
Code 0-6: Studentische Lösung zu Aufgabe 2.
1. Einführung in Java-Processing
78_Processing
SRT001.zip -- Lösung zu Aufgabe 2 oben mit Java-Procressing.
public class Vektor
{
double x,y;
public double berechneLaenge()
{
return Math.sqrt(x*x+y*y);
}
}
public void setup()
{
Vektor v1,v2;
v1 = new Vektor();
v2 = new Vektor();
v1.x = 3.0;
v1.y = 4.0;
v2.x = 1.0;
v2.y = 0.0;
println("Länge v1: "+v1.berechneLaenge());
println("Länge v2: "+v2.berechneLaenge());
}
public void draw()
{
}
Code 0-7: Konzept der Objektorientierung am Beispiel des mathematischen R2-Vektors
2. Einführung in die Objektorientierte Programmierung mit Java-Processing
Allgemein: 30_Informatik3/01_Vom_struct_zur_Klasse/06_Objektabstraktion
3. Vergleich: Objektorientierte Programmierung mit C/C++
C++: 30_Informatik3/01_Vom_struct_zur_Klasse/03_Klassen_Programm
4. Einführung in Android-Processing
93_Android_Proc
77_Android
5. Einrichtung eines Hotspots unter Linux und unter Android, oder mittels eines Routers
Vernetzung mehrerer Geräte: 92_Soundinstallation/03_material/11_Snippets/11_UDP
Hotspot Android Device
05_esp32AV/01_Bauanleitung/01_Elektronik_und_Software/03_Videostream
Hotspot Linux Computer
08_Archiv/06_Ing/01_Bauplan/04_Hotspot
W-LAN-Router
siehe ganz unten!: Einrichtung am Beispiel von tp-link-W-LAN-Routern: 05_esp32AV/01_Bauanleitung/03_FAQs
6. Programmierung von Anwendungen mit UDP
Internetprogrammierung -- 67_Echtzeitsysteme/09_Internetprogrammierung/04_Java