Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1580to1584
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

Lagerbereich nacheinander anfahren

Lagerbereich nacheinander anfahren
28.09.2017 13:14:09
Viktoria
https://www.herber.de/bbs/user/116605.xlsm
Hay Ihr lieben,
ich hab hier eine Aufgabe, wo ich total am verzweifeln bin :( ...
Ich würde mich sehr freuen, wenn sich jemand die Aufgabe mal näher anschauen könnte.
Ich würde mich um jede Hilfe freuen.
Ich bin für alle Ideen und Tipps offen, vielleicht ist ja jemand so nett und kann mir einen neuen Quellcode als Ansatz schreiben, da meiner nicht, bzw nur teilweise funktioniert.
LG Viktoria
Bei einem Logistikdienstleister werden im Lager die Kommissionieraufträge abgearbeitet. Die Kommissionspositionen können von 6 Lagerbereichen „A“ bis „F“ bezogen werden. Ein Kommissionierauftrag enthält maximal 5 Positionen. Die Artikel des Kommissionierauftrags dürfen in unterschiedlichen Lagerbereichen gelagert werden. Die Zuordnung der Artikel zu Lagerbereichen stellt das Blatt „Artikel“ dar. Das Blatt „Entfernungen“ stellt die Entfernungen zwischen den Lagerbereichen und dem Kommissionierbereich in Metern dar. Auf dem Blatt „Auftrag“ werden beispielhafte Kommissionieraufträge dargestellt (die Anzahl der Aufträge und die Anzahl der Artikel können variieren).
Der Kommissionierer führt jeden Kommissionierauftrag einzeln durch, d.h. er fängt seine Fahrt mit dem Kommissionierfahrzeug bzw. -wagen im Kommissionierbereich an, fährt zu dem entsprechenden Lagerbereich, wo er den gewünschten Artikel findet und danach zu dem anderen Lagerbereich, wo er den nächsten gewünschten Artikel finden kann. Wenn er alle Artikel des Kommissionierauftrags gesammelt hat, kehrt er zum Kommissionierbereich zurück. Die Reihenfolge des Sammelns der Artikel innerhalb des Auftrags entspricht der Reihenfolge der Artikel in dem Kommissionierauftrag. Das wird als „Standard“-Reihenfolge genannt. Wenn man die Auftragslisten entsprechend umstellt, dass die Artikel aus dem gleichen Bereich nacheinander in der Liste stehen, dann könnte die Dauer des Sammelns verkürzt werden. Diese Reihenfolgen werden „Verbesserte“ genannt. Im Gegensatz dazu, wird auch eine optimale Reihenfolge betrachtet, in der die Sequenz der Artikelsammlung so gewählt wird, das der Kommissionierweg am kürzesten ist.
Auf dem Blatt „Verbesserung“ stelle ich die Auftragslisten so um, dass die gleichen Lagerbereiche innerhalb eines Auftrags nicht mehrmals angefahren werden müssen. Die entsprechende Dauer soll in die Spalte „Dauer“ auf diesem Blatt eingetragen werden.

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Lagerbereich nacheinander anfahren
28.09.2017 13:49:46
lupo1
Maximal 5 verschiedene Positionen bedeutet maximal 5 verschiedene Orte.
1. Sortieren der Positionen nach Orten
2. Duplikate eliminieren
3. Die kürzesten Wege kannst Du verdrahtet ablegen:
1 Ort ist nicht optimierbar
2 Orte sind nicht optimierbar
3-5 sind optimierbar
Problem des Handlungsreisenden
28.09.2017 13:53:15
Zwenn
Hallo Viktoria,
sofern Du die entsprechende Mathematik nicht beherrscht, bist Du auf jemanden angewiesen, der Dir dieses Problem vollständig löst. Was Du machen sollst, ist eine Optimierung die unter Namen Problem des Handlungsreisenden bzw. im englischen unter Traveling Salesman Problem bekannt ist. Dafür muss man in Graphentheorie fit sein und eines der Optimierungsverfahren beherrschen, soweit ich weiß.
Um zu sehen, worum es dabei geht, ist Wikipedia ein ganz guter Anlaufpunkt:
https://de.wikipedia.org/wiki/Problem_des_Handlungsreisenden
Viele Grüße,
Zwenn
Anzeige
grundsätzlich richtig, aber
28.09.2017 14:04:32
lupo1
es gibt nur 62 Szenarien der Orte (Kombinationen für 1 bis 5 Orte)
6 1 Ort
15 2 Orte
20 3 Orte
15 4 Orte
6 5 Orte
Davon können nur 41 (nämlich 3-5 Orte) optimiert werden. Das sind dann Permutationen:
3 Orte 6 Permutationen für jede Kombination
4 Orte 24 Permutationen für jede Kombination
5 Orte 120 Permutationen für jede Kombination
Somit die besten 41 Wege aus
20 x 6 = 120
15 x 24 = 360
6 x 120 = 720
==============
1200 Kombinationen zu ermitteln, und zwar genau, nicht nur näherungsweise.
Das bekommt man leicht mit VBA gebacken.
Anzeige
AW: grundsätzlich richtig, aber
28.09.2017 14:19:41
Zwenn
Da hast Du recht,
Deine Erklärung ändert jedoch nix an der Tatsache, dass man wenigstens erstmal wissen muss, was Kombinatorik ist und wie sie funktioniert. Das meine ich mit dem benötigten Beherrschen der zugehörigen Mathematik. Also, man muss ja in diesen Strukturen denken können, sonst wird das nix werden.
Du hast allerdings auch in sofern recht, dass es erst komplizierter wird, wenn die Anzahl der Orte steigen würde.
AW: Lagerbereich nacheinander anfahren
28.09.2017 14:18:50
SF
Hola JoJo, Viktoria, Aisha,
wenn du schon mehrere Foren mit unterschiedlichen Namen bemühst, so verlinke sie untereinander!
Gruß,
steve1da
AW: alles probieren
28.09.2017 16:30:20
Fennek
Hallo,
der Code prüft für alle Varianten die jeweilige Entfernung und bestimmt das Minimum.
Die Ausgabe erfolgt ins Direktfenster, wenn es zusagt, kann das noch geändert werden.
Es wird ein weiteres sheet("Kombinatorik") erwartet.
Der Code MUSS in ein neues Modul

Option Base 1
Dim Entfernung
Dim Reihe As String
Dim MM As Long
Sub T1()
Dim Artikel
Dim c As Range
Dim Weg As Byte
Dim Bo As Boolean
Dim WSF As WorksheetFunction: Set WSF = Application.WorksheetFunction
Artikel = Sheets("Artikel").Cells(1).CurrentRegion
Entfernung = Sheets("Entfernungen").Range("A1:H8")
With Sheets("Auftrag")
For i = 2 To .Cells(Rows.Count, "A").End(xlUp).Row
Weg = 0
Tx = ""
For Each c In .Range(.Cells(i, "B"), .Cells(i, "F"))
If Not IsEmpty(c.Value) Then
For k = 2 To UBound(Artikel)
If c.Value = Artikel(k, 1) Then
Weg = Weg Or 2 ^ (Asc(Artikel(k, 2)) - 65)
Tx = Tx & Artikel(k, 2)
End If
Next k
End If
Next c
Ty = ""
For k = 0 To 5
Bo = Weg And 2 ^ k
If Bo Then Ty = Ty & Chr(65 + k)
Next k
'Debug.Print .Cells(i, "A"), Tx, Ty, Format(WSF.Dec2Bin(Weg), "0#######")
Kombinatorik (Ty)
Debug.Print .Cells(i, "A"), Reihe, MM
Next i
End With
End Sub
Sub Kombinatorik(ByVal Base)
'Quelle: http://www. _
online-excel.de/fom/fo_read.php?f=1&bzh=71253&h=71239
Application.Calculation = xlCalculationManual
Dim iStart As Double, Spalte As String
With Sheets("Kombinatorik")
.UsedRange.Clear
iStart = Timer
'Startwerte eingeben >>>>>>>>>>
'Const Base As String = "ABCD" 'maximal 8 Zeichen 
mfg
("Victoria" steht "Sieg" (der Bundewehr))
Anzeige
AW: um Antwort wird gebeten! owT
28.09.2017 18:41:38
Fennek
AW: um Antwort wird gebeten! owT
28.09.2017 19:44:26
Zwenn
Hi Fennek,
da hast Du Dir ja echt Mühe gegeben. Aber ich nehme an, das war vergebens. Hast Du den Beitrag über Deinem ersten gelesen, von Steve? Ich habe mal nach den anderen Beiträgen gesucht. Du hast sowas, wie eine Hausaufgabe gelöst, für jemanden, der dieses Problem unter verschiedenen Namen an unterschiedlichen Orten veröffentlicht hat.
Hier der Beitrag als Aisha:
http://www.vba-forum.de/forum/View.aspx?ziel=39893-Kommissionierlager_-_Lagerbereiche_nacheinander_abfahren
Hier sind Verlinkungen, denen Du folgen kannst:
http://www.vba-forum.de/forum/View.aspx?ziel=39904-OWT
Viele Grüße,
Zwenn
Anzeige
AW: um Antwort wird gebeten! owT
28.09.2017 22:24:09
Viktoria
Hallo Zwenn,
ich weiß leider nicht, wo dein Problem ist.
Ja ich habe noch andere Beiträge online.
Mein Name ist Joyce (jojo) Viktoria und der Name meiner Partnerin Aisha.
Leider scheint es online mit den Namen ein paar Probleme zu geben, ich weiß auch nicht, warum jedes mal ein anderer angegeben wird.
Wenn ihr diese findet, dann ist das gut für mich und ich freue mich, dass ihr so viel Interesse zeigt. Umso mehr freue ich mich über den Beitrag von Fennek, dass er auch sinnvoll geantwortet hat.
Dies ist ein Forum für alle Probleme im Excel und VBA Bereich, deswegen verstehe ich nicht, warum "sowas, wie eine Hausaufgabe" hier fehl am Platz ist.
LG Joyce (jojo) Viktoria
Anzeige
Weil es A-Soziales Verhalten ist
29.09.2017 11:58:35
Zwenn
Hallo Viktoria,
dann erkläre ich Dir gerne, wo (nicht nur mein) Problem ist.
Im Kern geht es um das Posten des gleichen Problems in unterschiedlichen Foren, ohne dies in den einzelnen Beiträgen mitzuteilen. Wenn dieses Problem zusätzlich noch unter verschiedenen Namen veröffentlicht wurde, trägt auch nicht grade zur Transparenz bei. Ich weiß auch nicht, was so schwer daran ist einen Namen in ein Textfeld mit der Bezeichnung Name: einzugeben. Da gibt es gar keine Probleme oder ich hatte bisher immer Glück, dass die Zeichenkette dort erscheint, die ich reingeschrieben habe ;-)
Von Deiner Warte aus betrachtet ist es natürlich wünschenswert, so viele Leute wie möglich zu erreichen, weil das Deine Aussicht auf Hilfe steigert. Verständlich. Von unserer Warte aus betrachtet ist es aber äußerst ärgerlich, sich mit einem Problem zu beschäftigen, ohne zu wissen, dass an anderer Stelle vielleicht auch schon jemand damit beschäftigt ist oder sogar schon eine Lösung besteht.
Die einfache Lösung für dieses Dilemma wäre, wenn Crossposter, wie Du, die ganzen Foren untereinander verlinken würden. Das passiert aber regelmäßig nicht. Deshalb reagieren Leute, die Hilfe in diesen Foren leisten und sich mit den Problemen anderer beschäftigen, äußerst allergisch auf eine Nicht-Verlinkung.
Du schreibst, wenn wir diese Beiträge finden, ist das gut für Dich. Glaubst Du ernsthaft, wir schauen für jeden eröffneten Thread erstmal in allen Excel Foren nach, ob das gleiche Problem vom gleichen Fragensteller dort auch veröffentlicht wurde? Das ist eine sehr egoistische denkweise. Da diese einen sozialen Kontext hat, ist sie Unsozial, Anti-Sozial ... A-Sozial. Deine Einstellung dazu ist: Hauptsache Mein Problem wird gelöst, wenn andere dadurch Nachteile haben, ist mir das egal. Sorry, geht gar nicht.
Hausaufgabenhilfe ist schon ok. Die Frage ist nur, wie sinnvoll es ist, die Aufgabe als Komplettlösung zu liefern. Nun hattest Du Glück, das Fennek sich in dieser Form darum gekümmert hat. Ob Du viel davon hast, bezweifle ich allerdings. Aber das ist Deine Sache.
Gruß,
Zwenn
Anzeige
Schöne Beschreibung!
29.09.2017 13:39:29
lupo1
Man sollte drauf verlinken.
+100 Internet-Punkte @ Zwenn - schönes WE und owT
29.09.2017 14:29:57
Michael
AW: um Antwort wird gebeten! owT
28.09.2017 22:16:04
Viktoria
Hallo Fennek,
die Antwort ist super! Danke für die viele Mühe ich werde mir den Quellcode auf jeden Fall nochmal genau durchschauen und dir morgen ein ausführliches Feedback geben.
LG Viktoria
AW: etwas einfacher
29.09.2017 20:34:59
Fennek
Hallo,
der Code kann auch etwas gestrafft werden. Er sollte in ein weiteres Modul

'Entfernung, Reihe, MM auf "Public" setzen
Dim Art, Auf
Dim iDic As Object
Dim WSF As WorksheetFunction
Sub Test2()
Set WSF = Application.WorksheetFunction
Einleitung
'Unique List der Lagerorte pro Auftrag
Set iDic = CreateObject("Scripting.Dictionary")
With Sheets("Auftrag")
For i = 2 To UBound(Auf)
iDic.Item(Auf(i, 1)) = " "
For j = 2 To 6
If Not IsEmpty(Auf(i, j)) Then
Lag = WSF.VLookup(Auf(i, j), Art, 2, 0)
If InStr(1, iDic.Item(Auf(i, 1)), Lag) = 0 Then iDic.Item(Auf(i, 1)) = iDic. _
Item(Auf(i, 1)) & Lag
End If
Next j
Next i
End With
'Ermitteln der besten Route mit der minimalen Entfernung
For Each k In iDic.Keys
Kombinatorik (Trim(iDic.Item(k)))
iDic.Item(k) = Reihe & "|" & MM
Debug.Print k, iDic.Item(k)
Next k
Set iDic = Nothing
End Sub
Sub Einleitung()
Art = Sheets("Artikel").Cells(1).CurrentRegion
Auf = Sheets("Auftrag").Cells(1).CurrentRegion
Entfernung = Sheets("Entfernungen").Range("A1:H8")
End Sub
mfg
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige