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

Maximierungsproblem

 

Johnny5555

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.12.2011, 23:12     Titel: Maximierungsproblem
  Antworten mit Zitat      
Hi!

Bin ziemlicher Neuling beim Optimieren mit Matlab. Hab aber bis jetzt noch keine wirklich aufschlussreichen Tutorials zum Thema gefunden, deshalb muss ich euch belästigen... Wink

Im Prinzip ist mein Problem relativ simpel. Ich möchte eine stinknormale Gewinnmaximierung durchführen. Dafür habe ich eine Art "reduzierte Kosten"-Vektor.

Beispiel:
Code:
A = [0 -2 -6 -3 0 0 -2 -5]


heißt in dem Beispiel die Elemente < 0 des Vektors A sind "potentielle Kunden" des Produktes. Gehen wir davon aus, dass in diesem Moment der Preis des Produktes noch 0 Geldeinheiten beträgt. Erhöhe ich jetzt beispielsweise den Preis um 2 Geldeinheiten würden 2 Kunden das Produkt nicht mehr kaufen. Da der Vektor A jetzt wie folgt aussehen würde:

Code:
A = [2 0 -4 -1 2 2 0 -3]


Ich habe jetzt also nur noch 3 anstatt 5 potentielle Kunden.
Hier hat sich nun logischerweise der Gewinn vom Unternehmen gesteigert, denn vorher war bei einem Preis von 0 Geldheiten der Gewinn:

0*5 = 0

und danach mit einem Preis von 2 Geldeinheiten:

2*3 = 6

Also in der Theorie ganz logisch ... bloß leider bekomme ich dieses einfache Problem nicht in Matlab umgesetzt Sad Hat vielleicht jemand einen kleinen Tipp oder einen guten Link für mich Smile


MfG
Johnny


Harald
Forum-Meister

Forum-Meister


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

interessantes Problem Smile

Bei Optimierungsproblemen musst du zunächst die Zielfunktion aufstellen.

Wenn ich dich richtig verstehe, wäre eine mögliche Formulierung in MATLAB: maximiere

Code:
nnz(A + x < 0) * x


Eine Visualisierung des Problems inkl. "Brute Force"-Lösung wäre also
Code:
A = [0 -2 -6 -3 0 0 -2 -5];
x = 0:0.1:6;
Gewinn = zeros(size(x));
for I = 1:length(x)
    Gewinn(I) = nnz(A + x(I) < 0) * x(I);
end
stem(x, Gewinn)
[maxG, ind] = max(Gewinn);
hold on
plot(x(ind), maxG, 'r*')
hold off
disp(['Maximaler Gewinn: ', num2str(maxG, '%.2f'),...
    ' bei Preis ' num2str(x(ind), '%.2f')])
 


Wenn du das als Minimierungsproblem mit der Optimization Toolbox umsetzen willst, musst du aufpassen, da:
- dieses Problem unstetig ist und die meisten Algorithmen auf der Annahme beruhen, dass die Zielfunktion stetig und differenzierbar ist.
- du den Produktpreis wahrscheinlich nicht kontinuierlich variieren kannst, sondern nur in Schritten von 0.01

Nun ist es eine Frage, wie lang dein echter Vektor A ist. Ich habe mal damit rumgespielt und bekomme selbst bei 1 Million Kunden noch innerhalb von < 1,5 Sekunden ein Ergebnis.

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.12.2011, 10:46     Titel:
  Antworten mit Zitat      
Guten Morgen Harald!

Danke für diese elegante Lösung! Hatte jetzt schon angefangen mich in die Optimization Toolbox einzulesen. Aber wie du schon erwähnt hattest, war dort auch meine Befürchtung, dass eventuell kein passender Solver zur Verfügung stehen würde.

Aber mit dieser Lösung ja völling unnötig sich Sorgen zu machen Smile
Klappt wirklich wunderbar und ist ziemlich flott! Die Länge meines eigentlichen Vektors ist 10000. Da gibt es keine Probleme.

Nochmals vielen Dank!

MfG
Johnny
 
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.