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

Mehrzieloptimierung formulierungsproblem fmincon NBI

 

jasicha
Forum-Anfänger

Forum-Anfänger


Beiträge: 35
Anmeldedatum: 22.10.12
Wohnort: ---
Version: 2014a
     Beitrag Verfasst am: 13.11.2012, 18:09     Titel: Mehrzieloptimierung formulierungsproblem fmincon NBI
  Antworten mit Zitat      
Hallo,
mein Problem vor dem ich gerade stehe stellt sich folgendermaßen dar.

Ich möchte eine Mehrzieloptimierung bzgl. zwei konkurierender Ziele durchführen. Sodass ich mehrere Paretomengen auf einer Paretofront und die jeweils dazu gehörenden Parameter erhalte.
Ich habe eine Funktion welche einen Vektor als Eingang und einen als Ausgang hat. Der Funktionsaufruf und die dahintersteckende Simulation laufen problemlos.

Funktion:
Code:
%% fun
function F = fun(d_sky)

    setup;
   
    % Einstellungen der Simulation
    simoptions = simset('DstWorkspace','current','SrcWorkspace','current');
 
   % Simulation Starten
   sim('LinMod',[0 timeint], simoptions);
   
   F(1)=energy.signals.values; % erster Eintrag im Vektor F
   F(2)=discomfort.signals.values; % zweiter Eintrag im Vektor F
   
end



Es gibt ja von Matlab unterschiedliche Methoden für die Optimierung. Für mein Problem denke ich das 'fmincom' der richtige Weg ist.

Außerdem gibt es ja für eine Mehrzieloptimierung mehrer Ansätze wie man an die Paretomengen bzw. Paretofronten kommt. Zum Beispiel gibt es ja die "Normal-Boundary Intersection" kurz NBI. Mit der Methode soll es Möglich sein gleichmäßig verteilte Paretomengen auf einer Front zu erhalten.

Meine Frage: Wie bringe ich das 'fmincom' und die 'NBI' zusammen? Implementiere ich die 'NBI' als Nebenbedingung? Oder muss ich eine neue Funktion schreiben in welche ich bereits die NBI-Methode mit reinschreibe und diese dann hinterher erst mit 'fmincon' minimiere?

In der Hilfe wird ja 'fmincom' folgendermaßen beschrieben aber ich krieg es leider nicht auf die Reihe meine Bedingungen in die Form zu bringen die ich brauche.

Code:
[x, fval, exitflag] = fmincon(@fun, x0, A, b, Aeq, beq, lb, ub, nonlcon, options);
                           
    x0 = [5000 5000 200]; % Startpunkt von d_sky
    A = [];
    b = [];
    Aeq = [];
    beq =  [];
    lb = [0 0 0];
    ub = [6000 6000 1000];
    nonlocon = [];
    options = optimset('solver','interior-point');


Ich hoffe ich konnte mein Problem einigermaßen begreiflich machen und ihr könnt mir bei der Sache helfen.

Gruß,
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


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

fmincon ist für eine skalare Zielfunktion gedacht.

Ich würde entweder die Zielfunktionen zu einer skalaren Zielfunktion kombinieren (F = lambda1*F1 + lambda2*F2) oder gamultiobj verwenden.

Natürlich kann man auch mit diesem NBI etwas um fmincon herum programmieren. Dazu müsste man als allererstes wissen, was da genau gemacht werden soll.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 35
Anmeldedatum: 22.10.12
Wohnort: ---
Version: 2014a
     Beitrag Verfasst am: 13.11.2012, 19:12     Titel:
  Antworten mit Zitat      
Hallo Harald,
danke für die schnelle Antwort. 'gamultiobj' hab ich mir noch garnicht angeschaut, da es nicht bei den optimierungsalgorithmen stand. Hast du schonmal mit diesem Algorithmus gearbeitet?

ich hätte das jetzt folgendermaßen begonnen
Code:

%% optimization_gamultiobj

d_sky = [5000 5000 200];
options = gaoptimset('PlotFcns',{@gaplotpareto,@gaplotscorediversity});

[X,FVAL,EXITFLAG] = gamultiobj(@fun,3,[],[],[],[],[0 0 0],[6000 6000 1000], options);
 



Zu 'fmincom': An welcher Stelle wird eine Kombination eingetragen?

Was gemacht werden soll:
Eine Mehrzieloptimierung bezügliche zweier Ziele. Bei welcher der Regelparameter d_sky[x, y, phi] verändert werden soll. Es es sollen ca. 20 Paretomengen berechnet werden, sodass eine schöne Paretofront herauskommt.
Da aber mehrere Optimierungen mit jeweils unterschiedlicher Anregung gerechnet und später miteinander verglichen werden sollen. Muss eine gleichmäßige, bekannte und wiederholbare Verteilung der Punkte auf den Fronten passieren. Sodass später, die jeweils zusammengehörenden Punkte der einzelnen Paretofronten und die Fronten als ganzen verglichen werden können.

Jetzt geht es darum erstmal eine Optimierung mit bekannter Verteilung der Punkte ans laufen zu bekommen.

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

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 13.11.2012, 19:36     Titel:
  Antworten mit Zitat      
Hallo,

die Kombination könntest du am Ende der Zielfunktion eintragen. Natürlich müsstest du das Verhältnis der Gewichte lambda_i variieren, um unterschiedliche optimale Punkte zu bekommen.

Alternativ: ein Ziel minimieren unter der Nebenbedingung, dass das andere Ziel einen Schwellwert nicht überschreiten darf.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 35
Anmeldedatum: 22.10.12
Wohnort: ---
Version: 2014a
     Beitrag Verfasst am: 13.11.2012, 21:05     Titel:
  Antworten mit Zitat      
Hallo,
wie sieht es denn mit dem 'gamultiobj' aus. Haben Sie da Erfahrungen mit? Welche der beiden Möglichkeiten wäre denn die Elegantere, ihrer Meinung nach?

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

Forum-Meister


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

relativ wenig. Ich würde es jedoch für diese Problemart damit versuchen.

Insgesamt würde ich mehrere Ansätze versuchen und sehen, was die besten Ergebnisse liefert.

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