WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Optimierung Funktion und Nebenbedingungen (fmincon)

 

holozaen
Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 08.11.14
Wohnort: Berlin
Version: ---
     Beitrag Verfasst am: 08.11.2014, 19:10     Titel: Optimierung Funktion und Nebenbedingungen (fmincon)
  Antworten mit Zitat      
Hallo zusammen,

ich beschäftigte mich seit ein, zwei Monaten etwas genauer mit Matlab im Rahmen meiner Bachelorarbeit und stoße nun auf ein Problem, dass ich seit einigen Tagen einfach nicht gelöst bekomme.
Vereinfacht gesagt geht es dabei darum, die Maxima einer Funktion "abzuschneiden" und entsprechend die Täler "aufzufüllen". Bei der Funktion handelt es sich um die Leistung P mehrerer Bremsscheiben über die Geschwindigkeit v.

Vorab: ein qualitativen Verlauf meiner Ausgangsfunktion (schwarz) und meines bisherigen Ergebnisses (rot) habe ich angehangen.

Meine Idee war bisher, dass ich die Leistung als quadratische Funktion ausdrücke (so umgehe ich die 2 Peaks). Es soll als Randbedingung dabei gelten, dass die maximale Leistung, also das Maximum der quadratischen Funktion so gering wie möglich ist. Außerdem soll die Summe aller Funktionswerte in der Ausgangsfunktion gleich die der Funktionswerte der Endfunktion sein. Ich habe dabei für jede Geschwindigkeit mit der Schrittweite ein, genau einen entsprechenden Leistungswert (Funktionswert).

Im Netz bin ich dabei auf die Funktion fmincon gestoßen, jedoch schaffe ich es einfach nicht damit eine Optimierung durchzuführen, da ich nicht weiß wie ich die Nebenbedingungen vernünftig ausdrücken soll. Mein bisheriges Ergebnis habe ich mit Hilfe eines Gleichungssystems gelöst, jedoch wird dabei die Höhe nicht minimal gewählt.

Ich wäre super dankbar, falls mir jemand einen Tipp oder Ähnliches geben könnte. Vielleicht bin ich auch einfach nur auf dem falschen Weg und sehe den Wald vor lauter Bäumen nicht mehr.

Vielen Dank vorab und beste Grüße
Philipp

Figure 1_2014-11-08_17-59-36.png
 Beschreibung:

Download
 Dateiname:  Figure 1_2014-11-08_17-59-36.png
 Dateigröße:  9.93 KB
 Heruntergeladen:  438 mal
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 08.11.2014, 19:22     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Es soll als Randbedingung dabei gelten, dass die maximale Leistung, also das Maximum der quadratischen Funktion so gering wie möglich ist.

Das klingt eher nach Zielfunktion als nach Nebenbedingung.

Insgesamt muss ich sagen, dass ich der Beschreibung nicht ganz folgen kann. Oft hilft es, Zielfunktion und Nebenbedingungen als Formeln hinzuschreiben.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
holozaen
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 08.11.14
Wohnort: Berlin
Version: ---
     Beitrag Verfasst am: 08.11.2014, 19:40     Titel:
  Antworten mit Zitat      
Hallo,

da ich noch relativ neu in dem Thema bin, habe ich wohl die Begriffe verwechselt. Meine Zielfunktion beschreibt, den Abstand zwischen dem Maximum der Funktion und der x-Achse zu minimieren.
Meine Funktion ist eine quadratische Funktion der Form:
P(a,b,x) = ax^2 + bx
Hierbei weiß ich, dass sich das Maximum der Funktion an der Stelle x_0 = -\frac{b}{2a} befindet, sodass sich die Funktion, die minimiert werden soll zu  P(a,b) = -\frac{b^2}{-4a} vereinfacht. Die Koeffizient a und b sollen nun entsprechend der Nebenbedingung minimiert werden. Die Nebenbedingung lautet dann wie folgt:
\sum\limits_{x=0}^{360} (a*x^2 + b*x) = P_ges ergeben. P_ges ist dabei gegeben.
Ich hoffe, ich konnte mein Problem etwas genauer erklären. Es spielen leider sehr viele Überlegungen mit in die Berechnung ein, sodass es nicht immer ganz einfach ist, die Problematik auf's einfachste runterzubrechen. Laughing
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 08.11.2014, 20:56     Titel:
  Antworten mit Zitat      
Hallo,

das sieht doch schon viel besser aus. P wird also deine Zielfunktion, und als Nebenbedingung haben wir umgeformt:
a* \sum\limits_{x=0}^{360} x^2 + b* \sum\limits_{x=0}^{360} x = P_ges
also eine lineare Gleichungsnebenbedingung.

Wo gibt es nun genau Probleme bei der Umsetzung?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
holozaen
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 08.11.14
Wohnort: Berlin
Version: ---
     Beitrag Verfasst am: 09.11.2014, 12:41     Titel:
  Antworten mit Zitat      
Hallo,

die einfache Umstellung hat mich schon etwas näher an meine Lösung gebracht. Ich weiß weiterhin, dass meine Parabel nach unten geöffnet ist, d.h. für P(a,b,x) = a*x^2 + b*x muss a < 0 und es soll außerdem b > 0 gewählt werden. Ich schaffe es jedoch nicht, diese Bedingungen entsprechend zu formulieren, da mit Hilfe der Funktion fmincon keine echt kleiner Formulierungen zugelassen sind, oder sehe ich das falsch?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 09.11.2014, 12:45     Titel:
  Antworten mit Zitat      
Hallo,

numerisch ist < und <= dasselbe. Versuch's doch mal mit <= und schau, was herauskommt.
Bei Problemen bitte den Code posten.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
holozaen
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 08.11.14
Wohnort: Berlin
Version: ---
     Beitrag Verfasst am: 09.11.2014, 13:33     Titel:
  Antworten mit Zitat      
Hallo,
vielen Dank für den Hinweis! Die Bedingungen für die Koeffizienten a und b werden nun auch erfüllt. Jedoch wird meine weitere Nebenbedingung nicht erfüllt.

So weit mein Skript:
Code:

% gegebene Werte
Pges = 2.1021e+15;
v = [0:360]';

% beschreibe weitere Nebenbedingungen
    % es soll gelten, dass a < 0 sowie b > 0, sodass ich folgendes
    % Ungleichungssystem ergibt
    A = [1 0;
         0 -1];
    b = [0;0];

% setze den Startwert fuer die Optimierung
startwert = [-10,1];

% Aufruf der Optimierungsroutine
[x fval] = fmincon(@(a) maxFun(a), startwert,...
                   A, b, [], [], [], [], @(a) nebenbed( a, v, Pges ));
 


Die Zielfunktion sieht wie folgt aus:
Code:

function [ yMax ] = maxFun( a )
% Zielfunktion := Minimierung des Maximums einer parabolischen Funktion der
% Form f(x) = c(1)*x^2 + c(2)*x
% Das Maximum dieser Funktion liegt bei x0 = - c(2)^2/(4*c(1))

    yMax = -a(2).^2 / (4*a(1));

end
 


Und meine weitere Nebenbedingung:
Code:

function [ ceq, c ] = nebenbed( a, x, Pges )
% Definition der Nebenbedingung
% Es muss gelten, dass die Summe aller Eintraege im Array gleich einem
% vorgegebenen Wert Pges ist
% Es gilt folglich eine Gleichungsnebenbedingung
    ceq = [a(1)*sum(x.^2) + a(2)*sum(x) - Pges];
% Es gibt keine Ungleichungsbedingung
    c = [];

end
 


Ich bin mir sehr unsicher, was meinen Start wert angeht. Ich habe ihn reinintuitiv gewählt.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 09.11.2014, 14:15     Titel:
  Antworten mit Zitat      
Hallo,

du hast c und ceq vertauscht.

Es ist zudem immer eine gute Idee, die Bedingungen so einfach wie möglich zu formulieren, also:
a < 0, b > 0 --> Schrankenbedingungen
a* \sum\limits_{x=0}^{360} x^2 + b* \sum\limits_{x=0}^{360} x = P_ges --> wie gesagt eine lineare NB

Dann sieht der Aufruf so aus:
Code:
[x fval] = fmincon(@maxFun, startwert,...
                   [], [], [sum(v.^2), sum(v)], Pges, [-inf;0], [0; inf],...
                   [], optimset('Algorithm', 'interior-point'));
 


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
holozaen
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 08.11.14
Wohnort: Berlin
Version: ---
     Beitrag Verfasst am: 09.11.2014, 14:39     Titel:
  Antworten mit Zitat      
Vielen Dank! Endlich funktioniert der Algorithmus. Ich weiß die Hilfe wirklich zu schätzen. Das hat mich in meiner Bachelorarbeit wieder ein Stück weitergebracht. Danke nochmals Exclamation

Ich wünsche noch einen schönen Sonntag
Philipp
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.