Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1792to1796
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 Liste nach 3 Bedingungen

Optimierung Liste nach 3 Bedingungen
17.11.2020 12:33:04
petersen
Hallo zusammen,
ich bin an der Lösung eines Problems dran und das lautet wie folgt:
Ich habe eine Liste mit 15 Aufträgen (Spalte A). Jeder Auftrag hat Werte für die Kriterien Kriterium L (Spalte B), Kriterium V (Spalte C) und Kriterium M (Spalte D).
Es sind insgesamt 9 Aufträge zu bestimmen mit folgender Bedingung und derer Priorität (Stufe 1-3):
Priorität 1 (MUSS): Die Summe der gewählten Werte von L muss möglichst nahe 476 sein.
Priorität 2: Die Summe der gewählten Werte sollte möglichst nahe 2304 sein.
Priorität 3: Die Summe der gewählten Werte sollte möglichst nahe 2500 sein.
Die Aufträge sind täglich anders und die Optimierung soll täglich vollzogen werden.
Es könnte meiner Meinung nach Richtung Matrizenoptimierung gehen, ist bei mir aber schon ziemlich eingestaubt.
Ich bitte um Hilfe,
Grüße!
https://www.herber.de/bbs/user/141627.xlsx

26
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Optimierung Liste nach 3 Bedingungen
17.11.2020 12:46:55
petersen
EDIT: Die Anzahl der Aufträge ist NICHT festgelegt. Es sind meistens ca. 9 Aufträge, aber dies ist keine Verpflichtung!
AW: Optimierung Liste nach 3 Bedingungen
17.11.2020 15:18:44
Henrik
Hallo,
bevor ich mir (und andere sich) hierzu den Kopf zermartern, sei die Frage gestattet, was hinter den Zahlen steckt. Ggf. gibt es eine andere (einfachere) Lösung für das ursächliche Problem.
Gruß
AW: Optimierung Liste nach 3 Bedingungen
17.11.2020 15:43:55
petersen
Hallo Henrik,
vielen Dank für deine Antwort. Mir war schon bewusst, dass es nicht ganz so simpel ist, besonders durch die Variabilität der Lösungen...
Die Zahlen folgen keinem Muster, sind wohl nur immer in einem gewissen "Werterahmen". Kategorie L ist die Anzahl an L-Komponenten, die im Auftrag verbaut werden muss. Es ist bekannt, dass die geplanten Aufträge hervorragend sind, wenn die Summe derer nahe am Wert 476 liegt. Der Prozess der diese Komponenten verbaut ist nämlich taktgebend und voll auszulasten.
Für andere Fertigungsprozesse und deren kapazitive Auslastung ist es wiederum wichtig, das nicht mehr als die angegebenen Mengen V-Komponenten und M-Komponenten verbaut werden. Um die beiden Prozesse V und M richtig auszulasten sollte die Menge der jeweiligen Komponenten aber an dem festgelegten Limit sein.
L entsteht durch die Multiplikation aus Verbaut L-EinzelKomponenten und der Auftragsmenge. Die durchschnittliche Menge an EinzelKomponenten liegt bei 26. Die durchschnittliche Auftragsmenge bei 3. Dividiert erhält man ungefähr 9 Aufträge. Der Wert kann aber natürlich je nach Bestandteilen in der Auftragsliste variieren.
Grüße!
Anzeige
AW: Optimierung Liste nach 3 Bedingungen
17.11.2020 15:46:21
petersen
Hallo Henrik,
vielen Dank für deine Antwort. Mir war schon bewusst, dass es nicht ganz so simpel ist, besonders durch die Variabilität der Lösungen...
Die Zahlen folgen keinem Muster, sind wohl nur immer in einem gewissen "Werterahmen". Kategorie L ist die Anzahl an L-Komponenten, die im Auftrag verbaut werden muss. Es ist bekannt, dass die geplanten Aufträge hervorragend sind, wenn die Summe derer nahe am Wert 476 liegt. Der Prozess der diese Komponenten verbaut ist nämlich taktgebend und voll auszulasten (Priorität).
Für andere Fertigungsprozesse und deren kapazitive Auslastung ist es wiederum wichtig, das nicht mehr als die angegebenen Mengen V-Komponenten und M-Komponenten verbaut werden. Um die beiden Prozesse V und M richtig auszulasten sollte die Menge der jeweiligen Komponenten nicht über dem festgelegten Limit sein, aber bestmöglich nahe am Limit.
L entsteht durch die Multiplikation aus Verbaut L-EinzelKomponenten und der Auftragsmenge. Die durchschnittliche Menge an EinzelKomponenten liegt bei 26. Die durchschnittliche Auftragsmenge bei 3. Dividiert erhält man ungefähr 9 Aufträge. Der Wert kann aber natürlich je nach Bestandteilen in der Auftragsliste variieren.
Grüße!
Anzeige
AW: Optimierung Liste nach 3 Bedingungen
17.11.2020 16:37:03
Daniel
Hi
wie genau muss das ganze sein?
reicht eine Annäherung?
man könnte z.B. die Liste nach Zufallsreihenfolge sortieren und für die ersten 9 Aufträge der Liste die Abweichung zu den Zielwerten bestimmen.
das wiederholt man eine bestimmte Anzahl und merkt sich aus dieser Stichprobe die 9 Werte, die die geringste Abweichung zum Zielwert haben.
das sollte etwas einfacher sein und schneller zum Ziel führen.
Gruß Daniel
AW: Optimierung Liste nach 3 Bedingungen
17.11.2020 17:03:59
petersen
Hallo Daniel,
prinzipiell bin ich natürlich offen für jegliche Lösungen.
Meine Gedanken dazu: meinst du mit den 9 gemerkten Lösungen nur die Werte mit geringster Abweichung von der Gesamtsumme des Kriteriums L? Wichtig wären mir ja auch die beiden anderen Kriterien.
Wunschvorstellung wäre natürlich auch eine Art Automatisierung, z.B. dass gleich die richtige Sortierung erstellt wird und man nicht mehr zusammenrechnen muss.
Grüße!
Anzeige
AW: Optimierung Liste nach 3 Bedingungen
17.11.2020 17:18:08
Daniel
naja schon alle Kriterien.
du musst ja nicht nur eines prüfen.
Gruß Daniel
AW: Optimierung Liste nach 3 Bedingungen
17.11.2020 19:54:56
petersen
Moin Peter,
super danke!! Das Add-In kannte ich gar nicht. Werde ich mir mal anschauen!
Die Berücksichtigung von Kriterium 3 geht prinzipiell bei Solver nicht? Hier ist ja eine Differenz von 125, die du angegeben hast. Also nicht perfekt, aber in die richtige Richtung.
Grüße
AW: Optimierung Liste nach 3 Bedingungen
18.11.2020 14:53:38
peterk
Hallo
Weil es mir Spass gemacht hat, hab ich eine Variante mit rekursiver Funktion geschrieben. Es listet sämtliche Ergebnisse der 1. Priorität (ohne Rücksicht auf Auftragsanzahl) samt den zugehörigen Differenzwerten. (dauert bei mir ~6 Sekunden für die 74 möglichen Ergebnisse). Du kannst die Werte Tabelle auch ändern (das Programm sucht sich die Anzahl der Zeilen, Überschrift muss vorhanden sein)
https://www.herber.de/bbs/user/141670.xlsm
Anzeige
AW: Optimierung Liste nach 3 Bedingungen
17.11.2020 19:39:25
Daniel
Hi
bei 15 Auswahlmöglichkeiten kann man noch alle Varianten durchrechnen um die beste zu ermitteln
im Anhang mal eine kleine Datei, die das durchrechnet.
es wird soviel wie möglich über Formeln abgewickelt, nur das minimal nötige per VBA.
jeder zusätzliche Auftrag verdoppelt die Rechenzeit, also viel mehr dürfen so nicht dazukommen.
https://www.herber.de/bbs/user/141643.xlsm
Gruß Daniel
AW: Optimierung Liste nach 3 Bedingungen
17.11.2020 20:06:05
petersen
Hallo Daniel,
wow! Ich bin wirklich beeindruckt, so was habe ich noch nie in Excel gesehen! Hut ab und vielen Dank dafür :)
Anzeige
AW: Optimierung Liste nach 3 Bedingungen
18.11.2020 08:06:06
petersen
Hallo,
was mir noch beim anschauen der Lösungen kam. Gibt es eventuell auch die Lösung mit keiner vorher festgelegten Anzahl an Aufträgen? Man kann diese in beiden Lösungen verändern, das habe ich gesehen. Aber ganz ohne Festlegung?
Sprich, er sucht sich z.B. auch nur 3 Aufträge aus, wenn dies die Bedingungen am Besten aus der Liste erfüllt.
Grüße
AW: Optimierung Liste nach 3 Bedingungen
18.11.2020 09:49:52
Daniel
Hi
Dazu einfach im Code die Bedingung "If Range(...) = Soll Then" rausnehmen (mit dem dazugehörigen End If)
Oder erweitere sie so, dann kannst du auswählen, ob du eine feste Vorgabe für die Anzahl machen willst oder nicht (Eingabefeld leer lassen oder 0 eintragen)
If Soll = 0 Or Range(...) = Soll Then
Gruß Daniel
Anzeige
AW: Optimierung Liste nach 3 Bedingungen
19.11.2020 11:38:53
petersen
Hallo Daniel,
nochmal wirklich geniales Tool! Danke auch für den Tipp der Entscheidung zwischen Eingabefeld leer lassen oder 0 eintragen. Das ist wohl wirklich die perfekte Lösung.
Ich bin seit einer Zeit in VBA und wundere mich, dass die Umsetzung bei mir nicht klappt. Ich meine die Absätze im Code einigermaßen verstanden zu haben.
Ich habe die Zeile mit Soll = 0 Or Range("j2") = Soll Then untergebracht, wenn ich den Code jedoch starte und bei J2 eine 0 stehen habe oder das Feld leer lasse kommt ein Laufzeitfehler.
Kannst du mir sagen was ich falsch gemacht habe? Die dritte Zeile muss ich jedoch nicht verändern oder?
Beste Grüße!
Sub Schaltfläche1_Klicken()
Dim i As Long, Soll As Long
Soll = Range("J3").Value
Range("O4").CurrentRegion.Offset(1, 0).ClearContents
Range("R2").ClearContents
Range("M11").ClearContents
For i = 0 To 2 ^ (Range("A1").CurrentRegion.Rows.Count - 1) - 1
Range("J1").Value = i
If Soll = 0 Or Range("j2") = Soll Then
If Range("M11").Value = "" Or Range("M11").Value > Range("M9").Value Then
Intersect(Range("A1").CurrentRegion, Columns(7).SpecialCells(xlCellTypeFormulas, 1). _
EntireRow).Copy Range("O5")
Range("M11").Value = Range("M9").Value
Range("R2").Value = "'" & Range("M9").Text
End If
End If
Next
Range("J1").ClearContents
End Sub

Anzeige
AW: Optimierung Liste nach 3 Bedingungen
19.11.2020 14:15:11
peterk
Hallo
Range("j2") musst mindest 1 sein sonst wirft der Intersect Befehl einen Laufzeitfehler, d.h.

If (Soll = 0 Or (Range("j2") = Soll)) And (Range("j2") >= 1) Then

P.S.: Hast Du Dir meine VBA Lösung angesehen?
Peter
AW: Optimierung Liste nach 3 Bedingungen
19.11.2020 14:44:44
Daniel
Hi
Die Eingabezelle für den Sollwert ist J3 nicht J2.
In J2 steht die Formel für die Berechnung der Verwendeten Zeilen, die darf nicht überschrieben werden.
Gruß Daniel
AW: Optimierung Liste nach 3 Bedingungen
19.11.2020 16:22:59
petersen
Hallo zusammen,
danke für eure Unterstützung! Ich weiß auch nicht genau was ich falsch mache aber das richtige Ergebnis kommt noch nicht heraus.
Den Tipp von Peter umgesetzt, also:
Sub Schaltfläche1_Klicken()
Dim i As Long, Soll As Long
Soll = Range("J3").Value
Range("O4").CurrentRegion.Offset(1, 0).ClearContents
Range("R2").ClearContents
Range("M11").ClearContents
For i = 0 To 2 ^ (Range("A1").CurrentRegion.Rows.Count - 1) - 1
Range("J1").Value = i
If (Soll = 0 Or (Range("j2") = Soll)) And (Range("j2") >= 1) Then
If Range("M11").Value = "" Or Range("M11").Value > Range("M9").Value Then
Intersect(Range("A1").CurrentRegion, Columns(7).SpecialCells(xlCellTypeFormulas, 1). _
EntireRow).Copy Range("O5")
Range("M11").Value = Range("M9").Value
Range("R2").Value = "'" & Range("M9").Text
End If
End If
Next
Range("J1").ClearContents
End Sub
funktioniert erstmal ohne Laufzeitfehler, wenn ich bei j3, dem einzugebenden Soll-Wert 0 eingebe.
Mir scheint so, als wäre die Annäherung noch nicht so gut wie als ich 9 als festgelegten Soll-Wert eingetragen habe. Vielleicht ist noch etwas falsch.
Zu der Nachricht von Daniel. Ich dachte es wird der Wert "j2" geprüft, ob dieser dem Eingabewert in J3 entspricht, daher Soll = 0 Or Range("j2") = Soll Then. Von daher muss ich doch nicht "j2" in "j3" ändern oder?
Sorry, glaube ich habe dich nicht ganz verstanden.
Vielleicht könntest du mir schreiben welche Stelle genau falsch ist. Scheine VBA mäßig doch nur bedingt Kenntnisse zu haben.
@peter: Ja dein Tool habe ich auch getestet! Sehr gute Auflistung mit der Annäherung an 476. Aber die beiden anderen Kriterien werden nicht betrachtet oder?
Beste Grüße und Danke!
Anzeige
AW: Optimierung Liste nach 3 Bedingungen
19.11.2020 17:19:07
peterk
Hallo
Wollte Dir nur einmal den Lösungsraum für das erste Kriterium vor Augen führen bzw. auch demonstrieren wie eine "schnelle" Lösung aussehen könnte. Daniels Lösung sieht spektakulär aus, ist aber für mehr als 15 Auftragsnummern einfach zu zeitintensiv. Eine eindeutige Lösung zu bekommen (nach Deinen Kriterien) ist kein großer Aufwand. Wenn Du meinen Lösungansatz weiter verfolgen willst, so helfe ich Dir gerne weiter. Alternativ: Such in der Ergebnis Tabelle nach Deinem optimalen Ergebnis (alle Informatione sind vorhanden: Anzahl der Aufträge, absolute Abweichung V-Wert, absolute Abweichung M-Wert)
Peter
Anzeige
AW: Optimierung Liste nach 3 Bedingungen
20.11.2020 00:42:38
Daniel
Hi
im Prinzp reicht es aus, wenn du abfragst:
If Soll = 0 Or Soll = Range("J2").value
und die Schleife bei 1 beginnen lässt, dann findes das SpecialCells immer was:
For i = 1 To 2 ^ (Range("A1").CurrentRegion.Rows.Count - 1) - 1
um die Sache etwas zu beschleunigen, reicht ein
Application.ScreenUpdating = False 

am Anfang. Dann siehst du nicht mehr, wie gerechnet wird aber es geht schneller.
aber das ganze geht auch ohne Makro, hier mal als gekürzte Beispieldatei.
einfach die letzte Zeile nach unten ziehen, (Anzahl Zeilen kannst du dir ja ausrechen, bis alles 1 ist, Zeile 32773)
Optimale Werte kannst du dann für bestimmte Anzahlen über den Autofilter finden.
hier die Datei dazu:
https://www.herber.de/bbs/user/141721.xlsm
Gruß Daniel
AW: Optimierung Liste nach 3 Bedingungen
20.11.2020 18:37:53
petersen
Hallo zusammen,
zu der aktuellen Version habe ich noch eine Frage. Die Optimierung ohne Angabe eines Soll-Werts (Eingabe = 0) klappt nun! Hervorragend!!
Es ist daher eher noch eine Schönheitsfrage ;)
Wenn ich die Eingabe 0 mache oder das Feld freilasse kommt in der Ausgabeliste die Auftragsnummer 13 mit Werten fälschlicherweise noch einmal. Lässt sich das irgendwie vermeiden?
Sprich: Optimierung nach Kriterium L=476 ist bereits mit den Auftragsnummern 3,4,7,8,9,11,13,14,15 erfolgt und anschließend wird nochmal der Auftrag 13 dargestellt... (Bild1)
Bei Eingabe von Werten ins Soll-Feld funktioniert es.(Bild2)
Die Datei als Makro finde ich insbesondere durch die enorme Einfachheit super und möchte diese Variante gerne weiterverfolgen.
Vielen Dank Peter für dein Angebot und deine Hilfe. Ich werde es nochmal nach Einsatzbarkeit für mich prüfen!
Grüße!
Userbild
Userbild
AW: Optimierung Liste nach 3 Bedingungen
20.11.2020 20:33:47
Daniel
Hi
ja das lässt sich vermeiden.
du darfst dann das Löschen des letzten Ergebnisses nicht nur einmalig am Anfang ausführen, sondern musst es immer vor jedem Einfügen eines besseren Ergebnisses ausführen.
wenn die Anzahl der zu verwendenden Artikel immer gleich ist, dann spielt das keine Rolle weil das neue Ergebnis das vorhandene vollständig überschreibt.
bei variabler Anzahl jedoch kann es sein dass nach einem geschriebenen Wert mit 10 artikeln ein noch besserer mir 9 Artikeln folgt und dann wird die 10. Zeile nicht mehr überschrieben sondern bleibt vom alten Ergebnis stehen.
daher musst du das Löschen der Ergebnisse (Range("O4").CurrentRegion.Offset(1, 0).ClearContents) auch noch vor jedem Kopieren einfügen.
Gruß Daniel
AW: Optimierung Liste nach 3 Bedingungen
23.11.2020 11:13:15
petersen
Hallo Daniel,
das funktioniert, perfekt danke!
Wenn ich die Eingangsliste mit Aufträgen über die 14 erweitern sollte, müsste ich wohl die Spalte "2er-Reihe" einfach weiterführen und was müsste ich mit der Spalte "Aktiv" machen?
Mir ist bewusst, dass dies zu einer längeren Bearbeitungszeit führen würde.
Grüße!
AW: Optimierung Liste nach 3 Bedingungen
23.11.2020 11:17:04
petersen
Und eine weitere Frage:
Wenn ich den Makro mit 2x ESC abbreche kommt es danach ab und zu zu Problemen und der Makro startet nicht richtig oder braucht endlos.
Gibt es eine Art Reset auf die Eingangseinstellungen für den Code? Sodass er immer ohne Probleme starten kann.
AW: Optimierung Liste nach 3 Bedingungen
23.11.2020 12:15:00
Daniel
Du solltest die Zelle, in der der Code den Vergleichswert ablegt, leeren.
Das kannst du dir ggf auch ins Makro zu Beginn rein schreiben.
Gruß Daniel
AW: Optimierung Liste nach 3 Bedingungen
23.11.2020 12:33:54
Daniel
in Spalte Aktiv einfach die Formeln weiter runter ziehen.
ebenso die Zellbereiche in den Summenformeln J6:j8 anpassen.
Gruß Daniel

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige