Excel Forum - Porady, Pomoc,  Excel Help, Excel FAQ Strona Główna
 FAQ  RegulaminRegulamin  Szukaj   Użytkownicy   Grupy   Rejestracja   Profil   Twoje wiadomości   Zaloguj 


Poprzedni temat «» Następny temat
ID tematu: 44753 Skopiuj do schowka 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 Skopiuj do schowka
 
 
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 Skopiuj do schowka
 
 
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 Skopiuj do schowka
 
 
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ł :lol:
ID posta: 248778 Skopiuj do schowka
 
 
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 Skopiuj do schowka
 
 
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 Skopiuj do schowka
 
 
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 :-P ) łą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ł :mrgreen:
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 Skopiuj do schowka
 
 
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 :evil: . 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 Skopiuj do schowka
 
 
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... :) :lol:
ID posta: 248957 Skopiuj do schowka
 
 
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 Skopiuj do schowka
 
 
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... :) :lol:
ID posta: 249193 Skopiuj do schowka
 
 
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 Skopiuj do schowka
 
 
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 :boss

Jeśli dane będą torturowane dość długo, przyznają się do wszystkiego
ID posta: 254607 Skopiuj do schowka
 
 
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 Skopiuj do schowka
 
 
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 :boss

Jeśli dane będą torturowane dość długo, przyznają się do wszystkiego
ID posta: 254900 Skopiuj do schowka
 
 
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
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

Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group
Theme xandgreen created by spleen& Programosy modified v0.3 by warna
Opieka techniczna www.wip.pl

Archiwum

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