kramann.info
© Guido Kramann

Login: Passwort:










kramann.info
© Guido Kramann

Login: Passwort:




DAY BY DAY zu SRT 5MT -- Simulations- u. Regelungstechnik 2 für 5-MT

(EN google-translate)

(PL google-translate)

Online-Unterricht ab 14.12.:

Die Online-Zeiten werden kurz gehalten und dort vorwiegend Aufgaben, bzw. Projektthemen ausgegeben und besprochen, die selbsttätig bearbeitet werden sollen. Der hierzu verwendete BBB-Link und ein Reservelink wurden Ihnen als E-Mail über Moodle zugesendet.

  • MB3 Regelungs- und Steuerungstechnik: Mittwoch 14.12., 21.12.,11.1., jeweils 10:00-11:00Uhr und länger nach Bedarf.
  • MT5 Simulations- und Regelungstechnik 2: Mittwoch 14.12., 21.12.,11.1., jeweils 11:30-12:30Uhr und länger nach Bedarf.
  • MMB Fehlertoleranter Softwareentwurf: Freitag 16.12.,23.12.,13.1., jeweils 10:00-11:00Uhr und länger nach Bedarf.
  • Masterkurs Künstlerische Forschung: Freitag 16.12.,23.12.,13.1., jeweils 11:30-12:30Uhr und länger nach Bedarf.

Mittwoch, 18.01.23 und Freitag 20.01.23 finden in Präsenz statt und dienen als E-Test-Prüfung, bzw. der Projektpräsentation.


Übersicht

  • Die vorliegende Seite stellt den Einstiegspunkt für diese Lehrveranstaltung dar und verzeichnet chronologisch die behandelten Inhalte.
  • Aber ein großer Teil der Inhalte findet sich nicht direkt hier, sondern die Seite hier verlinkt auf andere Bereiche von kramann.info.
  • Die Prüfung findet Semester begleitend in elektronischer Form statt (E-Test).

Beim Kurs Regelungstechnik 2 kommen zu den im ersten Kurs behandelten klassinschen Verfahren der Regelungstechnik Optimierungsverfahren (statisch / kleinste Quadrate Methode, dynamisch / modifiziertes Gradientenverfahren) hinzu, sowie Beispiele aus dem Bereich Softcomputing (Evolutionäre Algorithmen, Fuzzy-Regelung, mit Einschränkungen Neuronale Netze). Die im ersten Kurs behandelten Verfahren bilden eine Art Referenz im Hintergrund, gegen die die neuen Verfahren getestet und diskutiert werden. Deshalb sollen die alten Inhalte in den ersten Stunden auch erst einmal wieder wach gerufen werden.

Die Inhalte der vorangehenden Vorlesung können hier nachgeschlagen werden:

03_SoSe2022/02_SRT

Chronologisches Verzeichnis der im Verlauf des Semesters behandelten Themen


--- 2. Semesterhälfte ---

#1 Mi 23.11.2022

Rückmeldung zu den Praktika -- Wie hat sich die Sicht auf Beruf und Studium verändert


Wiederholung der Inhalte aus Regelungstechnik 1

  1. Scilab (ode, csim)
  2. Laplacetransformation
  3. Auslegungsmethoden nach Ziegler und Nichols
  4. Eigenwertberechnung
  5. Polvorgabe
  6. Zustandsregler

zu 1.: Scilab (ode, csim)

allgemein: 37_Scilab
ode (Beispiel): 54_Kinetik/01_Newton/04_ODE
csim (Beispiel): 62_Regelungssysteme/01_day_by_day

zu 2.: Laplacetransformation

Theorie: 62_Regelungssysteme/04_Laplace
Regeln: 62_Regelungssysteme/04_Laplace/03_PRegler

zu 3.: Auslegungsmethoden nach Ziegler und Nichols

62_Regelungssysteme/07_Einstellregeln
Methode 1: 62_Regelungssysteme/07_Einstellregeln/02_Methode1
Methode 2: 62_Regelungssysteme/07_Einstellregeln/03_Methode2

zu 4. Eigenwertberechnung

s. Tafel im Unterricht

zu 5. Polvorgabe

62_Regelungssysteme/08_Polvorgabe

zu 6. Zustandsregler

Theorie Zustandsregler mit Beobachter und Blockbezeichnungen A,B,C,D: 62_Regelungssysteme/09_Beobachter

Übungen zu Laplace als Wiederholung
Übung 1 -- Wandeln Sie jeweils um in den Zeit- bzw. Laplacebereich

1a)

$ \ddot x + 3 \dot x + x = 4 u $

Formel 0-1: Transformieren Sie die lineare Differentialgleichung in den Laplacebereich.


1b)

$ X s^3 + X s - 4 U s^2 = U $

Formel 0-2: Transformieren Sie in den Zeitbereich.


1c)

$ G\left(s\right) = \frac {s^2+1}{s^3+s} $

Formel 0-3: Transformieren Sie in den Zeitbereich. Eingang sei U & Ausgang sei X.


1d)

$ G\left(s\right) = \frac {s^2+1}{s^3+s} $

Formel 0-4: Transformieren Sie in den Zeitbereich. Eingang sei U & Ausgang sei X.


1e) Nachfolgend sind die Laplace-Transformierten einer Regelstrecke G(s) und eines Reglers R(s) dargestellt.

  • Bilden Sie das Gesamtübertragungsverhalten des offenen und des geschlossenen Regelkreises.
  • Transformieren Sie beide danach in den Zeitbereich.
  • Welcher Typ von Regler liegt hier vor?

$ G\left(s\right) = \frac {1}{s^2+5s} $

Formel 0-5: Regelstrecke


$ R\left(s\right) = \frac {1}{s} + 5 + s $

Formel 0-6: Regler



Übung 2 -- Umsetzung regelungstechnischer Systeme mit Scilab

Nehmen Sie sich erneut das System von 1e) vor.

2a)

  • Übertragen Sie R(s) und G(s) mit Hilfe von syslin() nach Scilab.
  • Ergänzten Sie Ihr Scilab-Skript so, dass aus R(s) und G(s) das Übertragungsverhalten H(s) des offenen und des geschlossenen Regelkreises Q(s) gebildet werden.

2b)

  • Vervollständigen Sie zwei Varianten des Scilab-Skripts aus 2a) so, dass ein
  • Einheitssprung auf den offenen und den geschlossenen Regelkreis simuliert wird.

2c)

Verdeutlichen Sie sich durch Zeichnen eines Blockschaltbildes:

  • Was ist jeweils Ein- bzw. Ausgang beim offenen und geschlossenen Regelkreis?


#2 Do 24.11.2022

Überblick zu Optimierung

62_Regelungssysteme/05_Regleroptimierung
62_Regelungssysteme/05_Regleroptimierung/01_Guetefunktion
62_Regelungssysteme/05_Regleroptimierung/02_Heuristiken
62_Regelungssysteme/05_Regleroptimierung/04_Gradientenverfahren

Statische Optimierung, Motivation, Anwendungsfälle

50_Simulationstechnik/05_Parameterindentifikation/01_KleinsteQuadrate

Einführung in die statische Optimierung

  1. Lineare Regression
  2. Kleinste Quadrate Methode

zu 1.: Lineare Regression

50_Simulationstechnik/05_Parameterindentifikation/01_KleinsteQuadrate/01_Linearregression

zu 2.: Kleinste Quadrate Methode

50_Simulationstechnik/05_Parameterindentifikation/01_KleinsteQuadrate/02_Beispiel
Erstes Beispiel von Hand gerechnet
Erstes Beispiel von Hand gerechnet.

Bild 0-1: Erstes Beispiel von Hand gerechnet.

// y = c0 + c1*x^2
//Messungen:
// x | y
// 1 | 3
// 2 | 6
// 3 | 10
B = [1,1;4,1;9,1];
d = [-3;-6;-10];

A = B'*B
b = B'*d

//  A*c + b = 0
//    c     = inverse(A)(-b)

c = inv(A)*(-b)

cc = lsq(B,-d)

Code 0-1: Auswertung mit Scilab

Übung zu LSQ
  • Der Zusammenhang zwischen Ausgangsspannung und gemessenem Abstand bei einem Entfernungssensor von Sharp soll durch eine quadratische Funktion angenähert werden.
  • Im ersten Versuch entsteht ein unpassender "Umkehrpunkt" bei der Auswertung mittels LSQ:
Quelle: https://wiki.hshl.de/wiki/index.php/SHARP_IR_Abstandssensor_GP2Y0A21YK0F
Originalkurve

Bild 0-2: Originalkurve

u = [0.5,0.75,0.9,1.3,2.3];
d = [0.6,0.4,0.3,0.2,0.1];

B = [ones(5,1),u',(u.*u)']

c=lsq(B,d')

uu = 0.3:0.01:2.5;
dd = c(1) + c(2)*uu + c(3)*(uu.*uu);

plot(u,d,'gre*',uu,dd,'blk')

a = gca();
a.x_label.text = 'u/Volt';
a.y_label.text = 'd/Meter';
a.title.text = 'Entfernungssensor Sharp';
hl=legend(['Messung';'lsq-Kurve'],a=1);

Code 0-2: Scilab-Sript zur Parameterbestimmung mittels der Methode der kleinsten Quadrate

Plot zu obigem Skript

Bild 0-3: Plot zu obigem Skript

Versuch das Problem durch Hinzufügen eines Messpunktes zu beheben

u = [0.5,0.75,0.9,1.3,1.5,2.0,2.3];
d = [0.6,0.4,0.3,0.2,0.17,0.12,0.1];

zs = size(u);

B = [ones(zs(2),1),u',(u.*u)']

c=lsq(B,d')

uu = 0.3:0.01:2.5;
dd = c(1) + c(2)*uu + c(3)*(uu.*uu);

plot(u,d,'gre*',uu,dd,'blk')

a = gca();
a.x_label.text = 'u/Volt';
a.y_label.text = 'd/Meter';
a.title.text = 'Entfernungssensor Sharp';
hl=legend(['Messung';'lsq-Kurve'],a=1);

Code 0-3: Zwei Messpunkte mehr

Ergebnis mit zwei zusätzlichen Messpunkten

Bild 0-4: Ergebnis mit zwei zusätzlichen Messpunkten


Auch dieses Ergebnis ist unbefriedigend! -- Abhilfe: Ansatz mit d = c0 + c1*u + c2/u:


u = [0.5,0.75,0.9,1.3,1.5,2.0,2.3];
d = [0.6,0.4,0.3,0.2,0.17,0.12,0.1];

zs = size(u);

// d = c0 + c1*x + c2/x

B = [ones(zs(2),1),u',(1./u)']

c=lsq(B,d')

uu = 0.3:0.01:2.5;
dd = c(1) + c(2)*uu + c(3)./uu;

plot(u,d,'gre*',uu,dd,'blk')

a = gca();
a.x_label.text = 'u/Volt';
a.y_label.text = 'd/Meter';
a.title.text = 'Entfernungssensor Sharp';
hl=legend(['Messung';'lsq-Kurve'],a=1);

Code 0-4: Ansatz mit d = c0 + c1*u + c2/u

Plot zu obigem Skript

Bild 0-5: Plot zu obigem Skript


Dieses Ergebnis ist überzeugender.


#3 Mi 30.11.2022


BBB testen, wegen anstehender Schließung der Hochschule


Thema: Optimierung mittles Gradientenverfahren

  1. Heuristiken
  2. Statische und dynmaische Optimierung mit dem Gradientenverfahren
  3. Modifiziertes Gradientenverfahren
1. Heuristiken
50_Simulationstechnik/06_Optimierung/02_Heuristiken
2. Statische und dynamische Optimierung mit dem Gradientenverfahren
50_Simulationstechnik/06_Optimierung/01_Gradientenverfahren
3. Modifiziertes Gradientenverfahren
function r = bestimmeR(xy)
     x = xy(1);
     y = xy(2);
    rr = [ 3*x*x-4, 3*y*y-16 ];
     r = -rr/sqrt(rr*rr');
endfunction

x=0;
y=0;
xy=[x,y];
alfa=0.01;

for i=1:1000
   xy = xy + alfa*bestimmeR(xy);
end

disp(xy);

disp('soll x:');
xsoll = 2/sqrt(3)
disp('soll y:');
ysoll = 4/sqrt(3)

Code 0-5: Anwendung des modifizierten Gradientenverfahrens auf z = x^3-4x+y^3-16y.

zufallszahl = 1+ floor(grand(1, 1, "unf", 0, 1.999999999));

Code 0-6: Hilfsmittel: Erzeugen einer gleichverteilten diskreten Zufallszahl mit grand, die entweder 1 oder 2 liefert.

Beispiele, siehe ab Code 0-4 hier: 50_Simulationstechnik/08_day_by_day
clear;

//Zustandsregler ergänzt

// max(|FA|) = 1N => Das wird die Begrenzung beim zu optimierenden Regler

// Implementierung eines modifizierten Gradientenverfahrens

R = [1,2];
FAmax = 1.0;
function f = rechteSeite(t,y)
    x=y(1);
    v=y(2);
    FA=-R(1)*x-R(2)*v; 
    if FA>FAmax then
        FA=FAmax;
    end
    if FA<-FAmax then
        FA=-FAmax;
    end
    A = [0,1;-1,0];
    B = [0;1];
    f = A*y + B*FA; 
endfunction

t = 0:0.01:30;
y0 = [1,0]';
t0 = 0;
y  = ode(y0,t0,t,rechteSeite);

FAverlauf = -R(1)*y(1,:)-R(2)*y(2,:);

plot(t,y(1,:)',t,y(2,:)',t,FAverlauf);

//Liefert gleichverteilt Integer mit den Werten 0,1,2,3,...,xmax-1
function zufall = nextInt(xmax)
 zufall = floor(grand(1, 1, "unf", 0, xmax-0.0000000001));
endfunction

function fehler = fehlerfunktion(RR)
    R=RR;
    yy = ode(y0,t0,t,rechteSeite);   
    fehler = sqrt(yy(1,:)*yy(1,:)');
endfunction

fehler = fehlerfunktion([1,2])
fehler = fehlerfunktion([0.5,1])
fehler = fehlerfunktion([2,4])

RRR = [0.2,0.2]; //Startwert für die Optimierung der Regelparameter r1 und r2
fehler_alt = fehlerfunktion(RRR)  //Fehler für aktuellen Parametersatz der Regelparmeter 
//(Fehler am Beginn der OIptimierung)
alfa=0.1;
for i=0:1000
  //1. Wähle zufällig einen Parameter, der verändert werden soll.
  zs = size(RRR);
  maxindex = zs(2);
  index = 1+nextInt(maxindex); //ist hier entweder 1 oder 2
  //2. Wähle zufällig, ob dieser Parameter verkleinert oder vergrößert werden soll
  faktor = -1+2*nextInt(2); //ist hier entwededer -1 oder +1
  //3. Bestimme den Fehler für den so veränderten Parametersatz
  RRRneu = RRR;
  RRRneu(index) = RRRneu(index) + alfa*faktor;
  fehler_neu = fehlerfunktion(RRRneu); 
  //4. Ist der neue Fehler kleiner oder gleich, als der alte, so behalte die Veränderung bei und merke den neuen Fehler "als alten".
       //alternativ: Ist der neue Fehler GRÖSSER als der alte, verwerfe die Veränderung und bleibe am alten Punkt im Parameterraum.
  //if fehler_neu<fehler_alt then
  //   disp(fehler_neu);
  //end
  if fehler_neu<=fehler_alt then
     RRR=RRRneu;
     fehler_alt = fehler_neu;
  end
end

R=RRR

t = 0:0.01:30;
y0 = [1,0]';
t0 = 0;
y  = ode(y0,t0,t,rechteSeite);
plot(t,y(1,:)','gre',t,y(2,:)','gre',t,FAverlauf,'gre');

disp('Fehler bei Polvorgabe:');
fehlerfunktion([1,2])
disp('Fehler nach Optimierung:');
fehlerfunktion(RRR)

Code 0-7: Implementierung eines modifizierten Gradientenverfahrens

Alfa steuern:

Im nachfolgenden Skript wird bei jeder erfolgreichen Veränderung in eine Parameterrichtung ein zugeordnetes Alfa vergrößert und im gegenteiligen Fall verkleinert:

clear;

//Zustandsregler ergänzt

// max(|FA|) = 1N => Das wird die Begrenzung beim zu optimierenden Regler

// Implementierung eines modifizierten Gradientenverfahrens

R = [1,2];
FAmax = 1.0;
function f = rechteSeite(t,y)
    x=y(1);
    v=y(2);
    FA=-R(1)*x-R(2)*v; 
    if FA>FAmax then
        FA=FAmax;
    end
    if FA<-FAmax then
        FA=-FAmax;
    end
    A = [0,1;-1,0];
    B = [0;1];
    f = A*y + B*FA; 
endfunction

t = 0:0.01:30;
y0 = [1,0]';
t0 = 0;
y  = ode(y0,t0,t,rechteSeite);

FAverlauf = -R(1)*y(1,:)-R(2)*y(2,:);

plot(t,y(1,:)',t,y(2,:)',t,FAverlauf);

//Liefert gleichverteilt Integer mit den Werten 0,1,2,3,...,xmax-1
function zufall = nextInt(xmax)
 zufall = floor(grand(1, 1, "unf", 0, xmax-0.0000000001));
endfunction

function fehler = fehlerfunktion(RR)
    R=RR;
    yy = ode(y0,t0,t,rechteSeite);   
    fehler = sqrt(yy(1,:)*yy(1,:)');
endfunction

fehler = fehlerfunktion([1,2])
fehler = fehlerfunktion([0.5,1])
fehler = fehlerfunktion([2,4])

RRR = [0.2,0.2]; //Startwert für die Optimierung der Regelparameter r1 und r2
fehler_alt = fehlerfunktion(RRR)  //Fehler für aktuellen Parametersatz der Regelparmeter 
//(Fehler am Beginn der OIptimierung)
//Für jeden Parameter und für jede Änderungsrichtung gibt es ein eigenes ALFA:
zs = size(R);
alfa=0.1*ones(2,zs(2));
for i=0:100
  //1. Wähle zufällig einen Parameter, der verändert werden soll.
  zs = size(RRR);
  maxindex = zs(2);
  index = 1+nextInt(maxindex); //ist hier entweder 1 oder 2
  //2. Wähle zufällig, ob dieser Parameter verkleinert oder vergrößert werden soll
  faktor = -1+2*nextInt(2); //ist hier entwededer -1 oder +1
  //3. Bestimme den Fehler für den so veränderten Parametersatz
  RRRneu = RRR;
  alfaakt = alfa(1,index);
  if faktor<0 then
     alfaakt = alfa(2,index);
  end
  RRRneu(index) = RRRneu(index) + alfaakt*faktor;
  fehler_neu = fehlerfunktion(RRRneu); 
  //4. Ist der neue Fehler kleiner oder gleich, als der alte, so behalte die Veränderung bei und merke den neuen Fehler "als alten".
       //alternativ: Ist der neue Fehler GRÖSSER als der alte, verwerfe die Veränderung und bleibe am alten Punkt im Parameterraum.
  //if fehler_neu<fehler_alt then
  //   disp(fehler_neu);
  //end
  if fehler_neu<=fehler_alt then
     RRR=RRRneu;
     fehler_alt = fehler_neu;
     if faktor>0 then
        alfa(1,index)=alfa(1,index)*1.1;
     else
        alfa(2,index)=alfa(2,index)*1.1;
     end
  else
     if faktor>0 then
        alfa(1,index)=alfa(1,index)*0.9;
     else
        alfa(2,index)=alfa(2,index)*0.9;
     end
  end
end

R=RRR

t = 0:0.01:30;
y0 = [1,0]';
t0 = 0;
y  = ode(y0,t0,t,rechteSeite);
plot(t,y(1,:)','gre',t,y(2,:)','gre',t,FAverlauf,'gre');

disp('Fehler bei Polvorgabe:');
fehlerfunktion([1,2])
disp('Fehler nach Optimierung:');
fehlerfunktion(RRR)

disp(alfa);

Code 0-8: Steuerung von alfa.

#4 Do 01.12.2022

Thema: Evolutionäre Optimierungsalgorithmen

73_COACH3/09_Algorithmen/03_Evoopt
50_Simulationstechnik/07_Genalgorithmus
30_Informatik3/16_Nuetzliches/03_RungeKutta
78_Processing/06_Snippets/15_Simulation

Entwicklung eines evolutionären Algorithmus' um ein Rorschachbild zu erzeugen:

Rorschach001.zip -- Zufallspixelbild erzeugen
Rorschach002.zip -- Fehlerfunktion implementieren
Rorschach003.zip -- Fehlerfunktion erweitern und benutzen
Beispielergebnis mit Rorschach003.

Bild 0-6: Beispielergebnis mit Rorschach003.

Rorschach004.zip -- Optimierung mit nur einem Gen.
Rorschach006_Evoopt.zip -- Fertige Implementierung des genetischen Algorithmus.

#5 Mi 07.12.2022

Einführung in Fuzzy-Logik und Fuzzy-Regelung

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
Beispiel für einem Fuzzy-Regler.

Bild 0-7: Beispiel für einem Fuzzy-Regler.

Übung: Ersetze den Zustandsregler unten durch einen Fuzzy-Regler
Umzusetzender Fuzzy-Regler (gleiche Geometrie wie oben, aber andere Regeln und erweitertes Ausgangsfuzzyset)

Bild 0-8: 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-9: Rahmensystem, in dem der Zustandsregler durch die Implementierung eines Fuzzy-Reglers ersetzt werden soll.

Rahmenprogramm:
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-10: 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-11: Komplettes System.

Übung zu evolutionären Algorithmen
EvooptNeu.zip -- Sketch, der nur eine verbesserte Version der Evoopt-Klasse enthält

Nehmen Sie obigen Sketch zur Grundlage, um das Minimum der Fehlerfunktion F(x,y)=x3-4x+y3-16y aproximativ mit Hilfe eines evolutionären Algorithmus' zu bestimmen.

Hinweise:

  • Sie können die Schritte der evolutionären Suche in der draw()-Methode implementieren.
  • Die Paramter x und y müssen in genügend feiner Auflösung auf ein Gen abgebildet werden.

#6 Do 08.12.2022

  • Neuronale Netze
  • Klärung von Fragen zu / Einführung von Processing / Java / OOP / Vererbung und Schnittstellen ...
  • Übung zu evolutionären Algorithmen von gestern
  • Vorbesprechung zur Implementierung eines Fuzzy-Systems mit Java
75_Echtzeit3/01_NeuronaleNetze
30_Informatik3/01_Vom_struct_zur_Klasse/06_Objektabstraktion
30_Informatik3/02_UML/02_UML_Klassendiagramm
36_Java
78_Processing
92_Soundinstallation/03_material/11_Snippets
30_Informatik3/15_Rasterlayout/02_interfaces
74_EmbSyst/02_Eingebettete_Systeme/03_Android/04_Interfacedesign
30_Informatik3/16_Nuetzliches/01_Threads
OOP0001.zip -- Im Unterricht entstandene Beispiele zu OOP.
OOP0002_Kapselung.zip -- Im Unterricht entstandene Beispiele zu OOP.
--- Schließung THB ---

#7 Mi 14.12.2022 ONLINE

EvooptNeu_Musterloesung.zip
Evolution_ergebnix.zip -- studentische Lösung
rt2_mt5_uebung1.pdf -- Übung 1, zu lösen bis 21.12.
Schnittstelle007.zip -- Beispiele zur Verwendung von Schnittstellen.
Schnittstelle007b.zip -- Beispiele zur Verwendung von Schnittstellen.
Schnittstelle007c.zip -- Beispiele zur Verwendung von Schnittstellen.

#9 Mi 21.12.2022 ONLINE

Lösungen zur ersten Übung rt2_mt5_uebung1.pdf:

Lösung zu Übung 1, Aufgabe 1:

clear;

dd=[4,11,24];
UU=[0,1,2];

//Bc+d=r

B = [UU',(2^UU)']

d = -dd'

//Ac+b=0

A=B'*B

//A:
//   5.    10.
//   10.   21.

b=B'*d

//b:
//-59. 
//-122.

c=inv(A)*(-b)

aa=c(1)
bb=c(2)

//a=3.8, b=4.0

//Test:

r = aa*UU+bb*2^UU - dd

//...mit Scilab direkt:
lsq(B,-d)


Code 0-12: Lösung zu Aufgabe 1 mit Hilfe von Scilab, aber nach dem Schema von Hand.

Lösung zu Übung 1, Aufgabe 1:

Siehe: 62_Regelungssysteme/01_day_by_day, Code 0-5: inverspendel.sce

Teil 2 der Lösung: "Wie ändert sich Ihr Regler, wenn phi_soll statt Null PI/8 sein soll?"

$ \left[\begin{array}{cc}\dot \phi ^# \\ \dot \omega ^#\end{array}\right]=\left[\begin{array}{cc}0 & 1 \\ \frac {m \cdot g \cdot h}{J} & 0\end{array}\right] \cdot \left[\begin{array}{cc} \phi ^# \\ \omega ^#\end{array}\right]-\left[\begin{array}{cc}0 \\ \frac {h}{J}\end{array}\right] \cdot \left[\begin{array}{cc}r1 & r2\end{array}\right] \cdot \left[\begin{array}{cc} \phi ^# \\ \omega ^#\end{array}\right] $

Formel 0-7: Linearisierte DGLs des geregelten transformierten Systems.


Es gilt:

$ \phi ^#= \phi -pi/8 $

Formel 0-8: Zusammenhang 1


$ \dot \phi ^#=\dot \phi $

Formel 0-9: Zusammenhang 2


$ \omega ^#= \omega $

Formel 0-10: Zusammenhang 3


$ \dot \omega ^#=\dot \omega $

Formel 0-11: Zusammenhang 4


  • Wir heben die Matrixform auf und betrachten nur die untere Gleichung.
  • Nach Rücksubstitution des transformierten Systemzustandes, wird alles, was nicht zum System gehört dem Antriebskraft zugeschlagen.

$ \ddot \phi = \frac {m \cdot g \cdot h}{J} \cdot \phi - \frac {m \cdot g \cdot h}{J} \cdot \frac {pi}{8} - \frac {h}{J} \cdot r_1 \cdot \phi + \frac {h}{J} \cdot r_1 \cdot \frac {pi}{8} - \frac {h}{J} \cdot r_2 \cdot \omega $

Formel 0-12: Untere Systemgleichung nach Rücksubstitution.


...somit:

$ \ddot \phi = \frac {m \cdot g \cdot h}{J} \cdot \phi + \frac {h}{J} \cdot \left(-r_1 \cdot \phi +r_1 \cdot \frac {pi}{8} -r_2 \cdot \omega -m \cdot g \cdot \frac {pi}{8}\right) $

Formel 0-13: Passende Zusammenfassung.


Die runde Klammer ist das Antriebskraft:

$ \ddot \phi = \frac {m \cdot g \cdot h}{J} \cdot \phi + \frac {h}{J} \cdot F_A $

Formel 0-14: Antriebskraft zusammengefasst.


Aufgabe 3 und 4 werden online "life gecodet"

clear;
clc;

function nkp = fuzzysetX(x)
nkp = zeros(3,1);
if x<-2 then
nkp(1,1)=1.0;
nkp(2,1)=0.0;
nkp(3,1)=0.0;
elseif x<0 then
nkp(1,1)=-0.5*x;
nkp(2,1)=1-nkp(1);
nkp(3,1)=0.0;
elseif x<2 then
nkp(3,1)=0.5*x;
nkp(2,1)=1-nkp(3);
nkp(1,1)=0;
else
nkp(1,1)=0.0;
nkp(2,1)=0.0;
nkp(3,1)=1.0;
end
endfunction

k = 1;
a = zeros(3,601);
for x = -3:0.01:3

b = fuzzysetX(x);
a(1,k) = b(1);
a(2,k) = b(2);
a(3,k) = b(3);
k=k+1;
end

x = -3:0.01:3;
plot(x,a(1,:),x,a(2,:),x,a(3,:));

Code 0-13: Studentische Lösung Aufgabe 3.

Fuzzy fuzzy;
float x = 1.5;
public void setup()
{
fuzzy = new Fuzzy();
float y[] = fuzzy.fuzzysetX(x);
println("fuzzyset= negativ: "+y[1]); //+" klein: "+y[2]+" positiv: "+y[3]);
}

public void draw()
{

}

//--------------------------------------------

public class Fuzzy
{
float[] nkp;
public Fuzzy()
{
nkp = new float[3];
}

public float[] fuzzysetX(float x)
{
if (x<-2)
{
nkp[0]=1.0;
nkp[1]=0.0;
nkp[2]=0.0;
}
else if (x<0)
{
nkp[0]=-0.5*x;
nkp[1]=1-nkp[0];
nkp[2]=0.0;
}
else if (x<2)
{
nkp[2]=0.5*x;
nkp[1]=1-nkp[2];
nkp[0]=0.0;
}
else
{
nkp[0]=0.0;
nkp[1]=0.0;
nkp[2]=1.0;
}
return nkp;
}
}

Code 0-14: Studentische Lösung Aufgabe 3b -- mit Processing.

EvooptNeu_Pendel.zip -- Musterlösung 4. Aufgabe

Neues Übungsblatt, bitte bis 11.01.2023 bearbeiten:


rt2_mt5_uebung2.pdf -- Übung 2, zu lösen bis 11.01.2023

#11 Mi 11.01.2023 ONLINE

Lösungen zu Übung 2

Lösung zu Übung 2, Aufgabe 1a)
Lösung zu Übung 2, Aufgabe 1a) (Processing-Sketch)
Plots aus Uebung2_A1_001 und dem Scilab-Skript übereinander gelegt.

Bild 0-9: Plots aus Uebung2_A1_001 und dem Scilab-Skript übereinander gelegt.

Lösung zu Übung 2, Aufgabe 1b)

Um die maximale Kraft zu finden, muss sie rekonstruiert werden:

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,:)');
FF = fregler(y(1,:),y(2,:));
plot(t,FF);
disp(max(FF))

Code 0-15: Zustandsregler mit rekonstruierter Stellkraft Kraft F.

Die maximal auftretende Stellkraft ist Fmax=1.3626500.

Lösungsidee:
  • Grundidee, im die Lösung zu 1a) einfach zu halten:
  • Alle Stützstellen werden symmetrisch zur senkrechten Koordinatenachse gedehnt.
  • So bleiben alle Dreiecke symmetrisch.
  • Bei den Fuzzysets zu x und v wird bei der äußeren rechten Stützstelle xs, vs eine Variation von 1 bis 3 erlaubt.
  • Bei dem Ausgangsfuzzyset ebenso (fs).
  • Alle anderen Stützstellen hängen linear von diesen Festlegungen ab.
  • Also gibt es drei Parameter, die durch Evoopt kontrolliert werden: stuetz=[xs,vs,fs]
  • setStuetz(double[] stuetz) erlaubt es, die drei äußeren Stützstellen festzulegen.
  • Die Ausgangskraft wird zu Fmax=1.3626500 "gedeckelt".
Teillösung: Stützstellen lassen sich setzen mit setStuetz(..):
Uebung2_A1b_001.zip -- Teillösung: Stützstellen lassen sich setzen mit setStuetz(..)
Vollständige Lösung mit Evoopt
Uebung2_A1b_002.zip -- Musterlösung zu Übung 2, 1b), vollständig.
Vor (durchgezogen) und nach (gestrichelt) der Optimierung.

Bild 0-10: Vor (durchgezogen) und nach (gestrichelt) der Optimierung.

Generation Nr. 4300 xs_best=1.6968399982406481 vs_best=1.6394199983856197 fs_best=10.999949974752553 
                    g0=0.06968399982406481 g1=0.06394199983856197 g2=0.9999949974752553 
                    Fehler: 16.408488135878798

Code 0-16: Beispiel-Fehlerausgabe nach vielen Generqationen.


Übung 2, Aufgabe 2, Musterlösung


Uebung2_A2_002.zip -- Übung 2, Aufgabe 2, Musterlösung
Demonstration: Registrierung von Objekten in anderen Objekten
Vektor003.zip -- zub wird in u und v registriert.
Vektor004.zip -- u und v erzeugen sich jeweils ihr eigenes zub-Objekt.
--- Öffnung THB ---

#13 Mi 18.01.2023 E-Test Simulations- und Regelungstechnik 2 5-MT

#14 Do 19.01.2023