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

Optimierungsproblem (Alternativ für Excel Solver)

 

SM6789
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 29
Anmeldedatum: 30.05.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.08.2017, 12:52     Titel:
  Antworten mit Zitat      
Hallo Harald.

Wie ich am Anfang schon erwähnt habe dient dieses Modell zur Preisoptimierung. Da die Preise sich alle 15 Minuten ändern hat ein Jahr 35040 Preise. Das heißt auch gleichzeitig doppelt so viele Variable. Ich habe nun erst mit 1.000 Preisen versucht und das klappt wunderbar. Der nächste Schritt mit 10.000 hat leider nicht geklappt.

Der Plan für die Jahresberechnung ist nun in 4-Wochen Schritten, also 2880 Einheiten zu berechnen. Mit 2880 klappt es auch wunderbar. Ich werde also immer 28+2 Tage berechnen. Und im nächsten Schritt beim 29. Tag beginnen.

Meine Frage lautet nun wie kann ich manuell den aktuellen Füllstand, der in dem Modell immer bei 0 beginnt, manuell eingeben bei der 2. Berechnung? Es kann ja sein, dass mein Füllstand am Ende der 1. Berechnung (also bei Tag 2Cool nicht 0 ist.

Code:

M1 = zeros(2880, 5760);
M1(1, 1:2) = [0.5, -1];
for k = 2:2880
    M1(k, :) = M1(k-1, :);
    M1(k, 2*k-1:2*k) = [0.5,-1];
end
 


Meine zweite Frage. Die Preise sind ja bei Excel aufgelistet. In dem Fall habe ich nur 2880 geladen. Gibt es eine Möglichkeit, dass ich alle 35040 Preise in Matlab lade und den Befehl gebe, dass Matlab immer 28+2 berechnet und sich den Füllstand merkt und dann die nächsten 28+2 durchberechnet. Das hört sich sehr kompliziert und aufwendig an. Ich hoffe ich konnte mich richtig ausdrücken. Vielen Dank nochmals für deine Mühe.
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 02.08.2017, 14:56     Titel:
  Antworten mit Zitat      
Hallo,

zur ersten Frage: dazu musst du die rechte Seite der ersten Gleichung anpassen, also den ersten Eintrag von b1 bzw. b2.

Zur 2. Frage: dazu musst du eine for-Schleife programmieren, etwa so:

Code:
for p = 1:n
currentRange = (p-1)*28 + 1 : p*28 + 2;

% nur die Daten zu currentRange analysieren

end


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

Forum-Anfänger

Forum-Anfänger


Beiträge: 29
Anmeldedatum: 30.05.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.08.2017, 12:37     Titel:
  Antworten mit Zitat      
Harald hat Folgendes geschrieben:
Hallo,

zur ersten Frage: dazu musst du die rechte Seite der ersten Gleichung anpassen, also den ersten Eintrag von b1 bzw. b2.


So funktioniert es nicht. Mein b1 und b2 sind ja die Grenzen für den Füllstand. Wenn der zu dem Anfangszeitpunkt 2 ist könnte ich theoretisch den ersten Wert von b1 und b2 als 2 definieren. Der erste Wert ist aber der Füllstand nach den ersten 15 Minuten und nicht der Anfangswert. Rolling Eyes


Harald hat Folgendes geschrieben:
Hallo,

Zur 2. Frage: dazu musst du eine for-Schleife programmieren, etwa so:

Code:
for p = 1:n
currentRange = (p-1)*28 + 1 : p*28 + 2;

% nur die Daten zu currentRange analysieren

end




Nun dazu. Hab versucht das Beispiel für mein Modell anzuwenden. So sieht das ganze aus. Habe ich das Beispiel richtig verstanden und umgeschrieben? Wo muss die Schleife denn platziert werden?

Da ich die komplette Preisliste eingelesen habe, bekomme ich wieder die Fehlermeldung, dass mein A (also die Anzahl der Preise) größer ist als die Nebenbedingungen. Muss ich nun alles auf 35040 anpassen?

Code:

for p=1:n   %n=35040

currentRange = (p-1)*2688+96 : p*2688 + 192;

%28 Tage * 24h *4 = 2688 & 1 Tag hat 96 Preise

end

 
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

ich kenne das Modell nicht genau genug um zu sagen, ob das funktionieren würde:
wenn du eigentlich einen Stand zwischen 0 und 4 haben willst, anfangs aber 2 drin sind, dann könntest du sagen, dass du einen Stand zwischen -2 und 2 haben willst. Zusammen mit den anfangs vorhandenen 2 kommst du dann auf die richtigen Werte.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 29
Anmeldedatum: 30.05.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.08.2017, 16:13     Titel:
  Antworten mit Zitat      
Hallo,

theoretisch hast du Recht. Der Füllstand war zuletzt 1, also habe ich als b1 3 und als b2 -1 eingesetzt. Erhalte aber diese Fehlermeldung am Ende:

No feasible solution found.
Intlinprog stopped because no point satisfies the constraints.


Wie ist dann mit der Schleife wenn ich es hinbekommen würde? Übernimmt er dann den Füllstand automatisch?

[EDITED, Jan, Bitte kein Quoting der gesamten vorherigen Nachricht - Danke!]
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 17.08.2017, 16:39     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
No feasible solution found.
Intlinprog stopped because no point satisfies the constraints.

Wie soll ich dir damit nun weiterhelfen?

Zitat:
Übernimmt er dann den Füllstand automatisch?

"Er" macht genau das, was du "ihm" vorgibst.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 29
Anmeldedatum: 30.05.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.09.2017, 13:19     Titel:
  Antworten mit Zitat      
Sorry, dass immer so viel Zeit dazwischen vergeht. Aber ich arbeite an der Aufgabe nur nebenbei. Nochmal damit meine Frage verständlicher wird. Die Idee mit meine b-Vektoren zu ändern ist echt sinnvoll und müsste auch eigentlich genauso klappen. Wie gesagt erhalte ich die Fehlermeldung oben. Habe nun versucht die Vorzeichen bei M1 und M2 zu tauschen, sprich -0.5 und 1. Bei einigen Versuchen habe ich auch Ergebnisse bekommen, aber so dass -1 und -4 die Grenzen werden.

Meine Frage nun. Muss ich meine M´s komplett erneuern? Vielleicht siehst du ja etwas was ich als Laie nicht direkt sehe.

Code:



% M1 für kleiner 4 klappt so, M1 wird nun für kleiner 3 verwendet

M1 = zeros(2880, 5760);
M1(1, 1:2) = [0.5, -1];
for k = 2:2880
    M1(k, :) = M1(k-1, :);
    M1(k, 2*k-1:2*k) = [0.5,-1];
end


% M2 für größer 0 klappt so, M2 wird nun für größer -1 verwendet


M2 = zeros(2880, 5760);
M2(1, 1:2) = [-0.5, 1];
for k = 2:2880
    M2(k, :) = M2(k-1, :);
    M2(k, 2*k-1:2*k) = [-0.5, 1];
end

M=[M1;M2];

b1= Vektor mit 2880 4en, nun mit 3en
b2= Vektor mit 2880 0en, nun mit -1


 
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 05.09.2017, 16:30     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Wie gesagt erhalte ich die Fehlermeldung oben.

... und dabei könnte ich dir bestenfalls helfen, wenn ich den kompletten Code inkl. Daten zur Verfügung hätte - und vielleicht nicht mal dann.

Zitat:
Habe nun versucht die Vorzeichen bei M1 und M2 zu tauschen, sprich -0.5 und 1. Bei einigen Versuchen habe ich auch Ergebnisse bekommen, aber so dass -1 und -4 die Grenzen werden.

Das ist zu erwarten, weil dann die Richtung der Ungleichung und das Vorzeichen der Grenzen vertauscht werden.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 29
Anmeldedatum: 30.05.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.09.2017, 13:56     Titel:
  Antworten mit Zitat      
Harald hat Folgendes geschrieben:
Hallo,
... und dabei könnte ich dir bestenfalls helfen, wenn ich den kompletten Code inkl. Daten zur Verfügung hätte - und vielleicht nicht mal dann.


Habe dir per PN alles zugeschickt, damit das ganze verständlicher wird. Vielen Dank nochmal.
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite Zurück  1, 2, 3, 4

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.