Minimierung von Abweichungen von Idealwerten
Marcelinho
Forum-Anfänger
Beiträge: 15
Anmeldedatum: 20.11.14
Wohnort: ---
Version: ---
Verfasst am : 25.11.2014, 18:32
Titel : Minimierung von Abweichungen von Idealwerten
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
Beschreibung:
Download
Dateiname:
Konstanten.xls
Dateigröße:
250 KB
Heruntergeladen:
310 mal
Harald
Forum-Meister
Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
Verfasst am : 25.11.2014, 22:56
Titel :
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
Marcelinho
Themenstarter
Forum-Anfänger
Beiträge: 15
Anmeldedatum: 20.11.14
Wohnort: ---
Version: ---
Verfasst am : 25.11.2014, 23:18
Titel :
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 ?
Harald
Forum-Meister
Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
Verfasst am : 25.11.2014, 23:39
Titel :
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
Marcelinho
Themenstarter
Forum-Anfänger
Beiträge: 15
Anmeldedatum: 20.11.14
Wohnort: ---
Version: ---
Verfasst am : 26.11.2014, 00:17
Titel :
Ok das werde ich mal so versuchen ... aber wie gehe ich damit um, dass w nicht in der Zielfunktion Min Z auftaucht ?
Harald
Forum-Meister
Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
Verfasst am : 26.11.2014, 00:35
Titel :
Hallo,
natürlich taucht es dort auf, wenn du z.B. statt d1 (Mopt - w'*m) reinschreibst.
Grüße,
Harald
Marcelinho
Themenstarter
Forum-Anfänger
Beiträge: 15
Anmeldedatum: 20.11.14
Wohnort: ---
Version: ---
Verfasst am : 26.11.2014, 01:34
Titel :
Die Funktion ist zwar riesig und die Anzahl an Parametern ebenfalls, aber es läuft.
Ich danke dir vielmals Harald !
Harald
Forum-Meister
Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
Verfasst am : 26.11.2014, 11:43
Titel :
Hallo,
wenn du deinen Code postest, kann ich ggf. Vorschläge zur Anpassung machen.
Grüße,
Harald
Marcelinho
Themenstarter
Forum-Anfänger
Beiträge: 15
Anmeldedatum: 20.11.14
Wohnort: ---
Version: ---
Verfasst am : 26.11.2014, 20:26
Titel :
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.
Harald
Forum-Meister
Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
Verfasst am : 26.11.2014, 20:50
Titel :
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
Grüße,
Harald
Marcelinho
Themenstarter
Forum-Anfänger
Beiträge: 15
Anmeldedatum: 20.11.14
Wohnort: ---
Version: ---
Verfasst am : 27.11.2014, 00:30
Titel :
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
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.