cerca
Ricerca Operativa - PNL - Resistenze - 12.02.09
modifica cronologia stampa login logout

Wiki

UniCrema


Materie per semestre

Materie per anno

Materie per laurea


Help

Ricerca Operativa - PNL - Resistenze - 12.02.09

Torna alla pagina di Ricerca Operativa


 :: Ricerca Operativa - PNL - Resistenze - 12.02.09 ::

Testo del problema

Si vuole progettare un semplice componente resistivo combinando in serie due blocchi, ciascuno dei quali è formato da due resistori in parallelo. I quattro resistori da usare possono essere scelti all’interno di un insieme di resistori disponibili.
Come effetto si vuole ottenere un componente la cui resistenza sia il più vicina possibile (non importa se maggiore o minore) ad un valore desiderato.
Formulare il problema, classificarlo e risolverlo con i dati del file RESISTEN.TXT.

Dati

Sono disponibili 6 tipi di resistori.

Tipo  Numero  Resistenza
 1      1         12
 2      1         15
 3      2         20
 4      2         22
 5      1         30
 6      1         40

Il valore di resistenza desiderato è 65.

Formulazione del problema

Dati

  • resistori = 6 (numero di tipi di resistori)
  • dispResi (numero di resistori di tipo i=1..6 disponibili)
  • resistenzai (resistenza del resistore i=1..6)
  • posizioni = 4 (numero posizioni possibili in cui collocare il resistore)
  • resDes = 65 (valore di resistenza totale desiderato)

Variabili

  • xij (variabile binaria che indica se il resistore i=1..6 è nella posizione j=1..4)

E' comodo inoltre definire una variabile continua resPosj che contenga il valore della resistenza nella posizione j, ed una variabile continua resTot per il calcolo della resistenza totale. Le definiremo meglio poi nei vincoli.

Funzione obiettivo

Si vuole minimizzare lo scostamento massimo dal valore desiderato, quindi introduciamo la variabile ausiliaria z che definiremo poi nei vincoli:
min z

Vincoli

  • vincolo che impone che in ogni posizione ci sia un unico resistore:
    (somma)i xij = 1 (per ogni j)
  • vincolo che impone che non si utilizzino più resistori di tipo i di quanti siano disponibili:
    (somma)j xij <= dispResi (per ogni i)
  • vincolo che introduce la variabile ausiliaria resPosj descritta nel paragrafo sulle variabili:
    resPosj = (somma)j xij * resistenzai (per ogni j)
  • vincolo che introduce la variabile ausiliaria resTot per il calcolo della resistenza totale:
    resTot = [(resPos1 * resPos2) / (resPos1+ resPos2)] + [(resPos3 * resPos4) / (resPos3 + resPos4)]
    Con queste ultime due variabili ausiliarie ci semplifichiamo la vita per la notazione delle espressioni, non è che sono realmente necessarie per risolvere il problema. Vabbè, si chiamano ausiliarie apposta.
  • vincoli per definire la variabile ausiliaria z necessaria per la nostra funzione obiettivo. Vogliamo trovare il massimo scostamento in valore assoluto dal valore desiderato, quindi dovremo considerare sia il caso in cui resTot sia maggiore di resDes, sia il caso contrario:
    z >= resTot - resDes
    z >= resDes - resTot

Linghizzazione del problema

! esercizio - Resistenze;
model:

sets:
resistore /1..6/: dispRes, resistenza;
posizione /1..4/: resPos;
disposizione(resistore,posizione): x;
endsets

data:
resistenza = 12 15 20 22 30 40;
dispRes =  1  1  2  2  1  1;
resDes = 65;
enddata

! funzione obiettivo;
min = z;

! vincolo perché ci sia un unico resistore per posizione;
@for(posizione(j): @sum(resistore(i): x(i,j)) = 1);

! vincolo perché non si usino più resistori di quelli disponibili;
@for(resistore(i): @sum(posizione(j): x(i,j)) <= dispRes(i));

! vincolo per definire le variabili ausiliarie resPos;
@for(posizione(j): resPos(k)= @sum(resistore(i): resistenza(i) * x(i,j)));

! vincolo per definire la variabile ausiliaria resTot;
resTot = [(resPos(1) * resPos(2))/(resPos(1) + resPos(2))] 
         + [(resPos(3) * resPos(4))/(resPos(3) + resPos(4))];

! vincoli per definire la variabile ausiliaria z;
z >= resDes - resTot;
z >= resTot - resDes;

! definisco le variabili x come binarie;
@for(tipo(i): @for(posiz(k): @bin(x(i,k))));

end

Torna alla pagina di Ricerca Operativa