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

fmincon Nebenbedingung o. Gl.-Sys. mit beliebigen Variablen?

 

seppl265
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 25.02.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.02.2010, 10:03     Titel: fmincon Nebenbedingung o. Gl.-Sys. mit beliebigen Variablen?
  Antworten mit Zitat      
Hallo,
Ich habe ein Optimierungsproblem in Matlab mit 2 Designvariablen (x(1) & x(2)) was über fmincon gelöst werden soll. Als Ergebniss soll eine der Designvariablen über die Zielbedingung minimiert werden. Zusätzlich müssen Ergebnisse die wiederum von den Designvariablen abhängig sind in bestimmten Intervallen liegen. Mein Problem ist derzeit, dass ich über die Nebenbedingung bzw. über die Angabe eines Ungleichungsystems in der Optimierung dafür nur die Designvariablen verwenden kann und nicht die Ergebnisvariablen. Die Berücksichtigung der Grenzen mit in der Zielbedingung über eine geeignete Funktion bringt nicht die erwünschten Ergebnisse.
Über ein paar Tips bzw. eine Lösung wäre ich sehr dankbar.

Viele Grüße

Sebastian[/b]
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


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

die Ergebnisvariablen sind doch die (optimierten) Designvariablen?
Es macht vieles einfacher, wenn man mal versucht, das ganze formal (und in dem von fmincon gegegeben Framework mit Nebenbedingungen, linearen Gleichungen und Ungleichungen sowie nichtlinearen Nebenbedingungen) niederzuschreiben.

Und wenn es um ein Problem mit bestimmtem Code geht, dann bitte den Code(-ausschnitt) zur Verfügung stellen.

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

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 25.02.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.02.2010, 09:14     Titel:
  Antworten mit Zitat      
Hallo
Ich verstehe die obige Antwort nicht so ganz, versuche aber alles noch einmal genauer zu bschreiben.
Ich habe meine zwei Designvariablen, die im Laufe der Optimierung variabel sind und die es zu optimieren gilt. Diese Designvariablen gehen als Eingangsgrößen in ein Skript, dass wiederum Outputvariablen liefert. Diese Outputvariablen müssen vorgegebene Grenzen unterschreiten. Dieses wüde ich gerne über eine Nebenbedingung realisieren oder über die Angabe eines Ungleichungsystem (Angabe A,B in fmincon). Die Angabe eines Ungleichungsystem bezieht sich aber immer auf die Designvariablen und nicht auf mögliche Outputvariablen. Gleiches gilt für die Nebenbedingung ich bekomme in die function der Nebenbedingung nur die Designvariablem integriert und nicht die Outputvariablen.
Eine der Designvariablen soll zusätzlich möglichst große Werte Annehmen. Realiesierung über Zielbedingung des Optimierers möglich.
Wie kann die Einhaltung der Grenzen für die Outputvariablen erzielt werden? Eine unterbringung in der Zielbedingung führt nicht zum gewünschten Erfolg.

Gruß

Sebastian
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.487
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 26.02.2010, 11:33     Titel:
  Antworten mit Zitat      
Hallo,

Formeln sind manchmal einfacher als Text.

"Diese Designvariablen gehen als Eingangsgrößen in ein Skript, dass wiederum Outputvariablen M(x) liefert" (x dabei als Vektor von x(1) und x(2)). Sagen wir also M(x) < N. Dann musst du das lediglich als nichtlineare Nebenbedingung angeben und dazu das vorgegebene Interface verwenden:
http://www.mathworks.com/access/hel.....rhkghv-11.html#brhkghv-16

In etwa so:
Code:
function [c,ceq]=nebenbed(x)
c = M(x) - N;
ceq = [];


und dann @nebenbed als nonlin. constraint angeben

Zitat:
Eine der Designvariablen soll zusätzlich möglichst große Werte Annehmen.

Das müsste dann in die Zielfunktion mit aufgenommen werden.

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

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 25.02.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.02.2010, 16:55     Titel:
  Antworten mit Zitat      
Hallo, und Vielen Dank für die Antworten.
Aber genau so hatte ich es vorher ja auch schon mal probiert.
Wenn ich die Outputvariablen (M(x)) dort eigebe bekomme ich die Meldung das er diese nicht kennt.
Setze ich die Outputvariable als input mit in die Nebenbedingung funktioniert dieses auch nicht.
function [c,ceq]=nebenbed(x, M(x))

Wie bekomme ich hin das er die Outputvariable in der function der Nebenbedingung zurn Verfügung hat. Habe es auch schon mit global versucht brachte aber auch keinen Erfolg.

Viele Grüße

Sebastian
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.487
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 26.02.2010, 17:18     Titel:
  Antworten mit Zitat      
Hallo,

du musst den Aufruf einer "Outputvariablen" in die Nebenbedingungsfunktion aufnehmen. Mit anderen Worten, in der Nebenbedingungsfunktion muss die Vorschrift, wie diese Outputvariablen berechnet werden, (als Funktionsaufruf) auftauchen.

Klarer kann ich es leider wirklich nicht ausdrücken.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Bijick
Ehrenmitglied

Ehrenmitglied



Beiträge: 914
Anmeldedatum: 18.06.07
Wohnort: Nürnberg
Version: R2006b, R2008b
     Beitrag Verfasst am: 26.02.2010, 20:23     Titel:
  Antworten mit Zitat      
Hallo,

ein Beispiel zum Beispiel: Die Nebenbedingung lautet M(x) <= Schranke. Du hast ein "Skript" M_fun.m, das aus den Designvariablen x eine "Outputvariable" M berechnet. Jetzt ist es wichtig, dass es sich bei dem Skript um eine function handelt:

Code:
function M = M_fun(x)

M = ...


Die kannst Du jetzt in der Nebenbedingung verwenden:

Code:
function [c,ceq]=nebenbed(x)

Schranke = 10; % jedenfalls fest
M = M_fun(x);

c = M - Schranke;
ceq = [];


Herzliche Grüße
Bijick
_________________

>> why
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
Verschoben: 26.02.2010, 20:24 Uhr von Bijick
Von Programmierung nach Toolboxen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.02.2010, 09:25     Titel:
  Antworten mit Zitat      
Jetzt ist klar. Werde ich am Montag mal ausprobieren und mich melden.

Danke vielmals
 
NeuInMatlab

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.05.2016, 20:23     Titel: Schranke nicht fest
  Antworten mit Zitat      
Um das Thema wieder aus dem Morast des Internets auszugraben:

Was mache ich wenn ich die Schranke nicht fest sondern flexibel habe?
Kann ich meiner Funktion 'nebenbed' auch noch einen Wert für meine Schranke mitgeben?

Viele Grüße
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.487
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 20.05.2016, 21:26     Titel:
  Antworten mit Zitat      
Hallo,

ja. Mit derselben Vorgehensweise, mit der man flexible Werte auch an Zielfunktionen übergeben kann.
[url]de.mathworks.com/help/optim/ug/passing-extra-parameters.html[/url]
(am besten über Anonymous Functions)

Grüße,
Harald

P.S.: Anstatt zu hoffen, dass auf einen so alten, beantworteten Thread noch reagiert wird, ist es meist besser, einen neuen zu starten.
Private Nachricht senden Benutzer-Profile anzeigen
 
Spilo
Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 24.10.17
Wohnort: ---
Version: R2016a/b und R2017a
     Beitrag Verfasst am: 22.12.2017, 07:43     Titel:
  Antworten mit Zitat      
Nocheinmal ausgraben,

ich möchte eine Funktion f(x) mit drei Eingangsparameter (x1,x2,x3) optimieren, d.h. diese drei sollen optimiert werden.
Darüberhinaus sollen folgende Bedingungen gelten:
1. x1>0, x2>0, x3>0
2. x2>x3
3. Die Funktion darf nach der Optimierung maximal 10% Überschwingen, d.h. f(xopti)<=1.1*f(xalt)

Nun stellt sich die Frage, wie ich diese Nebenbedingungen fmincon mitteilen kann.

Gruß
Spilo
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.487
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 22.12.2017, 11:37     Titel:
  Antworten mit Zitat      
Hallo,

1. Argument lb
2. lineare Ungleichung
3. verstehe ich nicht. Was soll xalt sein?

Und so nebenbei... das Ausgraben eines alten Threads bringt nur etwas, wenn das neue Thema direkt mit dem alten zu tun hat.
Wenn man nun einen alten Thread ausgräbt, würde ich erwarten, dass man sich zumindest die Mühe macht, diesen zu lesen. Und was steht da?
Zitat:
Anstatt zu hoffen, dass auf einen so alten, beantworteten Thread noch reagiert wird, ist es meist besser, einen neuen zu starten.


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Spilo
Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 24.10.17
Wohnort: ---
Version: R2016a/b und R2017a
     Beitrag Verfasst am: 22.12.2017, 13:10     Titel:
  Antworten mit Zitat      
Hallo,

danke für die Antwort.
Fragen 1 und 2, habe ich bereits gelöst. An der 3. hänge ich noch fest.

xalt=alte Funktionswerte vor der Optimierung.
xneu die neuen Funktionswerte sollen maximal 1.1*xalt sein.

Gruß
Spilo
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

ich gehe davon aus, dass f minimiert werden soll.

Meinst du jetzt xneu < 1.1*xalt oder f(xneu) < 1.1*f(xalt) ?

Das erste wäre eine Schrankenbedingung, das zweite dürfte sich automatisch über die Optimierung ergeben.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Spilo
Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 24.10.17
Wohnort: ---
Version: R2016a/b und R2017a
     Beitrag Verfasst am: 08.01.2018, 07:39     Titel:
  Antworten mit Zitat      
Hallo,

xalt soll ein Vektor sein, der die alten Regelgröße beinhaltet und xneu eben die neuen. verlangt ist, aber dass die neue (optimierte Regelung) maximal 10% überschwinger haben soll.
Ich habe mein Problem unter Regelungstechnik-Rubrik auch formuliert mit meinem Code-Ansatz, aber es wurde noch nicht kommentiert, deshalb hab ich hier nochmal gepostet, bitte ärgern Smile

Gruß Spilo
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2  Weiter

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 - 2024 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.