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

Minimierung von Abweichungen von Idealwerten

 

Marcelinho
Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 20.11.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.11.2014, 18:32     Titel: Minimierung von Abweichungen von Idealwerten
  Antworten mit Zitat      
Hallo Forum,

ich möchte eine Minimierung von Abweichungen von Idealwerten (Minkowski Distanz) gegeben Präferenzen(Gewichtungen) und Nebenbedingungen lösen.



Optimalwerte : Mopt , Vopt, Sopt, Kopt (sind bekannt,konstant)
lambda1 bis 4 (Gewichtung/Präferenz) >=0 und=< 3

Nebenbedingungen:

w'*m+d1=Mopt
w'*M2*w-d2=Vopt
w'*M3*kron(w,w)+d3=Sopt
w'*M4*kron(kron(w,w),w)-d4=Kopt

und : (Summe der Gewichte = 1 und lb =0 , ub=1 )

Aeq=ones(10,1)';

beq=1;

lb=zeros(10,1);

ub=ones(10,1);


m,M2,M3,M4 sind bekannt und Konstant.

Die Optimierung soll mir nun die Gewichtungen w (für 10 Argumente) geben, die unter den Präferenzen und Nebenbedingungen Z minimiert.

Welcher Solver dafür der beste ist weiß ich nicht genau, aber ich denke fmincon, fgoalattain oder pdist(X,'minkowski',P) könnten funktionieren.

Im Anhang befinden sich die Konstanten.

Mit freundlichen Grüßen,
Marcelinho

Konstanten.xls
 Beschreibung:

Download
 Dateiname:  Konstanten.xls
 Dateigröße:  250 KB
 Heruntergeladen:  310 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: 25.11.2014, 22:56     Titel:
  Antworten mit Zitat      
Hallo,

Sieht nach fmincon aus.

Zitat:
Nebenbedingungen:

w'*m+d1=Mopt
w'*M2*w-d2=Vopt
w'*M3*kron(w,w)+d3=Sopt
w'*M4*kron(kron(w,w),w)-d4=Kopt


Dies würde ich nicht als NB auffassen, sondern nach d1 - d4 auflösen und in die Zielfunktion einsetzen.

M*, V*, S* und K* sind auch bekannt und gegeben?

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 20.11.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.11.2014, 23:18     Titel:
  Antworten mit Zitat      
Ja M*, V*, S* und K* sind auch bekannt, das sind die Optimalwerte (Mopt etc... )

So also :

w'*m-Mopt=-d1
w'*M2*w-Vopt=d2
w'*M3*kron(w,w)-Sopt=-d3
w'*M4*kron(kron(w,w),w)-Kopt=d4

wie würdest du die Zielfunktion dann formulieren ?
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: 25.11.2014, 23:39     Titel:
  Antworten mit Zitat      
Hallo,

function Z=minkowski(w, parameters)
% hier kommt Z in Abhängigkeit von w und gegebenen Parametern hin.

Die Parameter werden außerhalb der Funktion definiert und beim fmincon-Aufruf mit übergeben, siehe auch
http://de.mathworks.com/help/optim/.....parameters.html#brhkghv-9

Sollte das mit den vielen Parametern unübersichtlich erscheinen, kann man diese auch in einer Struktur zusammenfassen.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 20.11.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.11.2014, 00:17     Titel:
  Antworten mit Zitat      
Ok das werde ich mal so versuchen ... aber wie gehe ich damit um, dass w nicht in der Zielfunktion Min Z auftaucht ?
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: 26.11.2014, 00:35     Titel:
  Antworten mit Zitat      
Hallo,

natürlich taucht es dort auf, wenn du z.B. statt d1 (Mopt - w'*m) reinschreibst.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 20.11.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.11.2014, 01:34     Titel:
  Antworten mit Zitat      
Die Funktion ist zwar riesig und die Anzahl an Parametern ebenfalls, aber es läuft.

Ich danke dir vielmals Harald !
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: 26.11.2014, 11:43     Titel:
  Antworten mit Zitat      
Hallo,

wenn du deinen Code postest, kann ich ggf. Vorschläge zur Anpassung machen.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 20.11.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.11.2014, 20:26     Titel:
  Antworten mit Zitat      
Es lässt sich sicherlich eleganter schreiben.

Code:
function [z] = objectfun3(w,m,Mopt,M2,Vopt,M3,Sopt,M4,Kopt,a,b,c,d)

    z=abs(-(m*w-Mopt)/Mopt)^a+abs(w'*M2*w-Vopt/Vopt)^b+abs(-(w'*M3*kron(w,w)-Sopt)/Sopt)^c+abs(w'*M4*kron(kron(w,w),w)-Kopt/Kopt)^d;
   
 
end


Code:
fun = @(w)objectfun3(w,m,Mopt,M2,Vopt,M3,Sopt,M4,Kopt,a,b,c,d);

a=1;

b=1;

c=1;

d=1;

x0=zeros(10,1);

Aeq=ones(10,1)';

beq=1;

lb=zeros(10,1);

ub=ones(10,1);

[w, Z] = fmincon(fun,x0,[],[],Aeq,beq,lb,ub);


a,b,c und d kann ich nach belieben variieren.
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: 26.11.2014, 20:50     Titel:
  Antworten mit Zitat      
Hallo,

funktionell sieht es gut aus. Vorschläge für mehr Übersichtlichkeit mit überschaubarem Aufwand:

- Alle Variablen oder zumindest die, die einen Bezug zueinander haben, in eine Struktur schreiben und die Daten in der Funktion wieder aus der Struktur holen. Das sollte die Anzahl der Ein- und Ausgabeargumente deutlich reduzieren.
- In der Funktion Variablen d1-d4 als Zwischenspeicher erstellen, so dass die Formel insgesamt als solche erkennbar bleibt, also
Code:
d1 = ...
d2 = ...
...
Z = ( Formel mit d1 - d4 )


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

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 20.11.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.11.2014, 00:30     Titel:
  Antworten mit Zitat      
Danke nochmals für die Hnweise.
Ich bin schon sehr froh, dass es funktioniert und ich werde es ggf. noch übersichtlicher gestalten.

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