Partizioni di un insieme



  • Partizioni di un insieme
    di GiuMar (utente non iscritto) data: 28/03/2015 18:22:34

    Ciao a tutti.
    Premetto che non sono un grande esperto di VBA per Excel anche se me la cavo.
    Ho un problema che non sono riuscito a risolvere.
    Devo calcolare tutte le partizioni di un insieme di N elementi e sottoporre ognuna di questa partizioni ad una funzione valore al fine di determinare la partizione di elementi ottima.
    Provo a rendere l'idea con un esempio. Immaginiamo di avere alcuni rodotti con alcune caratteristiche: quantità prodotte nel corso degli ultimi 3 anni, prezzi di vendita degli ultimi 3 anni, quantità vendute negli ultimi 3 anni, ecc.
    Ho una funzione di tali caratteristiche da massimizzare (ad esempio il grado di attrattività per i clienti di un certo prodotto).
    Il problema è però che devo considerare non solo i prodotti singolarmente, ma anche le loro partizioni.
    Quindi, se il numero di prodotti N è par a 3, le partizioni sono le seguenti:
    1 2 3
    12 3
    13 2
    1 23
    123
    Si tratta quindi di calcolare le combinazioni senza ripetizioni di N elementi in classe k (per k che va da 1 a N) e di combinarle con le combinazioni senza ripetizione degli N-k elementi rimanenti in classe m, con m che va da 1 a N-k.
    L'accortezza è che per maggior efficienza (e per numeri di elementi superiori a 3) potrei evitare di considerare combinazioni simmetriche di combinazioni elementari. Ad esempio con 5 elementi le partizioni:
    12 3 45
    e
    45 3 12
    coincidono.
    Avevo sfruttato una macro per generare tutte tali partizioni in schede excel, e la mia intenzione era di sostituire poi agli indici delle partizioni gli elementi (nel caso dell'esempio. i prodotti) da impiegare come variabili della funzione.
    Tuttavia il numero delle partizioni cresce vertiginosamente per un numero di elementi superiori a 8 e Excel si lamenta e si impalla.
    Allora mi chiedevo se sia possibile generare tali partizioni impiegando ad esempio delle funzioni o routine con Array ma, anziché generarle tutte e poi passarla alla funzione da ottimizzare, passarle alla funzione man mano che vengono generate in modo da verificare subito se una nuova partizione domina la precedente e decidere solo in tal caso di registrarla sulla scheda di excel.
    In questo modo eviterei di avere schede con migliaia e migliaia di righe inutili.
    Il mio problema è che non sono in grado di generare quella routine o funzione per produrre le partizioni.
    Spero di essere stato chiaro e che qualcuno possa interessarsi al mio problema.
    In ogni caso grazie anche solo per leggere questa richiesta.
    Giuseppe



  • di lepat (utente non iscritto) data: 01/04/2015 08:03:20

    per ottenere risposte su un problema complesso non basta una spiegazione verbale, occorre allegare un esempio corredato di
    1) macro già fatte
    2) risultato desiderato