cerca
Ricerca Operativa - PNL - Palle inscatolate - 12.01.09
modifica cronologia stampa login logout

Wiki

UniCrema


Materie per semestre

Materie per anno

Materie per laurea


Help

Ricerca Operativa - PNL - Palle inscatolate - 12.01.09

Torna alla pagina di Ricerca Operativa


 :: Ricerca Operativa - PNL - Palle inscatolate - 12.01.09 ::

Testo del problema

Un’azienda produttrice di addobbi natalizi produce palle colorate per gli alberi di Natale.
L’ufficio vendite ha studiato un kit di palle colorate di vari colori e dimensioni da vendere in un’unica scatola. Si tratta di progettare in modo ottimale la scatola, in modo che possa contenere tutto il kit e che occupi il minor volume possibile. Per motivi di facilità di trasporto, la scatola deve essere a forma di parallelepipedo.
Formulare il problema, classificarlo e risolverlo con i dati del file PALLE.TXT.

Dati

Il kit è così composto:

  Tipo        Colore    Raggio    Numero
Ciliegina     Rosso       2          3
Classica      Rosso       4          2
Candida       Bianco      3          3
Palla di neve Bianco      4          4
Stellina      Azzurro     2          3
Luminosa      Trasparente 3          2

Il raggio è espresso in centimetri.

Formulazione del problema

Dati

  • pal = 6 (numero di tipi di palline che compongono il kit)
  • ragi (raggio della pallina di tipo i=1..6) [cm]
  • numi (quantità di palline di tipo i=1..6)
  • dim = 3 (numero di dimensioni in cui si estende la scatola, evidentemente 3 dato che viviamo in un mondo tridimensionale)

Variabili

  • xj (dimensioni della scatola) (con j = 1..3) [cm]
  • yij (coordinata della pallina i=1..6 nella dimensione j=1..3)

Funzione obiettivo

Bisogna minimizzare il volume della scatola:
min x1 * x2 * x3 [cm^3]

Vincoli

  • vincolo che imponga che le palline non siano sovrapposte, quindi che faccia in modo che la distanza tra i loro centri non sia inferiore alla somma dei loro raggi (questo garantisce la non sovrapposizione in tutte e tre le dimensioni). Considerando due palline alla volta, la prima con indice i e la seconda con indice k, avremo:
    [(somma)j (yij – ykj)2] >= (ragi + ragk)2
    (per ogni i e per ogni k diversa da i)

Abbiamo bisogno poi di due vincoli che impongano che ogni pallina sia interamente contenuta nella scatola, quindi che la sua distanza dalle pareti sia maggiore uguale al raggio:

  • ...sia dall'estremità "sinistra":
    yij >= ragi (per ogni i e per ogni j)
  • ...che da quella "destra":
    yij <= xj – ragi (per ogni i e per ogni j)

Linghizzazione del problema

! esercizio - Palle inscatolate; 
model: 

sets: 
pallina /1..14/: rag; 
dimensione /1..3/: x; 
coordinata (pallina,dimensione): y; 
endsets 

data: 
enddata 

! funzione obiettivo; 
min = x(1) * x(2) * x(3); 

! vincoli di non-sovrapposizione tra palline; 
@for(pallina(i): 
     @for(pallina(k) | k #GT# i: 
          @sum(dimensione(j): (y(i,j) - y(k,j))^2) >= (rag(i) + rag(k))^2  
     ) 
); 

! vincoli di contenimento nella scatola; 
@for (pallina(i): @for(dimensione(j): y(i,j) >= rag(i)) ); 
@for (pallina(i): @for(dimensione(j): y(i,j) <= x(j) - rag(i))); 

end

Torna alla pagina di Ricerca Operativa