ID tematu: 44753
 |
Podział prętów/rur na odcinki z bazą reszt użytkowych |
Autor |
Wiadomość |
LAnd
ExcelSpec


Pomógł: 366 razy Posty: 1060
|
Wysłany: 05-01-2015, 14:38 Podział prętów/rur na odcinki z bazą reszt użytkowych
|
|
|
Problem kilkakrotnie poruszany.
Użyta metoda pozwala na podział materiału na wy specyfikowane odcinki w założonej ilości.
Wykorzystuje reszty z poprzednich podziałów
Sporządza zlecenie z listą podziałów i "kartę technologiczną" ze szkicem podziałów i ich krotnością.
Kartę można wydrukować
Zlecenie można zatwierdzić ( po zwrocie do magazynu reszt) lub zaznaczyć do usunięcia.
Bazę danych reszt i podziałów można oczyścić z elementów usuniętych i zbyt krótkich
po wyczerpaniu wierszy arkusza można założyć nowy zeszyt z obsługą zleceń.
w bazie reszt można pozostawić wszystkie wiersze ze statusem "W"- wolny
numer zlecenia ( powtórzy się ewentualnie za 10 lat)
generowany automatycznie składa się z RDDD-GGMM
R-ostatnia cyfra roku
DDD - dzień od początku roku
GG - godzina
MM - minuta
Metoda podziału prętów
po każdorazowym podziale pomniejszana jet początkowa ilość planowana każdego elementu aż suma wszystkich pozostałych będzie równa 0
Dane wejściowe
Lista długości części 1010;950;900;850;800;765;720;687;660;613;580;393
Lista ilości części 95;42;1;11;15;82;48;24;58;51;18;86
Długość materiału 6050
podział pręta ( fragment kodu tylko w celu skomentowania)
Kod: | DlPreta = stdDlPreta
dlUzyta = 0
dlReszta = DlPreta - dlUzyta ' pozostało z pręta
bNowy = False
ileCzwPodziale = 0
ileZostalo = 0
For xLpCz = 1 To UBound(ListaCzDl, 2) 'dla każdej części
xileCz = dlReszta \ ListaCzDl(1, xLpCz) ' podział reszty na kolejne części w maksymalnej liczbie
If DlPreta > stdDlPreta And Len(NrCzesci) = 0 And xileCz = 0 Then
'pominąć dł > stddlpreta
' Stop
ListaCzLicznik(1, xLpCz) = 0 ' zerowanie licznika podziału
ListaCzPodz(1, xLpCz) = 0 'zerowanie ilości aktualnego podziału
End If
If xileCz <= ListaCzLicznik(1, xLpCz) Then 'sprawdzenie czy maksymalna wyliczona liczba części jest niw większa niż potrzena
Else
xileCz = ListaCzLicznik(1, xLpCz) 'korekta największego podziału do największego zapotrzebowania
End If
bNowy = bNowy Or ListaCzPodz(1, xLpCz) <> xileCz 'ustawienie zmiany licznika jednakowych podziałów
ListaCzPodz(1, xLpCz) = xileCz 'zapamietanie
dlUzyta = dlUzyta + xileCz * ListaCzDl(1, xLpCz)
dlReszta = DlPreta - dlUzyta
ileCzwPodziale = ileCzwPodziale + xileCz 'ile sumarycznie części w podziale
Next
If ileCzwPodziale > 0 Then 'pręt dał się podzielić
If bNowy Then
lpPreta = lpPreta + 1 'nr bieżącego podziału pręta
End If
'''''''''''''' ' koniec podziału preta
For xLpCz = 1 To UBound(ListaCzDl, 2)
'pomniejszenie ilości żądanej o ilości wynikające z podziału
'dla wszystkich składników podziału
ListaCzLicznik(1, xLpCz) = ListaCzLicznik(1, xLpCz) - ListaCzPodz(1, xLpCz)
ileZostalo = ileZostalo + ListaCzLicznik(1, xLpCz) ' liczba pozostałych elementów
'jeżeli będzie równa 0 to koniec dzielenia
Next
|
podzial rur-pretów v20-0.xls
|
Pobierz Plik ściągnięto 1917 raz(y) 184 KB |
|
_________________ Andrzej,
Najpierw wyjaśnijmy wszystko a potem resztę
Lepiej mieć z grubsza rację niż dokładnie się mylić
Niczego nie dowodzi ten, kto dowodzi zbyt wiele - Nihil probat, qui nimium probat. |
|
 | ID posta:
248742
|
|
|
 |
|
|
|
incognito
Stały bywalec Excelforum

Pomógł: 113 razy Posty: 415
|
Wysłany: 05-01-2015, 17:28
|
|
|
Witaj LAnd,
fajnie, że się pochyliłeś nad tym niełatwym problemem. Przetestowałem Twój programik na klasycznym, niełatwym przykładzie i Twój programik zrobił rozkrój o odpadzie 21,8%, wynik nie należy do zbyt obiecujących, ale może da się Twój algorytm jakoś podrasować, pzdr. |
|
 | ID posta:
248765
|
|
|
 |
|
|
LAnd
ExcelSpec


Pomógł: 366 razy Posty: 1060
|
Wysłany: 05-01-2015, 19:21
|
|
|
incognito,
wynika z tego, że proponowana metoda daje dobre wyniki przy dość zróżnicowanej długości elementów i takiej których
- najdłuższych mieści się 2-3 w materiale
- istnieją " wypełniacze" czyli drobne elementy
********************************
Jestem w stanie wygenerować większość podziałów materiału na kombinacje elementów
Pozostaje tylko wydajny algorytm który wybierze te ich ilości, które spełnią kryterium minimum reszt.
Solver nie potrafi ( przynajmniej w E200) rozwiązać zadania z całkowitymi liczbami podzielonych materiałów. Prawdopodobnie przekroczenie 32 zmienianych współczynników ilości przy każdym z kilku tysięcy podziałów.
rozwiązanie można oprzeć na rekurencji zmniejszającej elementy liczby planowanej do 0 za każdym prawidłowy doborem podzielonego materiału. tylko ile to potrwa ?! n^n
może zakończyć proces na założonym %% odpadów. |
_________________ Andrzej,
Najpierw wyjaśnijmy wszystko a potem resztę
Lepiej mieć z grubsza rację niż dokładnie się mylić
Niczego nie dowodzi ten, kto dowodzi zbyt wiele - Nihil probat, qui nimium probat. |
|
 | ID posta:
248774
|
|
|
 |
|
|
incognito
Stały bywalec Excelforum

Pomógł: 113 razy Posty: 415
|
Wysłany: 05-01-2015, 19:44
|
|
|
looknij może tutaj, jeżeli temat Cię zainteresował |
|
 | ID posta:
248778
|
|
|
 |
|
|
LAnd
ExcelSpec


Pomógł: 366 razy Posty: 1060
|
Wysłany: 05-01-2015, 20:46
|
|
|
mnie wyszło :
części sortowane wg długości : malejąco 12,5% a rosnąco - 9,76%
powstają odpady użytkowe, o dł. min. 500 mm, z których można wykonać kolejne elementy. Zmniejsza to odpady nieużyteczne do poziomu 1%
Dokładne algorytmy potrzebne będą dla drogich materiałów i krótkoseryjnej produkcji. |
_________________ Andrzej,
Najpierw wyjaśnijmy wszystko a potem resztę
Lepiej mieć z grubsza rację niż dokładnie się mylić
Niczego nie dowodzi ten, kto dowodzi zbyt wiele - Nihil probat, qui nimium probat. |
|
 | ID posta:
248790
|
|
|
 |
|
|
incognito
Stały bywalec Excelforum

Pomógł: 113 razy Posty: 415
|
Wysłany: 05-01-2015, 21:42
|
|
|
To fakt, problem jest wieloaspektowy, zwykle się liczy odpad w pojedynczym cięciu, co rzadko ma miejsce w praktycznych zagadnieniach, gdzie są często wykorzystywane odpady (zwykle się tego nie bierze pod uwagę przy teoretycznych dywagacjach)... :) |
|
 | ID posta:
248797
|
|
|
 |
|
|
bodek

Wersja: Win Office 2019
Pomógł: 1088 razy Posty: 3201
|
Wysłany: 05-01-2015, 23:40
|
|
|
Swoją drogą Quasi kopał się z tym tematem ładnych kilka lat temu.
Pomagał mu Rychu, ja też coś tam podziubałem i efekt ostateczny wyszedł bardzo zadowalający. Algorytm (jeżeli dobrze pamiętam a z tym u mnie coraz gorzej ) łączył metodę "monetarną" z Solverem i dawał super wyniki, na poziomie kilku % odpadów dla normalnych, niewydumanych zleceń.
Quasi to podobno ładnie opakował, uzupełnił o rzeźbę (raporty) i być może do interesu nie dołożył
Poniżej fotka ze strony www.swiatexcela.pl ...
swiat_problem.jpg
|
 |
Plik ściągnięto 247 raz(y) 20.6 KB |
|
_________________ MAKROAPLIKACJE.PL - Automatyzacja Excela Dla Korporacji by Quasi |
|
 | ID posta:
248805
|
|
|
 |
|
|
Quasi
Excel Expert

Wersja: Win Office 365
Pomógł: 144 razy Posty: 1118
|
Wysłany: 06-01-2015, 13:27
|
|
|
Jako żem wywołany do tablicy to skrobnę kilka zdań
Tak jak napisał bodek - z tematem walczyłem w sumie jakieś 5 lat (2007-2012) z dużymi przerwami. Program promowałem na targach IT (razem z Master_mixem) - miał nawet dedykowaną stronę, która zniknęła mi z sieci dość nagle, bo koledze padł serwer . Uznałem to za Boży znak i odpuściłem zupełnie temat, który mimo tego, że na pewno jest ciekawy, to jednak stoimy tutaj na starcie trochę na straconej pozycji, jeżeli chcemy na nim zarabiać. Dlaczego?
Odpowiedź jest prosta. Przyjmując konkretny algorytm rozkroju sprawiamy, że wyniki nie będą nigdy w 100% optymalne - a tego oczekują klienci, którzy chcą wydać na produkt ok. 2K. bodek, przez swoją skromność nie napisał wiele o swoim udziale w projekcie, ale to on tak naprawdę stworzył cały algorytm - ja skupiłem się na menu i pobocznych makrach. Rychu zaproponował rozwiązanie przy użyciu Solvera, które dobrze się sprawdzało przy prostych założeniach, natomiast nie było szans żeby działało przy bardziej skomplikowanym przykładzie jak np. ten, który podesłał incognito. Rozwiązanie Bodka było świetne, bo rozkrój w formie raportu przychodził od razu, wyniki także były kapitalne przy trudniejszych przypadkach - cały odpad był przerzucany na ostatnią belkę. Problem natomiast dotyczył prostszych przykładów, i tutaj właśnie Klienci narzekali - ostatecznie sprawa kończyła się na testach.
Program oczywiście mam jeszcze na laptopie, jednak działał on tylko dla Excela 2003 - tak naprawdę to odpuściłem sobie temat w momencie gdy pracowałem nad wstążką dla tej aplikacji. Wtedy pojawiły się inne oferty i spasowałem z tematem, co tak naprawdę bylo dla mnie jednak spora ulgą . |
_________________ MAKROAPLIKACJE.PL - Automatyzacja Excela Dla Korporacji |
|
 | ID posta:
248827
|
|
|
 |
|
|
incognito
Stały bywalec Excelforum

Pomógł: 113 razy Posty: 415
|
Wysłany: 07-01-2015, 10:00
|
|
|
Generalnie, to temat jest trudny do ugryzienia ponieważ jest złożony obliczeniowo, z tego co się orientuję, to na dzień dzisiejszy nie ma rozwiązania optymalnego, są tylko rozwiązania akproksymujące. Znalezienie rozwiązania optymalnego może być związane z przełomem m. in. w IT... :) |
|
 | ID posta:
248957
|
|
|
 |
|
|
LAnd
ExcelSpec


Pomógł: 366 razy Posty: 1060
|
Wysłany: 07-01-2015, 15:27
|
|
|
moją intencją było:
- napisać wydajny algorytm podziału
- reszty z podziału, powyżej określonego wymiaru, potraktować jako przydatne do dalszego przetwarzania
- odpady winny być < 3% ( przyzwoita dokładność "techniczna")
w 1992 r napisałem w Turbo Pascalu podział blach do wykonywania obudów dla Zakładów Mechanicznych w Sędziszowie pod DOS'em i funkcjonował prawie do końca XX w. Zabił go Windows zmienioną organizacją pamięci przydzielaną uruchamianym programom dynamicznie.
Mam zachowany kod ale muszę go przetłumaczyć do VBA
Użyłem tam listy dwukierunkowej opartej na wskaźnikach (tworzonych dynamicznie, na podobieństwo instrukcji NEW w VBA, co pozwoliło obejść ograniczenia 64 kbajty na dane programu)
W takiej liście każdy element przechowuje wskazanie do poprzednika i następnika
Lista ta pozwala na w miarę szybkie cofanie podziału, usuwanie zbędnych elementów, przenoszenie, wstawienie i dodawanie w dowolnym miejscu, przez utworzenie nowego elementu i odpowiednią zmianę poprzedników i/lub następników.
W VBA istnieje możliwość skonstruowania takiej listy przy użyciu obiektu Collection i Class Module - opisującej poprzednik, następnik, wymiary, podział materiału i dane użytego elementu, resztę z podziału.
Jak opracuję taką listę to opublikuję.
UK2 v1-pas.txt moduł obliczający w Pascalu, dla dociekliwych |
Pobierz Plik ściągnięto 825 raz(y) 17.7 KB |
|
_________________ Andrzej,
Najpierw wyjaśnijmy wszystko a potem resztę
Lepiej mieć z grubsza rację niż dokładnie się mylić
Niczego nie dowodzi ten, kto dowodzi zbyt wiele - Nihil probat, qui nimium probat. |
|
 | ID posta:
249015
|
|
|
 |
|
|
incognito
Stały bywalec Excelforum

Pomógł: 113 razy Posty: 415
|
Wysłany: 09-01-2015, 12:41
|
|
|
to jak sobie tak wspominamy, to ja na studiach (lata 90-te) pisałem programik w Pascalu do obsługi biblioteki, oczywiście w amatorskiej wersji... :) |
|
 | ID posta:
249193
|
|
|
 |
|
|
Telnetworks
Świeżak

Posty: 2
|
Wysłany: 25-02-2015, 09:29
|
|
|
Witam, super że trafiłem na ten post. zainteresowałem się tematem około rok temu, ale
przerosło mnie zagadnienie. zajmuję się tematem bardziej od strony praktycznej.
fajnie robi podział cięć ale czy jest możliwość uwzględnienia grubości narzędzia tnącego.
W praktyce wygląda to tak że w firmie tniemy różnego rodzaju profile i rury aluminiowe.
Długości dłużyc to jest zawsze okolica 6 metrów ( 5,8 m - 7 m ) ale piła tarcza ma grubość 4mm
więc jak podzielę teoretycznie dłużycę 6 metrów na 6 odcinków ( 5 cięć ) to ostatni będzie miał 2cm mniej. |
|
 | ID posta:
254590
|
|
|
 |
|
|
Kaper


Zaproszone osoby: 2
Wersja: Win Office 365
Pomógł: 4533 razy Posty: 9051
|
Wysłany: 25-02-2015, 11:15
|
|
|
Prostym sposobem obejścia problemu rzazu jest dodanie go do żądanych długości profili i do dostępnych dłużyc.
czyli chcemy 4x1500, zapisujemy to jako 4x1504,
mamy dłużycę 6012, zapisujemy ją jako 6016.
I już!
Oczywiście bardziej "profi" wygląda kiedy program grzecznie o szerokość rzazu pyta |
_________________ Kaper Jej Królewskiej Mości
Jeśli dane będą torturowane dość długo, przyznają się do wszystkiego |
|
 | ID posta:
254607
|
|
|
 |
|
|
Telnetworks
Świeżak

Posty: 2
|
Wysłany: 27-02-2015, 12:04
|
|
|
problemem jest tylko to, że maszyny podają wymiar do tarczy a nie za tarczą i zmienić się tego nie da.
Więc jeśli podam wymiar na maszynie 1504 to maszyna utnie mi na 1504. Jeśli dałoby się przestawić punkt pomiarowy za tarczą to pomysł jak najbardziej jest uzasadniony. Ale jeśli maszyna jest skalibrowana do cięcia z dokładnością do 0,1 mm to wolałbym tam rąk nie wkładać... za "Dzień dobry" serwisu do maszyny to 2500 zł netto. :/. |
|
 | ID posta:
254899
|
|
|
 |
|
|
Kaper


Zaproszone osoby: 2
Wersja: Win Office 365
Pomógł: 4533 razy Posty: 9051
|
Wysłany: 27-02-2015, 12:09
|
|
|
No ale przecież nikt nie mówi, żeby dłubać w maszynie.
Na etapie obliczeń sobie podstawiasz (powiększasz) i sztangę i cięte odcinki, a potem do maszyny wprowadzasz te właściwe wartości, a nie sztucznie powiększone.
Nie wkładasz też dłużycy z doklejonym czteromilimetrowym plasterkiem |
_________________ Kaper Jej Królewskiej Mości
Jeśli dane będą torturowane dość długo, przyznają się do wszystkiego |
|
 | ID posta:
254900
|
|
|
 |
|
|
|
Nie możesz pisać nowych tematów Nie możesz odpowiadać w tematach Nie możesz zmieniać swoich postów Nie możesz usuwać swoich postów Nie możesz głosować w ankietach Nie możesz załączać plików na tym forum Możesz ściągać załączniki na tym forum
|
Dodaj temat do Ulubionych Wersja do druku
|
|
Strona uĹźywa plikĂłw cookies.
Kliknij tutaj, Ĺźeby dowiedzieÄ siÄ jaki jest cel uĹźywania cookies oraz jak zmieniÄ ustawienia cookie w przeglďż˝darce.
KorzystajÄ
c ze strony uĹźytkownik wyraĹźa zgodÄ na uĹźywanie plikĂłw cookies, zgodnie z bieĹźÄ
cymi ustawieniami przeglÄ
darki.
SprawdĹş, w jaki sposĂłb przetwarzamy dane osobowe
|