R / excel/VBA simplex/solver optymalne pobranie produktu

0

Drodzy

Spotkałem się z murem i nie mam pojęcia jak zacząć
Musze zaplanować trasę dla pikera na magazynie

mam 1000 zamówień w podzielonych paczkach po max 10 które mogę dowolnie połączyć
mam 100 000 tys rodzajów produktów w rożnych lokalizacjach.

Każde zamówienie ma różna ilość pozycji od 1 do 100
każdy produkt jest wymiarowany i pakiet 10 ( nie musi oznaczać 10 zamówień bo może być np ze 3 zamówienia wypełnią pojemność 10 opakowań do których kompletuje to pracownik )

Chodzi mi o znalezienie takich 10 zamówień które będą miały najwięcej połączonych pozycji
np w 5 zamówieniach powtórzyły się produkty to fajnie by było jakby to znalazło się w jednym pakiecie bo zapłacę magazynierowi za pobranie 1 typu np 10 groszy , jak by było to na 5 różnych zamówieniach to zapłacił bym 10 gr za każde podejście
Później będę skupiał sie na zaplanowaniu najkrótszej trasy ( tzn rozłożenie towaru w magazynie )

Myślałem nad zrobieniem tego w Excelu gdzie będę miał wszystkie zamówienia i znajdę te najbardziej sie powtarzające zrobie z nich sume i będę laczył w taki sposób ale o ile potrafie to zrobić w formułach dla paru zamówień to dla 1000 zamówień gdzie jest mix produktowy nie jestem w stanie tego zrobić na chłopski rozum.

0

Serio masz 100 tysięcy rodzajów produktów? Co Ty sprzedajesz? Po opisie wygląda, że da się to spokojnie zapisać jako SAT lub ILP, tylko z taką liczbą produktów pewnie zabijesz solver. Podaj przykładowe dane, to będzie można zbudować model.

Jeżeli chcesz bez modelowania, to zacząłbym od posortowania nierosnąco po liczbie wystąpień produktu, a potem jechał zachłannie. Nie da to rozwiązania optymalnego, ale może posłużyć jako dobra podstawa. Znowu, podaj konkretne dane, to będzie można dyskutować.

0

Witaj :)
To jest spływ zamówień z części dnia. niestety struktura zamówień jest okropna ;/ dużo pojedynczych zamówień

Męczę się z tym od jakiegoś czasu . myślę że jak zobaczę jak to wygląda w solverze to zaczne to przestawiać na sql z dodatkiem r ... chociaż nic już z niego nie pamiętam

próbowałem to zrobić manualnie tak jak opisałem na dole ale niestety takie rozwiązanie daje jedynie zsumowana ilość a nie zwraca uwagi na produkt ..

krok 1
Zrobienie Tabeli przestawnej gdzie
Wiersze to produkty
kolumny to zamówienia
wartość to liczba z ilości

krok 2
Stworzenie macierzy zamówienia na zamówienia w której liczę ile zamówień z z1 powtarza się w z2 , i tak porównuje wszystkie zamówienia

krok 3
przekształcenie macierzy w formę tabelaryczną i posortowanie po ilościach powtórzeń

krok 4

Utworzenie unikatowych z połączenia zamówień i zsumowanie ile zostało linii powtórzonych
porównywanie każdego z każdym pakietem i sprawdzenie czy nie został któryś z produktów policzony już wcześniej.

0

Weźmy wiersz

q005188	96710403053xx	31

Czy to oznacza, że do zamówienie musi iść w czterech paczkach, bo do jednej paczki może wejść 10 elementów?

0

ograniczenie do 10 jest przypisane do zamówień
czyli może być maksymalnie 10 ( oczywiście może być mniej ) zamówień w których produkty powinny być jak najbardziej podobne wtedy jest tak zwany batch lub multi pobranie
ilość sztuk i ilość produktów w pakiecie juz nie jest taka ważna

( w późniejszych krokach jak to zrozumiem będę brał pod uwagę miejsca w magazynie, wagę produktów , objętość czy zmieści się do pudełka ...)

przykład

Zam indeks ilość
z1 1 1
z2 1 34
z3 1 35
z4 2 54
z5 2 4
z6 3 2
z7 3 5
z8 1 2
z9 3 21
z10 4 12

Optymalnie =

Pakiet 1
Zam indeks ilosc
z1 1 1
z2 1 34
z3 1 35

Pakiet 2
z6 3 2
z7 3 5
z9 3 21

Pakiet 3
z4 2 54
z5 2 4
z8 1 2

pakiet 4
z10 4 12

0

Dlaczego z8 jest w trzecim pakiecie?

Te dwa stwierdzenia są dla mnie niezrozumiałe.

czyli może być maksymalnie 10 ( oczywiście może być mniej ) zamówień w których produkty powinny być jak najbardziej podobne

ilość sztuk i ilość produktów w pakiecie juz nie jest taka ważna

Czym jest dla Ciebie ilość produktów? Bo jeżeli jest to liczba różnych klas produktów (10 różnych typów) a nie sztuk, to dlaczego produkty mają być jak najbardziej podobne i jednocześnie ilość produktów nie jest ważna? I co znaczy „podobne”?

Może to kwestia poniedziałku, może nie umiem czytać, ale niewiele mogę wywnioskować z Twojego opisu. Napisz po kolei całe swoje rozumowanie i zdefiniuj, co jest czym, bez tego raczej nie pomogę.

0

Wybacz za mną jest już parę nocek pracy i dziś będzie kolejna

Z8 jest w kolejnym pakiecie ponieważ pokazałem przykład dla łączenia po 3 ( i chyba zapomniałem napisać w przykładzie problemie jest 10 ale dla 3 było mi łatwiej przedstawić przykłąd )

nie zmieścił się do pakietu pierwszego więc musiał iść i czekać na kolejne połączenie lub zostać połączony z innymi

W przykładzie 14 tys unikatowych produktów / indeksów
które występują w 800 zamówieniach
dając łączną ilość linii około 22 tysiące

Problem jest w tym że należy podzielić 800 zamówień w pakiety po maksymalnie 10 zamówień tak aby produkty które znajdują się w pakietach dawały łącznie jak najmniejszą ilość linii pobrań.

  • ilość sztuk każdego produktu na tym etapie nie jest istotna
    istotne jest połączenie tych samych produktu w wielu zamówieniach tak żeby były najbardziej powtarzalne wtedy będą tworzyć mniejsza ilość pobrań

czyli lepiej iść raz po jakiś produkt i zebrać go do 10 zamówień niż iść 10 razy po 1 sztukę

0

No to tutaj nie ma żadnej magii. Dla każdego produktu robisz pakiety po 10 zamówień, ostatni pakiet będzie miał potencjalnie mniej zamówień, ale skoro płacisz za podejście po rodzaj produktu, a nie za liczbę pakietów, to nawet nie musisz bawić się w sklejanie niepełnych pakietów.Po prostu posortuj dane w excelu po typie produktu i odcinaj pakiety po 10 zamówień, w VBA pewnie do wyklepania w kilka minut.

Jeżeli chcesz sklejać, to jest to redukowalne do problemu subset sum https://en.wikipedia.org/wiki/Subset_sum_problem , więc na chwilę obecną nie da się tego zrobić sensownie szybko i można bawić się w heurystyki. Czyli bierzesz najbardziej wypchany pakiet mający mniej niż 10 zamówień, a potem próbujesz go połączyć z jakimś innym.

0

@Afish
Wydaje mi się że źle to wytłumaczyłem

Muszę połączyć 10 zamówień które maja mix produktowy w środku w taki sposób aby to było optymalne.
Bo przecież zamówienie nie składa sie z tego samego produktu

Czyli koniecznie muszę porównać wszystkie zamówienia ze sobą i sprawiać te które dadzą najmniejsza ilość podejść

Postaram się jeszcze raz pokazać przykład dla ułatwienai w tym wypadku możemy maksymalnie łączyć zamówienia w pakiety po 2
Lista zamówień

title
W których powtarzają się poniższe produkty

title

Można wyobrazić sobie macierz ze wszystkimi możliwościami
title

I wynikiem tego prostego zadanka jest połaczenie zamówień w pakiety po 2 zamówienia które dobrze się konsolidują

z 27 linii w zamówieniach udał się połączyc w pakiety 9 pozycji i dało to finalnie 18 linii do zapłacenia

title

0

Bo przecież zamówienie nie składa sie z tego samego produktu

Taki podałeś przykład.

Poczytaj o SAT, tak zazwyczaj podchodzi się do tych problemów. Inne rzeczy to mniej lub bardziej udane heurystyki, zależne od szczególnych ograniczeń, więc mniej ogólne i niekoniecznie łatwiejsze w użyciu.

0

Wybacz :P to był mój błąd źle podałem pierwszy przykład
Działam z tematem i czytam ale na razie to mnie troche przerasta

0 użytkowników online, w tym zalogowanych: 0, gości: 0