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

fmincon - nebenbedingung korrekt wählen

 

hubos

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.08.2009, 12:22     Titel: fmincon - nebenbedingung korrekt wählen
  Antworten mit Zitat      
hallo zusammen,

in der Matlabhilfe und hier im forum bin ich noch nicht fündig geworden. daher mal ein eigener thread.

mein problem:
ich versuche eine funktion f(x) zu optimieren mithilfe der fmincon funktion. das x ist ein 1-dimensionaler vektor aus n elementen.
nebenbedingung: die elemente sind natürliche zahlen und dürfen nur den wert 0 oder 1 annehmen.

nun zur frage:
wie kann ich fmincon die nebenbedingung übergeben?
ich könnte zwar in einer funktion @nonlcon jedes element von x auf 0 oder 1 prüfen, aber das ist wohl sehr ineffizient, da fmincon für die werte für x wohl auch reelle zahlen nimmt.

Code:

x0 = [1 0 0 1 1 0 1 0 0 1]
x = fmincon(@myfun,x0,[],[],[],[],lb,ub,@nonlcon)
 


vielen dank schon mal,
hubos[/code]


Bijick
Ehrenmitglied

Ehrenmitglied



Beiträge: 914
Anmeldedatum: 18.06.07
Wohnort: Nürnberg
Version: R2006b, R2008b
     Beitrag Verfasst am: 06.08.2009, 16:42     Titel:
  Antworten mit Zitat      
Hallo hubos,

du kennst wahrscheinlich die Funktion bintprog, kannst sie aber nicht nehmen, weil Du noch andere nichtlineare Nebenbedingungen hast oder f nichtlinear ist? In dem Fall formuliert man klassischerweise die Nebenbedingung

Code:
[c,ceq] = function nonlcon(x)

c = [];
ceq = x.^2 - x;


Natürlich zusätzlich zu den anderen NB. Nur für die Zahlen 0 und 1 gilt, dass sie gleich ihrem Quadrat sind. Leichte Abweichungen von diesen Nebenbedingungen sind durch das SQP-Verfahren innerhalb von fmincon allerdings möglich.

Wenn Du mit den Ergebnissen unzufrieden bist, ist eventuell diese Toolbox aus dem File Exchange etwas für Dich. Ich hab's aber selber nicht getestet.

Herzliche Grüße
Bijick
_________________

>> why
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
Verschoben: 06.08.2009, 16:43 Uhr von Bijick
Von Programmierung nach Toolboxen
 
hubos

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.08.2009, 18:04     Titel:
  Antworten mit Zitat      
hallo Bijick,

vielen Dank für die schnelle Antwort! und entschuldige meine späte Smile
ich denke, du hast den thread richtigerweise in ein anderes forum gestellt. das hab ich heute erst bemerkt...

pinzipiell funktioniert es mit deinem vorschlag:
Code:
ceq = x.^2 - x;


fmincon läuft jetzt zumindest mal durch. nur optimiert wird noch nix...der funktionswert für f(x) bleibt gerade bei jeder iteration der selbe.

ich denke, dass fmincon probleme hat für x nur 0 und 1 zu wählen. ich habe versucht über die schrittweite 'DiffMaxChange' und 'DiffMinChange':

Code:
options = optimset('TolX',1,'TolFun',1e-4,'TolCon',1e-6,'Display','iter');
            options = optimset(options,'MaxFunEvals',10000,'DiffMaxChange',1,'DiffMinChange',0);


ihm das beizubringen. geht leider noch nicht...

werd mir auch mal die toolbox anschauen.

schönen abend noch!
hubos
 
Bijick
Ehrenmitglied

Ehrenmitglied



Beiträge: 914
Anmeldedatum: 18.06.07
Wohnort: Nürnberg
Version: R2006b, R2008b
     Beitrag Verfasst am: 13.08.2009, 14:24     Titel:
  Antworten mit Zitat      
Hallo hubos,

ja, Du hast Recht: Da fmincon für kontinuierliche Probleme gedacht ist, funktioniert diese Nebenbedingung nicht besonders gut. Diffmaxchange = 1 ist aber auch keine gute Idee, da ja auch in mehreren Variablen gleichzeitig der Wert geändert werden darf. Die Schrittweite (euklidischer Abstand der vektoren) wäre dann größer als 1. Vielleicht wäre aber DiffMinChange=1 eine Möglichkeit. Dann würde fmincon nämlich nicht ganz stehenbleiben. Habe ich aber praktisch auch noch nicht getestet.

Herzliche Grüße
Bijick
_________________

>> why
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
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.