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

Optimization Toolbox - Welcher Algorithmus

 

herkules

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.09.2012, 09:34     Titel: Optimization Toolbox - Welcher Algorithmus
  Antworten mit Zitat      
Moin zusammen,

ich habe eine lineares Optimierungsproblem vorliegen. Dieses liest sich wie folgt:

Code:

% Problem
f(x) = a * ( b + x ) - c
 


dabei ist a eine Matrix der Größe (18,1Cool, 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

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 26.09.2012, 22:13     Titel:
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen
 
herkules

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.09.2012, 09:53     Titel:
  Antworten mit Zitat      
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

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 27.09.2012, 10:01     Titel:
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen
 
herkules

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.09.2012, 10:41     Titel:
  Antworten mit Zitat      
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

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 27.09.2012, 11:39     Titel:
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen
 
herkules

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.09.2012, 13:55     Titel:
  Antworten mit Zitat      
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:

Code:

f(x) = x1*a1 + x2*a2 + ... + xn*an - b      % alles Skalare
 


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

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 27.09.2012, 15:11     Titel:
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen
 
herkules

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.10.2012, 10:00     Titel:
  Antworten mit Zitat      
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

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 04.10.2012, 10:48     Titel:
  Antworten mit Zitat      
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
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 - 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.