|
|
Optimization Toolbox - Welcher Algorithmus |
|
herkules |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 26.09.2012, 09:34
Titel: Optimization Toolbox - Welcher Algorithmus
|
|
Moin zusammen,
ich habe eine lineares Optimierungsproblem vorliegen. Dieses liest sich wie folgt:
dabei ist a eine Matrix der Größe (18,1, b und c sind Vektor mit dem Format (18,1) und x ist ebenfalls ein Vektor (18,1).
Nun soll x1 bis x18 so gewählt werden, dass f(x) minimal, aber nicht negativ wird. Dabei darf die Summe von x einen bestimmten Wert nicht überschreiten. Prinziepiell müsste das ja über linprog funktionieren oder?
Wie gehe ich allerdings vor, wenn ich das Problem über mehrere hundert Zeitpunkte optimieren möchte, in denen jeweils ein anderer Vektor b vorliegt? Geht sowas? Im Moment steh ich auf dem Schlauch.
Besten Dank schon mal
|
|
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 26.09.2012, 22:13
Titel:
|
|
Hallo,
wenn ich das richtig sehe, kommt bei f(x) so doch immer ein Vektor heraus?
Für linprog müsste es aber ein Skalar sein.
Das "nicht-negativ" werden kannst du als Nebenbedingungen angeben.
Wenn b sich ändert, muss neu optimiert werden. Wenn die Änderungen "klein" sind, kann es natürlich sinnvoll sein, die jeweils vorherige Lösung als Startwert zu wählen.
Grüße,
Harald
|
|
|
herkules |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 27.09.2012, 09:53
Titel:
|
|
Hallo nochmal,
das heisst dann wohl, dass ich mein Problem so lange umformulieren muss bis es mit einem der Matlab Minimierungs-Funktionen lösbar wird.
Gibt es denn kein Algorithmus, der in der Lage ist über mehrere Zeitpunkte zu optimieren? Ansonsten werde ich auch hier so umformulieren müssen, dass Matlab das hinbekommt.
Die Global Optimization Toolbox hilft mir da wohl auch nicht weiter oder?
Na dann schau ich mir das mathematische Handwerkszeug noch mal an und versuche mal mein Problem neu zu formulieren.
Grüße
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 27.09.2012, 10:01
Titel:
|
|
Hallo,
die Umformulierung für lsqlin sollte nun kein Problem sein:
f(x) = a*x - (c-a*b)
In der Notation von lsqlin ist also:
C = a
d = c-a*b
Äquivalent für die Ungleichungsnebenbedingungen.
Für das Durchlaufen der Zeitschritte eine for-Schleife, und das war's schon.
Grüße,
Harald
|
|
|
herkules |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 27.09.2012, 10:41
Titel:
|
|
Moin Harald,
besten Dank für den Hinweis auf lsqlin.
Wenn ich die Zeitpunkte über eine for Schleife in die Optimierung gebe erhalte ich doch das Optimum für jeden Zeitpunkt. Ich möchte aber das Optimum für alle Zeitpunkte erhalten. Die Frage ist also wie x gewählt werden muss, um über die Gesamtheit aller Zeitpunkte ideal zu sein.
Das erschließt sich mir noch nicht so ganz.
Dennoch vielen Dank so weit.
Gruß
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 27.09.2012, 11:39
Titel:
|
|
Hallo,
das ist dann natürlich eine andere Problemstellung, zumindest anders als ich das verstanden hatte.
Dann musst du deine Zielfunktion entsprechend aufstellen, und das auf einen Schlag optimieren. Sollte sich aber auch machen lassen.
Grüße,
Harald
|
|
|
herkules |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 27.09.2012, 13:55
Titel:
|
|
Hallo again,
ich hab das Problem nun doch zu einem Linearen umformen können, sodass linprog damit umgehen können sollte. Es hat nun die Form:
Die Faktoren a1 bis an sind nicht von x abhängig und können einfach berechnet werden. Womit die übergabe an linprog möglich ist. x1 bis xn soll nun so gewählt werden, dass f(x) minimal aber nicht negativ wird. Sollte Matlab alles hinbekommen. Aber wie habe ich die Konstante b zu berücksichtigen? Da steh ich mal wieder neben mir...
Es gibt noch lineare Nebenbedingungen, mit denen komme ich aber klar.
Da sich die a's und das b für jeden Zeitpunkt ergeben, kann ich das Problem auch über mehrere Zeitpunkte auf einen Schlag optimieren. Nur was mach ich mit b?
Wahrscheinlich wieder ein äußerst triviales Problem - ich mach das zum ersten Mal.
Vielen Dank für die Hilfe.
Gruß
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 27.09.2012, 15:11
Titel:
|
|
Hallo,
was die Zielfunktion angeht, kannst du b weglassen. Das ändert ja nichts daran, wo das Minimum ist.
Das "nicht negativ werden" musst du wie gesagt als Nebenbedingung implementieren - und dabei b natürlich berücksichtigen.
Grüße,
Harald
|
|
|
herkules |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 04.10.2012, 10:00
Titel:
|
|
Hallo Harald,
hab da noch eine weitere Frage in Bezug auf meine Optimierung. Mir ist es zwar gelungen meine Daten so umzuformen, dass linprog damit umgehen kann und mir unter meinen Nebenbedingungen auch Ergebnisse ausspuckt, nur habe ich nun ein Vorzeichen-Problem:
Die Faktoren a1 bis an können positiv oder negativ sein, darauf habe ich keinen Einfluss. Das heisst linprog macht die gesuchten x da besonders groß, wo der zugehörige Faktor negativ ist, um die Zielfunktion zu minimieren. Genau das soll aber nicht passieren.
Mir fällt da nur der Befehl abs( ) ein, aber ich wüsste nicht, wie ich den in die Nebenbedingungen integrieren kann.
Hast du einen Vorschlag?
Gruß
herkules
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 04.10.2012, 10:48
Titel:
|
|
Hallo,
Zitat: |
Das heisst linprog macht die gesuchten x da besonders groß, wo der zugehörige Faktor negativ ist, um die Zielfunktion zu minimieren. |
Das ist im Rahmen der Nebenbedingungen ja auch sinnvoll.
Zitat: |
Genau das soll aber nicht passieren. |
Warum nicht?
Zitat: |
Hast du einen Vorschlag? |
Nicht nur einen, sondern mehrere:
- überprüfen, ob negative Koeffizienten sinnvoll sind. Anders gesagt: ist es sinnvoll, dass höhere x-Werte zu niedrigerer Zielfunktion führen? Ggf. muss die Problemformulierung überprüft werden.
- zusätzliche Nebenbedingungen, z.B.
* Variablen dürfen bestimmte Werte nicht überschreiten --> upper bound
* Variablen dürfen im Vergleich zu den anderen nicht zu groß sein --> lineare Nebenbedingung
Was hier sinnvoll ist, hängt sehr von deiner konkreten Anwendung ab.
Grüße,
Harald
|
|
|
|
|
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 - 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.
|
|