uni
Questo è un Problema di Programmazione Lineare Intera (PLI).
Ho un numero di oggetti di cui conosco il peso e ho un indeterminato numero di contenitori (Bin) di cui conosco la capienza.
Trovare l’assegnamento che porti all’utilizzo del minor numero possibile di contenitori.

Modello

oggetti, contenitori
Variabili:

è di dimensioni:

Risoluzione

Essendo questo un problema di PLI, troviamo una , una , e applichiamo un algoritmo di riduzione del gap.
Il più adatto, per la natura binaria del problema, è l’Algoritmo di Riduzione del Gap Branch and Bound.
Abbiamo bisogno di una approssimazione del numero di bin necessari, meno ne mettiamo nel modello e più velocizziamo. Alla peggio dovremo utilizzare contenitori (numero di oggetti).

Algoritmi per la Vs

Per trovare la soluzione ottimale abbiamo 3 algoritmi, in ordine di accuratezza:
decreasing = ordinare oggetti per peso decrescente

  1. next-fit-decreasing:
    Il primo contenitore é il contenitore corrente.
    Se possibile, assegna un oggetto al contenitore corrente;
    altrimenti assegnalo ad un nuovo contenitore, che diventa quello corrente.
  2. first-fit-decreasing:
    Assegna ogni oggetto al primo contenitore usato che puó contenerlo.
    Se nessuno di essi puó contenerlo, assegna l’oggetto ad un nuovo contenitore.
  3. best-fit-decreasing:
    ordino i bin per capienza rimanente decrescente
    prendo un oggetto, lo metto nel bin con minore capienza rimanente, se non entra, in quello dopo
    ripeto: riordino i bin, metto un oggetto, riordino ecc

Vi

La valutazione inferiore di questo problema è particolarmente semplice, è l’approssimazione per eccesso del valore associato alla soluzione del rilassato continuo del problema:

Comando Matlab

Bisogna usare Intlinprog, la difficoltà è scrivere poiché è in funzione di un’altra variabile, le .
Semplicemente porto le b, che sono , a sinistra dell’uguale, come fossero una ulteriore

# Nvariabili = Noggetti x Ncontenitori + Ncontenitori = Ncontenitori(Noggetti + 1)
# Aeq è Noggetti x Nvariabili, esempio 6x28
Aeq=[1000001000001000001000000000 ; 0100000100000100000100000000 ; 0010000010000010000010000000 ; ecc]
beq=[1 ; 1 ; 1 ; 1 ; 1 ; 1]
b=[0 ; 0 ; 0 ; 0]
A=[1riga ; 2riga ; 000000 000000 p1p2p3p4p5p6 000000 00 -P 0]