Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1536to1540
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Optimierung von Motorlaufzeiten

Optimierung von Motorlaufzeiten
04.02.2017 11:33:58
Motorlaufzeiten
Hallo Zusammen,
ich bin mal wieder auf eure Hilfe angewiesen!
Ich habe das folgende Problem welches ich auch schon versucht habe mit dem Solver zu lösen. Mal abgesehen von der Problematik alle Nebenbedingungen in den Solver zu hacken weiß ich nicht ob es mit diesem überhaupt geht. VBA scheint ev. die bessere alternative.
Das Problem:
ich versuche die Laufzeit eines Motors so zu optimieren, dass der Ertrag über einen Monat, später über ein Jahr optimiert wird.
Dabei soll bestimmt werden ob der Motor in der jeweiligen Stunde laufen soll oder nicht unter der Nebenbedingung eines begrenzten Speichervolumens, welches nach Möglichkeit nicht "überlaufen" soll.
Ich habe hier einmal die Datei hochgeladen:
https://www.herber.de/bbs/user/111176.xlsx
geht das überhaupt oder bringe ich damit meinen Prozessor zum schmelzen?
Vielen Dank für eure Hilfe!
Daniel
Geht das überhaupt

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Optimierung von Motorlaufzeiten
04.02.2017 12:12:10
Motorlaufzeiten
Hi Daniel,
sind folgende Vermutungen richtig?
A: Das Gas "kommt immer", so daß der Motor spätestens dann eine Stunde laufen muß, wenn der Gasspeicher (zu) voll zu werden droht?
B: Gedanklich soll der Gasspeicher vor Beginn des teureren Stroms max. gefüllt sein, damit die Kiste dann möglichst lange durchlaufen kann?
C: Die Gasproduktion ist immer gleich teuer?
D: Die Spalte F wird nur mit 1 oder 0 versehen?
Gruß,
Michael
AW: Optimierung von Motorlaufzeiten
04.02.2017 18:36:18
Motorlaufzeiten
Hallo Michael,
alle deine Vermutungen sind korrekt! :)
Gruß,
Daniel
AW: Optimierung von Motorlaufzeiten
05.02.2017 18:22:24
Motorlaufzeiten
Hi Daniel,
jetzt hatte ich lang und breit erklärt, wie die Datei funktioniert und der Upload läßt mich nicht mehr zum Text zurück - sehr ärgerlich!
Die Datei: https://www.herber.de/bbs/user/111223.xlsm
Also nochmal, aber jetzt leider weniger ausführlich:
Bitte erst mal ansehen:
1. neue Spalte H mit Wert zu Beginn der Stunde/des Zyklus (Ende in K)
2. weitere Nebenbedingungen in U18 und U19, die wiederum in den Spalten N, O und P verrechnet werden:
O beinhaltet die max. am Stück verfügbare Motorlaufzeit
P enthält 1, wenn der Motor in diesem Zyklus angeworfen werden muß
3. Zellen U18, K20, H21 mit mehr Nachkommastellen dargestellt; bitte mit N22 vergleichen und Kästchen ab T22 lesen.
4. L1 enthält die Summe der Erträge (alles verformelt bis 30.1.)
Dann Button "Zufallszahlen" Testen:
1. H wird mit zufälligen 0 und 1 gefüllt
2. H wird nach Mindestbedingungen geändert:
- Wenn H=1 und O=0: H=0 (zu wenig Gas für 1 Stunde Laufzeit)
- Wenn H=0 und P=1: H=1 (Maschine an, sonst würde Gas Stor zu voll werden)
3. Das Maximum aus T30:Tx (in U29) wird "gemerkt"
4. Die Summe aus L1 wird in die nächste freie Zelle unter T30 geschrieben
5. Falls das neue Maximum größer ist als das gemerkte, wird die Spalte H ins 2. Tabellenblatt kopiert
Das kann man 10, 20 mal machen (oder in eine Schleife stecken und z.B. 100 mal ausführen lassen).
Bei meinen Tests kamen Werte von jeweils über 18.200 und 18.600 raus.
Hier kann man sich dann überlegen, ob man eine "echte" Optimierung "bei Null" oder mit den "Monte Carlo Werten" aufsetzt - oder man nimmt letztere, d.h. kopiert Spalte H aus dem 2. ins 1. Blatt zurück.
Das alles ist eine "logische Studie" und nicht optimiert: ein screenupdating=false wird schon eine Beschleunigung bringen, richtig gut würde es mit "Arrays" werden, aber dann müßte man alle Formeln des Blattes in VBA nachbilden.
Schöne Grüße,
Michael
Anzeige
AW: Optimierung von Motorlaufzeiten
05.02.2017 23:24:35
Motorlaufzeiten
Hallo Michael,
erst einmal vielen dank für deinen Mühen!!
Wenn du sagst alle Formeln nachbauen, meinst du damit all? oder alle einmal und dann mit schleifen durchlaufen und die werte in ein Array schreiben?
viele Grüße,
Daniel
zeilenweise
06.02.2017 13:49:11
Michael
Hi Daniel,
hier mal mit Array:

Die Datei https://www.herber.de/bbs/user/111243.xlsm wurde aus Datenschutzgründen gelöscht


Um nochmal auf die Bedingungen zurückzukommen (mein 1. Post unter A): was mir bei der Betrachtung fehlt, sind die Gas-Kosten. Liegen die beim niedrigsten Tarif über dem VK?
D.h. bei den schlechten Sonntagen ist es wirtschaftlicher, so wenig wie möglich zu verkaufen?
Dann könnte ich mir eine Optimierung schrittweise vorstellen:
a) fülle den besten Tarif mit 1
b) fülle so viel wie möglich von dem mittleren Tarif, ohne den besten zu beeinträchtigen (also von unten nach oben) und
c) fülle so wenig wie möglich von dem schlechtesten.
Das muß doch mit ein, zwei geschickten Schleifen machbar sein.
Schöne Grüße,
Michael
Anzeige
AW: zeilenweise
06.02.2017 16:24:56
Daniel
Hallo Michael,
die Gas Kosten können wir vernachlässigen, da es sich um Gasproduktion aus der Abfallentsorgung handelt und die nicht gestoppt werden kann.
Deine Vorgehensweise ist trotzdem richtig denke ich.
a) Fülle den besten Tarif, ohne dass der Gasspeichers überläuft
b) fülle so viel wie möglich von dem mittleren Tarif, ohne den besten zu beeinträchtigen (also von unten nach oben) und
c) fülle so wenig wie möglich von dem schlechtesten
am ende würde ich dann weiter Monate dranhängen...
Was steuerst du mit der Gewichtung?
Komme leider erst morgen dazu mir das ganze im Detail insbesondere deinen Code anzusehen... habe aber schon jetzt beim drüberschauen einige Fragezeichen :D
Viele Grüße und vielen Dank!!
Daniel
Anzeige
AW: zeilenweise
09.02.2017 14:33:43
Michael
Hi Daniel,
wenn der Gaspreis zu vernachlässigen ist, gibt es keinen Grund, c) anzuwenden (z.B. sonntags), soweit es eben bessere Tarife nicht beeinträchtigt (von unten nach oben, wie b).
Warum sollte man dann nicht auch sonntags zum schlechtesten Tarif so viel wie möglich verkaufen?
Wirklich sauber wäre so eine Betrachtung halt nicht mit "Umsatzmaximierung", sondern mit "Gewinnmaximierung".
Ich bin nicht ganz auf der Höhe und verabschiede mich auch gleich wieder: es kann sein, daß die Frage in Kürze nicht mehr angezeigt wird: dann kannste mir eine mail senden, siehe:
https://www.herber.de/cgi-bin/profile/call_profile.pl?user=1857094
Schöne Grüße,
Michael
Anzeige
AW: zeilenweise
09.02.2017 23:16:26
Daniel
Hallo Michael,
zunächst einmal vielen Dank für deine Bemühungen!!
Ich habe mal Versucht mich durch deinen Code zu wühlen... :D
So einiges scheinst du in einer fortgeschrittenen Kurzschreibweise zu verfassen :D
1. Verwendung # und &
# definiert die Variable als double habe ich durch deine Kommentierung gelernt
& definiert die Variable als integer?
2. Muss rz nicht als array definiert werden, oder passiert das implizit durch den Bereich den du der Variablen zuordnest?
3. Trennst du mit : Variablen die du füllst oder hat das was mit einem mehrdimensionalen Array zu tun?
Bsp.: GUph = rz(7, 1): U18 = rz(13, 1): U19 = rz(14, 1) das verstehe ich leider gar nicht :/
Ich habe mal versucht den Code weiter auszukommentieren... würdest du dir das mal ansehen ob ich es bis auf die ? richtig verstanden habe?
https://www.herber.de/bbs/user/111354.xlsm
Was die schleifen angeht habe ich versucht mich deiner vorarbeit zu bedienen, bin aber nicht in der lage diese in deinen code ersetzend einzufügen.
Meinst du so etwas würde funktionieren oder ist das viel zu simpel gedacht?
   For i = 1 To UBound(sF)
If sE(i, 1) = "0,1361" And rz(8) + rz(9) - rz(10) > 0 Then sF(i, 1) = 1  'Wenn max  _
Strompreis und gas aussreichend dann 1
If sE(i, 1) = "0,1126" And rz(8) + rz(9) - rz(10) > 0 Then sF(i, 1) = 1  'Wenn max  _
Strompreis und gas aussreichend dann 1
If sE(i, 1) = "0,0943" And rz(8) + rz(9) > U19 Then sF(i, 1) = 1 'Wenn max Strompreis  _
und gas aussreichend dann 1
Next

Tausend dank für deine Hilfe!
Anzeige
AW: zeilenweise
10.02.2017 14:53:31
Michael
Hi,
ich bin nicht sicher, ob Du meine Antwort vom 09.02.2017 14:33:43 gelesen hast - insbesondere, weil die Frage morgen nicht mehr angezeigt wird: entweder Du machst sie noch einmal auf oder Du sendest mir ne mail.
Ad 1: & = as Long
Weitere Kurzschreibweisen siehe http://de.wikibooks.org/wiki/VBA_in_Excel/_Variablen_und_Arrays
Ad 2: rz ohne Angabe = as variant, das hast Du richtig erkannt: via Zuweisung als Array
Der Umweg über rz ist eigentlich "Programmiermüll": ich hatte zunächst gedacht, daß "sehr viele" der Nebenbedingungen benötigt werden. Die Zuweisung zu "handlicheren Variablennamen" wie GUph = rz(7, 1) ist eigentlich unnötig, erhöht bei evtl. komplexerem Code dann aber die Übersicht.
Nur: es hat sich dann herausgestellt, daß wir tatsächlich nur die drei unter ...
Ad 3: ... genannten Variablen tatsächlich benötigen, so daß man das Array rz auch rauswerfen kann, um sich die drei Werte direkt mit GUph = Range("xxxx") zu beschaffen.
Die Schreibweise mit den Doppelpunkten führt einfach dazu, daß man mehrere Befehle in einer Zeile schreiben kann.
Das ist halt Geschmackssache: einer schreibt lieber
a=1
b=2
c=2
der andere a=1:b=2:c=3
Wobei ich es bei solch simplen Fällen einzeilig vorteilhafter finde, weil ich dann am Bildschirm mehr Codezeilen sehe als wenn es "auseinandergezogener" geschrieben ist - so habe ich mehr von der "Gesamtstruktur" des Codes im Blick.
Ich bin leider nicht auf der Höhe - nächste Woche würde ich mich nochmal reindenken können...
Schöne Grüße,
Michael
Anzeige
AW: zeilenweise
10.02.2017 19:00:40
Daniel
Hallo Michael,
wo finde ich denn deine Mailadresse?
Gruß,
DAniel

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige