Zaino problema in Excel VBA
Di seguito vedremo un programma in Excel VBA che risolve un piccolo esempio di un problema di zaino.
Definizione: Dato un insieme di elementi, ciascuno con un peso e un valore, determinare gli elementi da includere in un insieme in modo che il valore totale è il più ampio possibile e il peso totale è inferiore ad un determinato limite.
Il suo nome deriva dal problema affrontato da qualcuno che è vincolata da uno zaino di dimensioni fisse e deve riempire con i prodotti più utili.
Esempio: 5 oggetti con pesi, valori limite e trovati.
In Excel questo problema si presenta come segue:
-
In primo luogo, si dichiara cinque variabili di tipo matrimoniale con limite di nomi, il peso, il valore, e pesoTotale MaximumValue.
Dim limit As Double, weight As Double, value As Double, totalWeight As Double, maximumValue As Double
-
Successivamente, si dichiara cinque variabili di tipo intero con nomi i, j, k, l, m.
Dim i, j, k, l, m As Integer
-
si inizializza due variabili. Inizializziamo il limite variabile con il valore della cella D6. Inizializziamo la MaximumValue variabile con valore 0.
limit = Range("D6").value maximumValue = 0
-
Successivamente, controllare ogni possibile soluzione. o possiamo includere un elemento (1) o lasciarlo fuori (0). Iniziamo 5 Per i cicli successivi. Uno per ogni voce.
For i = 0 To 1 For j = 0 To 1 For k = 0 To 1 For l = 0 To 1 For m = 0 To 1
-
Si calcola il peso e il valore di una possibile soluzione.
weight = 12 i + 2 j + 1 k + 1 l + 4 m value = 4 i + 2 j + 2 k + 1 l + 10 m
-
Solo se il valore è superiore a MaximumValue e il peso è inferiore al limite, abbiamo trovato una nuova soluzione migliore.
If value > maximumValue And weight <= limit Then
-
Se è vero, si scrive la nuova soluzione per fila 4, peso e pesoTotale valore MaximumValue.
Range("B4").value = i Range("C4").value = j Range("D4").value = k Range("E4").value = l Range("F4").value = m totalWeight = weight maximumValue = value
-
Non dimenticare di chiudere l’istruzione if.
End If
-
Non dimenticare di chiudere il 5 per cicli successivi.
Next m Next l Next k Next j Next i
Excel VBA controlla ogni soluzione possibile in questo modo e di conseguenza apparirà la soluzione ottimale in fila 4. Si ricordi, 1 mezzi includiamo un elemento, 0 significa lasciamo fuori.
-
Infine, scrivere pesoTotale e MaximumValue della soluzione ottima rispettivamente cella B6 e B8.
Range("B6").value = totalWeight Range("B8").value = maximumValue
-
Test del programma.
Risultato:
Conclusione: è ottimale per includere gli ultimi quattro elementi con un valore massimo di 15. Questa soluzione con un peso totale di 2 + 1 + 1 + 4 = 8 non supera il limite di 15.
Nota: facendo la variabile pesi e valori che è possibile risolvere qualsiasi problema dello zaino di queste dimensioni (vedi file Excel scaricabile).