Letzte Änderungen am eindimensionalen Bin-Packing-Tool (Stand: 21. März 2021)
1. Zusammenfassung der Änderungen
Die im Blog verfasste Beschreibung des 1D Bin Packing Tools basiert auf dem 19.11.2017.
In Verbindung stehende Artikel: Arbeitsverteilungsoptimierung mit 1-D-Behälterverpackungsalgorithmus_1.Übersicht – Produktivitäts-Skill (prodskill.com)
Da es bei der Durchführung des K-Unternehmensprojekts am 21. März 2021 Verbesserungen gibt, wird es separat organisiert.
- Elementgröße von Integer (Long) zu Real (Double) ändern (Variablennamen-Präfix ändern)
- Groß-/Kleinschreibung des BinItem-Namens beachten (von Sammlung in Wörterbuch geändert)
– Änderung des Klassennamens (CBinItemCollection -> CBinItemDic) - Sortieren Sie das Verteilungsergebnis nach ungeraden und geraden Gruppen
- Verbesserter Code zum Laden von BinItem (Schleife mit Offset –> Variant-Array aus Bereich abrufen)
- Wenn ein Duplikat im Bin-Elementnamen vorhanden ist, wird dies mit einem Meldungsfeld für die Liste der Duplikate benachrichtigt und die Ausführung wird gestoppt.
Die geänderte Version kann unten aus dem Github-Repository heruntergeladen werden.
https://github.com/DAToolset/1D-bin-packing
2. Einzelheiten zu Änderungen
2.1 Elementgröße von Integer (Long) zu Real (Double) ändern (Variablennamen-Präfix ändern)
Wenn in der vorherigen Version ein realer Größenwert wie 0,1 oder 21,8 eingegeben wurde, wurde er in einen ganzzahligen Typ konvertiert, und die Werte unter dem Dezimalkomma wurden abgeschnitten, und es gab ein Problem, dass er nicht korrekt verteilt wurde . Dies war hauptsächlich ein Problem, wenn der Größenwert in KB, MB, GB, TB usw. anstelle der Anzahl von Bytes verwendet wurde.
Deklaration der Mitgliedsvariablen „Public m_lSize As Long“ der Klasse CBinItem in „Public m_dSize As Double“ geändert.
2.2 Groß-/Kleinschreibung des BinItem-Namens beachten (Von Sammlung in Wörterbuch geändert)
Als Member-Variable der bestehenden CBinItemCollection-Klasse wurde jedes Item in einer Collection gespeichert und verwaltet. Bei der Suche nach einem Artikel wurde eine Artikelinstanz mit dem Artikelnamen als Schlüssel gefunden, aber der Artikelschlüssel einer Sammlung hat ein Merkmal, bei dem die Groß-/Kleinschreibung nicht beachtet wird.
Der aus der Datenbank mit Berücksichtigung der Groß-/Kleinschreibung extrahierte Tabellen- und Spaltenname wurde als Elementschlüssel einer Sammlung ohne Berücksichtigung der Groß-/Kleinschreibung dupliziert und daher geändert.
In einer Datenbank, bei der zwischen Groß- und Kleinschreibung unterschieden wird, können Sie die Tabellennamen „T1“ bzw. „t1“ erstellen und verwenden. Es wird nicht empfohlen, da es Verwirrung stiften kann, aber es musste verbessert werden, da bereits erstellte Objekte anders identifiziert werden mussten.
Die Klasse wurde mithilfe eines Wörterbuchs neu geschrieben, sodass beim Elementschlüssel zwischen Groß- und Kleinschreibung unterschieden wird, und der Klassenname wurde ebenfalls von „CBinItemCollection“ in „CBinItemDic“ geändert.
2.3 Reihenfolge Sortieren nach geraden und ungeraden Gruppen von Verteilungsergebnissen
Im BinPacking-Ergebnis wird die Artikelgröße jedes Behälters wie folgt sortiert.
- Wenn die Option „Artikelgröße in absteigender Reihenfolge“ ausgewählt ist: Sortieren Sie in umgekehrter Reihenfolge von größeren Artikeln zu kleineren Artikeln
- Wenn die Option „Artikelgröße in absteigender Reihenfolge“ nicht ausgewählt ist: Eingabereihenfolge
Es sei angenommen, dass das Ergebnis der Ausführung des Bin-Packing in 4 Bins unterteilt ist. Wenn Sie die Bin Item-Liste kopieren, um eine Arbeitsgruppe zu erstellen und jede Arbeitsgruppe auszuführen, kann das folgende Phänomen auftreten.
- Ausführungsphänomen, wenn Bin Items in umgekehrter Reihenfolge der Größe sortiert werden
- Vier gleichzeitig ausgeführte Aufgabengruppen führen die größte Aufgabe von Anfang an aus.
- Wenn die Ressourcenkonkurrenz des Servers (CPU, Speicher, E/A) zunimmt und die Ressourcen nicht ausreichen, schlagen einige Aufgaben fehl oder die Wartezeit ist lang.
- Die Ressourcenkonkurrenz wird allmählich gelöst, wenn die Ausführung von großen Jobs abgeschlossen ist, und führt allmählich zu kleineren Jobs.
- Wenn Lagerplatzartikel in Eingabereihenfolge sortiert werden
- Die Serverressourcenkonkurrenz intensiviert sich und löst sich dann auf und wiederholt sich.
Dieses Phänomen kann zu Problemen führen, bei denen die Belastung des Servers stark wird oder es schwierig ist, vorherzusagen, wann die Ausführung abgeschlossen ist, da Ressourcen nicht effizient genutzt werden können.
Dieses Problem tritt möglicherweise nicht auf, wenn die Summe der Größen der gleichzeitig ausgeführten Aufgaben nahezu gleich gemacht wird, aber es ist fast unmöglich, die Bin-Elemente nahezu gleich groß zu machen, da die Größe der Bin-Elemente nicht einheitlich ist.
Um dieses Phänomen zu minimieren, werden die Artikel jedes Behälters nach Größe sortiert, aber es wurde die Option hinzugefügt, die gerade und ungerade Sortierreihenfolge in der Behälterreihenfolge umzukehren.
Wenn diese Option angewendet wird, sieht das Verteilungsergebnis wie folgt aus:
Bin1: 2, 5, 3, 1 Bin2: 3, 6, 1, 2
Es wird wie folgt geändert.
Bin1: 5, 3, 2, 1 # Decending order Bin2: 1, 2, 3, 6 # Ascending order
2.4. Verbesserung des Codes zum Laden von BinItem
Der Code, der die Eingabe-Bin-Item-Liste auf dem „Run“-Blatt liest und in den Arbeitsspeicher lädt, wurde durch die Verwendung eines varaint-Arrays verbessert.
Informationen zur Verwendung eines Variantenarrays finden Sie in diesem Artikel.
VBA-Codierungsmuster: Bereichsschleife - Lesen
2.5. Wenn Duplikate im Bin-Elementnamen vorhanden sind, wird ein Meldungsfeld für die Liste der Duplikate angezeigt und die Ausführung wird abgebrochen.
In der vorherigen Version wurde ein doppelter Bin-Elementname ignoriert und fortgesetzt. Bei der Umstellung auf Groß-/Kleinschreibung in dieser Version wurde geändert, um zu prüfen, ob es Duplikate in den Eingabedaten gibt, den Inhalt zu benachrichtigen und dann die Ausführung zu stoppen. Sie müssen nur die Duplikate entfernen oder sie so ändern, dass sie nicht dupliziert werden, und es erneut ausführen.
Das Bin-Packing-Tool wird nicht oft verwendet, aber es scheint 4-5 Mal im Jahr oder öfter verwendet zu werden. Manchmal ist es eine große Hilfe für mich. Wenn Sie Fragen haben, hinterlassen Sie bitte einen Kommentar.
<< Liste verwandter Artikel >>
- Optimierung der Arbeitsverteilung durch eindimensionalen Bin-Packing-Algorithmus_1.Überblick
- Optimierung der Arbeitsverteilung durch eindimensionalen Bin-Packing-Algorithmus_2.Algorithmus (1)
- Optimierung der Arbeitsverteilung mit eindimensionalem Bin-Packing-Algorithmus_2.Algorithmus(2)
- Optimierung der Arbeitsverteilung durch eindimensionalen Bin-Packing-Algorithmus_3.Implementierung (1)
- Optimierung der Arbeitsverteilung durch eindimensionalen Bin-Packing-Algorithmus_3.Implementierung (2)
- Optimierung der Arbeitsverteilung durch eindimensionalen Bin-Packing-Algorithmus_4.Attachment
- Letzte Änderungen am eindimensionalen Bin-Packing-Tool (Stand: 21. März 2021)
- Tool zur Optimierung der Arbeitsverteilung mit eindimensionalem Bin-Packing-Algorithmus Vollständiger Inhalt, Download