|
|
Nichtlineare Optimierungsprobleme (fmincon) |
|
Metallions |

Forum-Anfänger
|
 |
Beiträge: 12
|
 |
|
 |
Anmeldedatum: 23.04.18
|
 |
|
 |
Wohnort: Duisburg
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 01.05.2018, 18:58
Titel: Nichtlineare Optimierungsprobleme (fmincon)
|
 |
Hallo, liebe Matlab-Gemeinde
Ich Matlab-Anfänger habe folgendes Problem:
Soweit von mir schon in Matlab programmiert:
Gegebenes nichtlineares Optimierungsproblem:
Zielfunktion: Maximiere (2*x1+3*x2)^2
Nebenbedingungen
x1^2 + x2^3 = 100
2*x1^2 + 4*x2^2 <= 120
x2 <= 35
x1,x2 >= 0
options = optimoptions('fmincon','Display','final')
A = [1 1; X X; 0 1];
b = [100 120 35];
lb = [0 0];
x0 = [1 2];
[x,Fval] = fmincon(@funk,x0,A,b,[],[],lb,[],[],options)
Ich habe nun folgende Fragen:
1) Ich weiß leider nicht, was ich bei A (für die beiden X) eintragen muss. Die Gleichung: 2*x1^2 + 4*x2^2 <= 120 spielt dafür eine Rolle. Ich bin mir unsicher ob ich nun 2 und 4 oder 4 (wegen 2^2) und 16 (wegen 4^2) eintragen muss.
2) Habe ich die Zielfunktion: Maximiere (2*x1+3x2)^2 in der function-file richtig?
function f = funk(x)
f = (2*x(1)+3*x(2))^2
end
Ich bedanke mich schon mal für eure Hilfe.
|
|
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.499
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 01.05.2018, 19:04
Titel:
|
 |
Hallo,
die Zielfunktion ist korrekt.
Die beiden ersten Nebenbedingungen sind nichtlinear. Das sollte also nicht in A und b, sondern in die nichtlinearen NB, die auch als Function Handle angegeben werden müssen.
x2 <= 35 kannst du auch als Schrankenbedingung umsetzen mit ub = [inf, 35]
Grüße,
Harald
|
|
|
Metallions |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 12
|
 |
|
 |
Anmeldedatum: 23.04.18
|
 |
|
 |
Wohnort: Duisburg
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 01.05.2018, 19:11
Titel:
|
 |
Wow, echt super, dass man so schnell eine Antwort bekommt.
Erstmal vielen vielen Dank.
Da die ersten beiden Nebenbedingungen nicht linear sind, heißt das, dass ich für jede dieser beiden ein eigenes function-file machen muss ? oder habe ich das falsch verstanden ?
Und wenn ja, wie kann ich sie in x,Fval] = fmincon() einfügen ?
Da ich leider ein Anfänger bin, habe ich die "Matlab-Sprache" noch nicht so raus.
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.499
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 01.05.2018, 20:19
Titel:
|
 |
Hallo,
Zitat: |
heißt das, dass ich für jede dieser beiden ein eigenes function-file machen muss ? |
Nein, eines für beide zusammen.
Wenn du mit einer Funktion nicht zurechtkommst, bitte immer die Doku sorgfältig lesen. Da gibt es sogar ein Beispiel "Nonlinear Constraints".
Übrigens: fmincon minimiert, du willst aber maximieren. Solltest du bei der Zielfunktion berücksichtigen.
Grüße,
Harald
|
|
|
Metallions |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 12
|
 |
|
 |
Anmeldedatum: 23.04.18
|
 |
|
 |
Wohnort: Duisburg
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 02.05.2018, 10:44
Titel:
|
 |
|
 |
|
Hallo,
nochmals danke für deine Hilfe.
Ich habe nun alles und wollte wissen, ob ich soweit alles richtig gemacht habe:
Zur Veranschaulichung:
Gegebenes nichtlineares Optimierungsproblem:
Zielfunktion: Maximiere (2*x1+3*x2)^2
Nebenbedingungen
x1^2 + x2^3 = 100
2*x1^2 + 4*x2^2 <= 120
x2 <= 35
x1,x2 >= 0
function f = funk(x)
f = (-1)*(2*x(1)+3*x(2))^2
% Maximierungsproblem ins Minimierungsproblem umgewandelt
% durch *(-1)
end
function [c,ceq] = confunk(x)
c = 2*x(1)^2+4*x(2)^2; % Entspricht 2*x1^2 + 4*x2^2 <= 120
ceq = x(1)^2+x(2)^3; % Entspricht x1^2 + x2^3 = 100
end
options = optimoptions('fmincon','Display','final')
lb = [0 0];
ub = [inf,35]; % Hier Nebenbedingung x(2) <= 35
x0 = [1 1];
[x,Fval] = fmincon(@funk,x0,[],[],[],[],lb,ub,@confunk,options)
Ich hätte dazu noch 2 Fragen:
1) In function [c,ceq] = confunk(x) habe ich ja die 2 Nebenbedingungen, aber nirgendwo habe ich die Grenzen beider drin, also <= 120 (siehe c) und = 100 (siehe ceq). Wo muss ich diese beiden Grenzen reinschreiben?
2) Ich soll noch die Indizes der Nebenbedingungen angeben, welche als Gleichung erfüllt sind. Wie kann ich das hier umsetzen?
Mit freundlichen Grüßen
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.499
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 02.05.2018, 11:23
Titel:
|
 |
Hallo,
1)
(Un)gleichungen und müssen in der Form <= 0 bzw. = 0 angegeben werden, also
2)
Du kannst mal schauen, ob eines der weiteren Rückgabeargumente von fmincon weiter hilft. Ansonsten würde ich die Lösung einsetzen und das so analysieren.
Grüße,
Harald
|
|
|
Metallions |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 12
|
 |
|
 |
Anmeldedatum: 23.04.18
|
 |
|
 |
Wohnort: Duisburg
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 02.05.2018, 14:45
Titel:
|
 |
Einfach super, ich habe nun Werte raus, die logisch klingen. Ich danke dir wirklich.
oder waren in meinen Functions usw. irgendwo ein Fehler drin ?
Meine letzte Frage:
Zu 2) Leider habe ich schon fmincon durchgeschaut und kein Rückgabeargument gefunden. Output und exitflag machen meiner Meinung nach leider keine Angaben darüber. Leider darf ich die Lösung so nicht einsetzen. Es soll so sein, dass wenn ich z.b. die gegebenen Funktionen durch andere Funktionen ersetze, dass mir Matlab dann auch ausspuckt, welche von den Nebenbedingungen als Gleichung erfüllt sind.
Ich wollte zuerst mit if-Befehl arbeiten, doch habe ich da leider versagt.
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
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
| 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.
|
|