2010-03-06 13 views
7

Sto cercando una soluzione di pseudo-codice su ciò che effettivamente è lo Multiple Knapsack Problem (l'istruzione di ottimizzazione si trova a metà della pagina). I think questo problema è NP Complete quindi la soluzione non deve essere ottimale, piuttosto se è abbastanza efficiente e facilmente implementata sarebbe buona.Progettazione dell'algoritmo: puoi fornire una soluzione al problema dello zaino multiplo?

Il problema è questo:

  • Ho molti elementi di lavoro, con ciascuna un importo diverso (ma determinato e noto) di tempo per completare.
  • Devo dividere questi elementi di lavoro in gruppi in modo da avere il numero più piccolo di gruppi (idealmente), con ogni gruppo di elementi di lavoro che non richiede più di una soglia totale - diciamo 1 ora.

Sono flessibile sulla soglia: non deve essere applicata rigidamente, sebbene debba essere chiusa. La mia idea era quella di allocare gli oggetti di lavoro in bidoni in cui ogni bin rappresentava il 90% della soglia, 80%, 70% e così via. Potrei quindi abbinare elementi che prendono il 90% a quelli che prendono il 10% e così via.

Qualche idea migliore?

+1

Hai provato a leggere il PDF collegato dalla pagina di Wikipedia? http://www.diku.dk/hjemmesider/ansatte/pisinger/95-1.pdf (PDF) –

+0

sì, ho avuto problemi a dare un senso a dichiarazioni come 1w e ñ e ð ðñ | y e ðñ ò ñ e ð ó – MalcomTucker

+0

ok, non ha funzionato, ma hai avuto l'idea – MalcomTucker

risposta

5

È necessario http://www.or.deis.unibo.it/knapsack.html, capitolo 6.6 "Problema multiplo di knapscack - algoritmi approssimativi". C'è uno pseudo-codice (stile Pascal) nelle implementazioni di testo e Fortran (sì, è un vecchio libro) come un file ZIP.

+1

+1 grazie mille per il link BTW sia Martello che Toth erano i miei professori a Uni !!! –

1

Per quanto ne so, il problema è NP completo (Wikipedia confirms), quindi probabilmente non ha molto senso tentare di risolverlo esattamente. Tuttavia, qualsiasi numero di approcci potrebbe essere sufficiente per voi buone: avidi, algoritmi genetici, simulare ricottura ... avido è probabilmente il più facile da implementare:

while (time available in block greater than smallest task duration) 
    find the longest fitting task 
    add it 

... si ottiene l'idea.

+0

Ho il seguente problema: https://math.stackexchange.com/questions/2415617. Ci sono approcci avidi per questo? – Royi

Problemi correlati