Home › Forum › Domande su Excel VBA e MACRO › Nesting tubi
Taggato: Nesting Tubi
-
AutorePost
-
-
Buonasera a tutti, mi rivolgo principalmente a By Sal come autore del file nesting tubi che si trova in diversi siti (è diventato un must) ma anche a tutti coloro hanno affrontato questo problema.
Volevo sapere se aveva ottimizzato il file ottimizzatore v1 come riportato qualche tempo fa su un altro sito. Pensavo di trovare qualche discussione qui ma in effetti sembra che non sia stato trattato.
Grazie a tutti
-
Ciao jjoe, in effetti qui non è stato ancora trattato, ma una certa evoluzione è stata fatta, sta ancora in valutazione, perche devo far prendere prima gli spezzoni in magazzino e poi incominciare con le barre intere, e questo mi sta dando alcuni problemi.
se mi dai una tua lista tagli, vediamo che ne salta fuori, ma devi darmi anche la tua lunghezza tubi della barra intera a volte è diversa tra i formati.
te la sviluppo cosi vediamo come va rispetto alla V.1
Ciao By Sal (8-D
Ciao By Sal (8-)
se ti piace la soluzione aiuta a sostenere il Forum con una DONAZIONE a piacere, Grazie -
ciao Bysal,
nel ringraziarti per avermi risposto e per avermi offerto il tuo aiuto, volevo dirti che l’idea era quella di applicare il tuo file per la risoluzione di un lavoro scolastico.
Partendo da questo:
pezzi lunghezza
11 6
2 7
2 5
2 4
5 2
con taglio lama pari a 0 e lunghezza disponibile pari a 18 ottengo:
7 6 6 6 6 5 2
766664
466652
2
2
2
volevo sapere se era possibile modificarlo per restituire la combinazione migliore ossia questa
7 6 6 6 6 5
7 6 6 6 6 5
4 6 6 6 4 2
22
2
2
con lo sfrido pari a zero.
Volendo andare oltre
La lunghezza disponibile del tubo nel mio caso va da 18 a 24 partendo sempre da 18 e se non si trova la combinazione ideale si può tentare 19, 20 e così via fino a 24.
Devo sempre cercare di ottenere come risultato il numero 18 se questo non è possibile va bene anche in qualche colonna 19, 20 e così via fino a 24. In altre parole tutte le colonne tranne l’ultima devono essere comprese tra 18 e 24 ma preferibilmente vicine all’intervallo minore ossia 18 e l’ultima colonna deve avere il valore più piccolo possibile. Spero di essere stato chiaro altrimenti dimmi cosa posso fare. Magari allego un file excel di esempio
Ti ringrazio per la disponibilità.
JJoe
-
Scusami tanto ma non riesco a formattare gli esempi come vorrei, ho preparato uno screen ma non riesco ad allegarlo
ci riprovo:
non va non riesco a mandarti i dati di esempio comunque provo a spiegarli
Il tuo algoritmo restituisce (7 7 4)=18 (6 6 6)= 18 (6 6 6)=18 (6 6 6)= 18 (6 6 5) =17 ( 5 4 2 2 2 2)= 17 ( 2) ma a me servirebbe tutto 18 cioè così:
(7 7 4) (6 6 6) (6 6 6) (6 6 6) (6 6 4 2) ( 5 5 2 2 2 2) con sfrido pari a zero
scusami per il pasticcio dei post ma non so cos’altro fare
-
-
Ciao Jjoe ho interpretato bene la tua esposizione, ma purtroppo non mi da la tua soluzione, e sto cercando di capire perche, cosa sbaglia e dove.
quindi dovrò rivedere l’algoritmo daccapo.
appena riesco a quadrare il risultato ti faccio sapere.
Un Saluto By Sal (8-D
Ciao By Sal (8-)
se ti piace la soluzione aiuta a sostenere il Forum con una DONAZIONE a piacere, Grazie -
Ciao Jjoe per la verità ho usato il Risolutore di Excel, vedendo che risultato andava a darmi, questo il risultato che mi ha dato è diverso dal tuo, ma combacia perfettamente con 6 barre e senza sfrido
(7722) (66222) (666) (666) (666) (5544)
ora bisogna vedere come automatizzare la cosa
ti faccio sapere
Ciao By Sal (8-D
Ciao By Sal (8-)
se ti piace la soluzione aiuta a sostenere il Forum con una DONAZIONE a piacere, Grazie -
-
Ho preparato qualche prova su dati reali con lunghezza tubi sempre pari a 18
Prima prova:
16 3
1 6
4 2
1 4
Risultato: (3 3 6 3 3) =18; (3 3 3 3 3 3)= 18; (3 3 3 3 3 3)= 18; (2 2 4 2 2 ) =12
Secondo Caso:
15 4
2 7
2 5
2 6
Risultato: ( 4 4 4 6 )=18; ( 4 4 4 6 )=18; (4 5 5 4 ) =18 ; (7 7 4 ) =18; (4 4 4 4 )= 16 ; (4 4)= 8
Se hai bisogno te ne mando altri altrimenti se vuoi posso testare io il file.
-
Questa risposta è stata modificata 1 anno, 2 mesi fa da
jjoe.
-
Questa risposta è stata modificata 1 anno, 2 mesi fa da
-
Ti inoltro altri 2 esempi corposi sempre lunghezza pari a 18
terzo esempio:
11 6
4 2
3 4
2 7
2 5
risultato: (6 6 6) =18 ; (6 6 6) =18 ; (6 6 2 4) =18 ; (6 6 2 4) =18 ; (7 2 5 4) =18 ; (6 7 5 )= 18; (2)
Quarto esempio:
1 8
1 1
2 18
14 3
2 2
3 5
5 4
risultato: (3 2 2 2 2 2 5)=18; (1 2 2 2 2 4 5 )= 18; (8 3 3 4)=18; (2 2 2 3 3 3 3 )= 18; (4 3 5 4 2)= 18;
(2 2 3 2 4 3 2)= 18; (2 2 2 2 2 2 2 2 2)= 18; (18)=18; (18)=18; (3 3 3 3)=12;
-
Ciao nemmeno va bene con il Risolutore di Excel va in crisi, devo ritornare al vecchio algoritmo e ragionarci sopra
ti passo il file con il solver e il metodo per applicare il calcolo, la spiegazione del metodo non è mia ma di Maurizio Borrelli.
l’ho applicato alle altre misure che mi hai dato e purtroppo non da il risultato voluto, per questo non l’ho scelto a priori
questo il link al file
http://www.filedropper.com/solver
Ciao By Sal (8-D
Ciao By Sal (8-)
se ti piace la soluzione aiuta a sostenere il Forum con una DONAZIONE a piacere, Grazie -
Ciao sono riuscito a trovare l’algoritmo giusto, almeno cosi sembra, perche ci sono problemi nel senso che cerca solo la corrispondenza esatta. ti faccio vedere con alcune tue sequenze
questa la prima ed è arrivato fino in fondo perche l’ultima combinazione è minore di 18
poi ho tolto dei dati e rifatto il calcolo, ma come vedi non trovando più una corrispondenza per 18 li accomuna tutti superando il limite di 18 poi sta poi a noi trovare quale sarebbe la migliore combinazione, ma ci sto lavorando un poco sopra a vedere se riesco a quadrare di più la cosa
Ciao By Sal (8-D
P.S. ho fatto la modifica, vedi come riesce adesso trova sempre una soluzione, che dici va bene?, mentre lo sviluppavo mi è venuta la soluzione.
Ciao By Sal (8-)
se ti piace la soluzione aiuta a sostenere il Forum con una DONAZIONE a piacere, Grazie -
Ciao BySal,
complimenti
E’ già un ottimo risultato,
eventualmente sulla parte residua (26 ore) non si potrebbe applicare il vecchio algoritmo in automatico? Potrebbe essere già una soluzione accettabile, anche se sono sicuro che troverai una soluzione ancora migliore.
Fammi sapere se hai bisogno che testi il file.
Ci aggiorniamo.
Grazie
Jjoe
-
-
Ciao ma tu parli di ore, perche, forse per questo non hai il taglio della lama!!
Ciao By Sal (8-D
Ciao By Sal (8-)
se ti piace la soluzione aiuta a sostenere il Forum con una DONAZIONE a piacere, Grazie-
Si esatto, l’algoritmo dello sfrido come ti dicevo lo applico per risolvere un problema di abbinamento orario. E’ del tutto identico al taglio lineare dei tubi solo che la lama è pari a 0
In realtà si differisce di una cosa:
Per il 26 residuo non trovando nessuna combinazione a 18, dovrei tentare di trovare una combinazione a 19 e nel caso non ci fosse a 20, fino ad un massimo di 24. Quindi la soluzione Top sarebbe partendo da ( 5 5 6 6 4) 5 5 6 4 = 20 e poi 6 finale.
Per il taglio dei tubi sarebbe cosi: invece di utilizzare solo tubi da 18 metri avendo 26 lunghezza da tagliare piuttosto che usare 2 barre da 18, potrei usare una da 19 ma non otterrei una combinazione quindi una barra da 20 metri cosi mi resterebbero solo 6 metri
Però questo è un calcolo che si può fare a mente quindi il tuo algoritmo va più che bene anzi benissimo.
Poi non so, se si riuscisse a implementare sarebbe fantastico
Grazie
-
Questa risposta è stata modificata 1 anno, 1 mese fa da
jjoe.
-
Questa risposta è stata modificata 1 anno, 1 mese fa da
-
-
Ciao io ho fatto il contrario, cioè riduco la barra, cioè faccio fare il calcolo con un x in meno calcolando che la barra massima sia di 18, guarda questi 2 calcoli con gli stessi tagli, questo e con l’algoritmo precedente
le misure sono in mm come vedi ha impiegato 3 barre con uno sfrido di 6825, però come vedi non ha calcolato la lama di 5mm
questa invece è con il nuovo algoritmo ci ha messo un poco devo inserire un contatore temporale per vedere quanto impiega a fare l’elaborazione, a volte ci mette poschissimo.
Logicamente facendo 6 tagli per 1000 mm ed 1 di 500 mm coprirebbe una barra ma con la lama sarebbero
6535 mm quindi una barra non andrebbe più bene.
ma come vedi ha risolto il problema con solo 2 barre ed uno sfrido di soli 310 mm in totale
Lo scarto è messo a 5 sarebbe che se non trova la soluzione con 6500 scende a 6495, poi 6490 e cosi fino a trovare la lunghezza giusta per le combinazioni che gli sono rimaste in quanto, quando trova una combinazione elimina quei tagli dal calcolo.
Per sicurezza ho messo un iterazione(cicli nulli) a 500 per bloccare la macro, altrimenti potrebbe andare in “loop” un ciclo infinito”, al limite se è poco posso salire o scendere a piacere.
però tu parli di metri 18 per poi salire a 19-20 fino a 24, ma che sono rotaie di treno, quando è la tua lunghezza massima, perciò non parli di lama in quanto sui mt 10mm sono poca cosa.
Ora devo solo fare molti test per vedere come si comporta e se riesce a trovare sempre una soluzione, se mi puoi passare qualche misure per i test, vedo come si comporta
Ciao By Sal (8-D
Ciao By Sal (8-)
se ti piace la soluzione aiuta a sostenere il Forum con una DONAZIONE a piacere, Grazie -
primo esempio:
26 4
37 3
2 6
1 5
4 4 4 3 3 = 18 ; 6 6 3 3 = 18; 4 4 4 3 3 =18; 4 4 4 3 3 =18; 4 4 4 3 3 =18; 4 4 4 3 3 =18; 4 4 4 3 3 =18;
4 4 4 3 3 =18; 3 3 3 3 3 3 =18; 3 3 3 3 3 3 =18; 3 3 3 3 3 3 =18; 4 4 4 4 4 =20; 5 3 3 3 = 14;
ne preparo altri…
-
secondo esempio:
19 2
29 3
3 4
1 3
2 3 2 2 3 3 3 =18; 2 3 2 2 3 3 3 =18; 3 3 3 3 3 3=18 ; 4 2 2 2 2 3 3 =18; 1 3 3 2 3 3 3 =18;
3 2 4 4 2 2 2 =19; 1 3 2 2 3 2 3 3 = 19; 1 2 3 3 3 = 12;
Terzo esempio:
15 2
10 3
1 6
6 4
2 2 3 6 2 3 =18; 2 2 4 4 3 3 =18; 2 2 2 4 4 2 2 =18; 2 2 2 4 3 2 3 =18; 2 4 3 3 3 3 = 18;
Quarto esempio:
4 3
12 2
3 3 3 3 2 2 2 =18; 2 2 2 2 2 2 2 2 2 =18; 2 2 =4;
Quinto esempio:
51 2
2 2 2 2 2 2 2 2 2= 18; 2 2 2 2 2 2 2 2 2= 18; 2 2 2 2 2 2 2 2 2= 18; 2 2 2 2 2 2 2 2 2= 18; 2 2 2 2 2 2 2 2 2= 18;
2 2 2 2 2 2 = 12;
fammi sapere.
Grazie
Jjoe
-
Un’altro esempio bello corposo che toglie ogni dubbio:
3 3
9 6
8 5
4 8
11 2
2 10
1 12
1 1
6 4
3 3 6 6 =18; 2 5 6 5=18; 8 8 2= 18; 4 4 5 5 =18; 10 2 2 2 2 =18; 4 4 5 5 = 18; 3 6 4 5 =18; 6 6 6 = 18;
12 2 2 2 = 18; 2 6 8 2 =18; 8 10= 18; 1 6 4 5= 16;
ciao.
Jjoe
-
Ciao Come ti ho detto ho abilitato lo scarto, però in senso negativo, cioè da 18 scende a 17-16-etc… però ho visto una tua combinazione che ha 20.
per cui ho abilitato un altra cella “Segno” che con lo 0zero sottrae, mentre mettendo 1uno aggiunge quindi fa 18-19-20-etc…
ho sviluppato nei 2 metodi questo e con l’incremento cioè il più, quindi 13 barre con 2 di sfrido, ma come vedi ci sono barre da 20
questo è l’altro metodo con il segno meno, ma le barre sono 14 con sfrido di 20
non so quale sia il metodo migliore, tu quale dici che sia il migliore
ci sentiamo dai se metti le altre combinazioni le sviluppo e ci sentiamo però domani
Buona serata Ciao By Sal (8-D
Ciao By Sal (8-)
se ti piace la soluzione aiuta a sostenere il Forum con una DONAZIONE a piacere, Grazie -
Complimenti per l’evoluzione dell’algoritmo. Geniale la possibilità di invertire lo scarto. Forse la prima soluzione potrebbe essere la migliore perchè rispetta le 13 barre.
Una curiosità se lo scarto fosse stato pari a zero quante combinazioni da 18 ti avrebbe restituito? Le stesse o avrebbe creato altre combinazioni magari combinando le lunghezze da 3 con quelle da 4?
Hai provato gli altri esempi che ti ho inviato, se si Come si comporta l’algoritmo?
Domani in mattinata ti invio altri test.
Grazie buona serata a te.
Jjoe
-
Ciao stamattina ho fatto i test, ecco i risultati tutti entro i parametri, il primo te l’ho inviato ieri sera
[/url]
[/url]
[/url]
[/url]
[/url]
[/url]
Anche con un poco di recupero dello sfrido
ora viene il bello, devo creare l’interfaccia, per la gestione, ma questa sembra un ottima partenza.
per il momento Ciao (8-D
Ciao By Sal (8-)
se ti piace la soluzione aiuta a sostenere il Forum con una DONAZIONE a piacere, Grazie -
Buongiorno Bysal, ottimo lavoro, non ho parole.
Ma l’interfaccia intendi realizzarla con le userform? Se posso permettermi questa non sembra un’ottima partenza come dicevi nel post precedente ma un traguardone!!!. Bravissimo!
Come richiestomi ieri sera ti inoltro altri esempi che ho preparato anche se ormai è chiaro che l’algoritmo funziona alla grande.
primo esempio:
60 3
5 2
1 18
3 4
1 6
3 3 3 3 3 3 = 18; 3 3 3 3 3 3 = 18; 3 3 3 3 3 3 = 18; 3 3 3 3 3 3 = 18; 3 3 3 3 3 3 = 18; 3 3 3 3 3 3 = 18; 3 3 3 3 3 3 = 18; 3 3 3 3 3 3 = 18; 18=18; 3 3 3 3 4 2 =18; 3 3 3 3 4 2 =18; 3 3 6 3 3 = 18; 2 4 2 2 = 10;
Secondo esempio:
19 4
2 6
2 5
2 7
7 7 4 =18; 4 4 4 6 = 18; 4 4 4 6=18; 4 5 5 4 = 18; 4 4 4 4 4 = 20; 4 4 4 4 4 = 20;
Terzo esempio:
13 3
5 2
2 2 2 3 3 3 3 =18; 3 3 3 3 3 3 = 18; 2 3 3 2 3 =13;
grazie
-
Ciao no non credo convenga con le userform, meglio direttamente sul foglio, ma devo fare in modo di poter prelevare le barre dal magazzino, e poter fare una lista tagli.
dal magazzino prelevare prima gli spezzoni quando è possibile, ed inoltre scegliere il materiale, cioè selezionare la tipologia del materiale dal magazzino esempio un tubo diam.10 o diam.8 oppure il codice del profilato, esempio una lista in questo modo
cod, lung. pezzi
12;15;3
12;5;4
45;6;3
45;10;2
20;7;4come vedi 3 tipologie di tubi e varie misure
i test li ha svolti tutti correttamente possiamo dire che ha superato il Test, come vedi
ora devo trovare il tempo per creare il file
Ciao By Sal (8-D
Ciao By Sal (8-)
se ti piace la soluzione aiuta a sostenere il Forum con una DONAZIONE a piacere, Grazie -
Ciao a tutti,
ho seguito la discussione su freeforumzone, ma provando il file ottimizzatore v.2.xls non riesco a farlo funzionare perché al momento di cliccare sul pulsante avvia non trova il file Ottimix v.1.xls
il link sopra non è più funzionante…
potreste cortesemente inviarmi il solver?
grazie della disponibilità
-aldo.
-
-
AutorePost
- Devi essere connesso per rispondere a questo topic.