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 = [1001101001]
x = fmincon(@myfun,x0,[],[],[],[],lb,ub,@nonlcon)
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
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
Verschoben: 06.08.2009, 15:43 Uhr von Bijick Von Programmierung nach Toolboxen
hubos
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 10.08.2009, 17:04
Titel:
hallo Bijick,
vielen Dank für die schnelle Antwort! und entschuldige meine späte
ich denke, du hast den thread richtigerweise in ein anderes forum gestellt. das hab ich heute erst bemerkt...
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
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
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.