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

Speicherfüllstand regeln

 

funk0r
Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 21.08.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.08.2012, 14:24     Titel: Speicherfüllstand regeln
  Antworten mit Zitat      
Hallo zusammen,

nach etlichen Versuchen, hoffe ich, dass ihr mir weiterhelfen könnt. Keine Angst, ich erwarte nicht, dass ihr mir alles vorkaut, aber vielleicht habt ihr eine viel bessere Herangehensweise als ich. Mein Problem:

Ich habe einen Speicher und eine Preisliste (für jede Stunde). Der Speicher entlädt sich kontinuierlich. Bevor der Speicher leer ist, muss ich ihn füllen. Dies kostet Geld (in Preisliste ersichtlich). Ich will den Speicher so kostengünstig wie möglich füllen.

Meine Herangehensweise:
- berechnen, wie lange der Speicher noch hält
- innerhalb dieser Zeit den günstigsten Preis finden
- zu diesem Preis Speicher füllen

Das Schwierige daran:
Angenommen der Speicher reicht noch 50 Stunden. Innerhalb dieser 50 Stunden ist der Preis bei Stunde 40 am niedrigsten. Jedoch ist der Preis bei Stunde 60 noch günstiger. Ich fülle den Speicher mit dem Preis von Stunde 40 also nur so voll, dass er bis Stunde 60 reicht.


Könnt ihr mich in eine Richtung schubsen, was ein guter Ansatz wäre?
Habe es mit dutzenden for-Schleifen und if-Bedingungen probiert. Habe die Befehle sort und find probiert... es klappt nicht Sad

Vielen Dank schon mal.
Private Nachricht senden Benutzer-Profile anzeigen


funk0r
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 21.08.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.08.2012, 17:06     Titel:
  Antworten mit Zitat      
Hier schon mal ein Vorschlag von mir, der noch an einigen Stellen hakt:

Code:

preis = rand(1,200);

ely_max = 20;          

entladewert = 5;                      %konstanter Entladewert
deload = zeros(1,8760);                
for h=1:8760
    deload(h)=entladewert;
end

speicher = zeros(1,8760);            
speicher_max_energie = 1000;       %Maxwert Speicher
zwischen  = 100;                       %Startfüllstand Speicher
kosten = zeros(1,8760);
restkap = zeros(1,8760);
reichweite = zeros(1,8760);

minpreis_alt = 0;
minpreis = 1;
pos_minpreis = 1;
next_minpreis_alt = 0;
next_minpreis = 1;

for x = 1:length(preis)
    speicher(x) = zwischen;
   
% Entladen
    speicher(x) = speicher(x) - deload(x);
    reichweite(x)= floor (speicher(x) /deload(x));  %Wie weit reicht mein Speicher?
   
% Suche nach niedrigstem Preis innerhalb Reichweite
    if x + reichweite(x) < length(speicher)
        if x > 1
            if minpreis_alt < minpreis
                [minpreis pos_minpreis] = min(preis(x : x + reichweite(x)-1));
                pos_minpreis = pos_minpreis+x-1;
                pos_minpreis2 = find(preis==minpreis);  %alternativ
                disp(sprintf('%d. First Wert: %f, Position: %d %d',x-1,minpreis,pos_minpreis,pos_minpreis2));
                minpreis_alt = minpreis;
            end
        end
    end

% Gibt es irgendwann günstigeren Preis?

        if x > pos_minpreis
            if next_minpreis_alt < next_minpreis
                [next_minpreis pos_next_minpreis] = min(preis(x + reichweite(x)-1 : end));
                pos_next_minpreis = find(preis==next_minpreis);
                disp(sprintf('%d. Next Wert: %f, Position: %d',x,next_minpreis,pos_next_minpreis));
                next_minpreis = next_minpreis_alt;
            end
        end

% Speicher füllen
if x > 1
    speicher(pos_minpreis) = speicher(pos_minpreis) + ely_max;
end
plot(speicher, 'r');
zwischen = speicher(x);
end
 


Mit dieser Variante habe ich 2 Probleme:
1. im Abschnitt, wo der nächstgünstigere Preis gefunden wird, wird der Index nicht richtig bestimmt. Ich habe mir anderweitig beholfen und suche den richtigen Index mit
Code:
pos_next_minpreis = find(preis==next_minpreis)

Ist nur blöd, falls es einen Preis 2 mal gibt...

2. die "intelligente" Speicherfüllung fehlt noch, sprich, dass er den Speicher zu einem günstigen Zeitpunkt nur so weit füllt, dass es bis zu einem (ggf.) noch günstigeren Zeitpunkt reicht.
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 - 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.