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

Lineares Optimierungsproblem mit Nebenbedingungen

 

sals

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.10.2010, 10:22     Titel: Lineares Optimierungsproblem mit Nebenbedingungen
  Antworten mit Zitat      
Hi,

ich habe das Problem dass ich folgende Aufgabe in Matlab nicht umgesetzt bekomme, ich versuche es mal so allgemein wie möglich zu formulieren:

Optimierung:
min \sum_i (z_i) % ist gesucht

Nebenbedingung 1:
A*x=b; % wobei A und b gegeben sind und x gesucht ist,

Nebenbedingung 2:
M_1*x<=z % komponentenweise
M_2*x<=z % komponentenweise wobei die M_1*x andere x Komponenten enthält wie M_2*x

Nebenbedingung 3:
x_i>=0 % und Menge der reelen Zahlen

Was ich bis jetzt in Matlab mit den Matrizen usw. hab ist

Code:
Aeq=
1   1   0   0   0   0   0   0   0   0   0   0   0   0   0   0
0   0   0   1   0   0   1   0   0   0   0   0   0   0   0   0
-1   0   1   1   0   0   0   0   0   0   0   0   0   0   0   0
0   -1   0   0   1   1   0   0   0   0   0   0   0   0   0   0
0   0   -1   0   -1   0   1   1   0   0   0   0   0   0   0   0
0   0   0   0   0   0   0   0   1   1   0   0   0   0   0   0
0   0   0   0   0   0   0   0   0   0   0   0   0   1   0   1
0   0   0   0   0   0   0   0   -1   0   1   1   0   0   0   0
0   0   0   0   0   0   0   0   0   -1   0   0   1   1   0   0
0   0   0   0   0   0   0   0   0   0   -1   0   -1   0   1   1

beq=2
2
0
0
0
2
2
0
0
0

lb=x0=0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0

% function
function f= myfun(x)
f=max(sum(x(1:2)),sum(x(9:10)))+max(sum(x(3:4)),sum(x(11:12)))+max(sum(x(5:6)),sum(x(13:14)))+max(sum(x(7:8)),sum(x(15:16)));

% aktuell benutzer aufruf
[x,fval] = fmincon(@myfun,x0,[],[],Aeq,beq,lb,[])



Das Ergebnis ist leider nicht das was das Optimum wäre, das Optimum wäre für den Fall 5. Es kommt aber 5.4 raus. In den Gleichungen ist es so, dass die Werte von x vom Index 1 bis einschließlich Index 8 unabhängig von den Werten von 9 bis 16 sind. Aber Sie beeinflussen sich gegenseitig durch die Minimumsuche.

Ich hab auch versucht das ganze in ein MinMax Problem umzuformen, habs aber auch nicht geschafft.

Ich hoffe mir kann jemand weiterhelfen.

Vielen Dank für jeden Kommentar...

opt.txt
 Beschreibung:
Werte

Download
 Dateiname:  opt.txt
 Dateigröße:  628 Bytes
 Heruntergeladen:  585 mal
myfun.m
 Beschreibung:
funktion

Download
 Dateiname:  myfun.m
 Dateigröße:  147 Bytes
 Heruntergeladen:  588 mal


sals

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.10.2010, 11:06     Titel:
  Antworten mit Zitat      
nur zur info

ich x0 mit den ergebnissen von x nach dem ersten aufruf der funktion
fmincon überschrieben und die funktion nochmal aufgerufen.
siehe da, die optimale lösung kam raus.

[x,fval] = fmincon(@myfun,x0,[],[],Aeq,beq,lb,[]);
x0=x;
[x,fval] = fmincon(@myfun,x0,[],[],Aeq,beq,lb,[]);

aber irgendwie kanns das ja auch nicht sein...
 
Harald
Forum-Meister

Forum-Meister


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

die Statusmeldung des Optimierers sollte dir hier einen entscheidenden Hinweis liefern, wo das Problem ist. Wenn der Optimierer abbricht, weil eine Toleranz unterschritten wurde, dann bietet es sich an, diese Toleranz über die Optionen (letztes Argument des Lösers; siehe auch optimset) herunterzusetzen.

Meine Vermutung ist, dass in deinem Problem so etwas wie ein Sattelpunkt vorliegt und MATLAB in diesen hineinläuft.

Falls dein Problem wie es mir scheint linear ist, bietet sich die Verwendung von linprog an, ein Löser, der genau für diese Problemklasse gedacht ist.

Grundsätzlich sollte man sich darüber im klaren sein, dass in der Optimization Toolbox eine *lokale* Minimum-Suche stattfindet. Wird nach einem globalen Maximum gesucht, müssen ausreichend gute Startwerte zur Verfügung stehen oder man muss auf die Global Optimization Toolbox ausweichen.

Wenn die Komponenten 1-8 und 9-16 keine Interaktion haben, könnte man das auch in 2 vollkommen voneinander unabhängige Minimierungsprobleme aufspalten. Das dürfte deutlich leichter / schneller zu lösen sein.

Grüße,
Harld
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 - 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.