cerca
Ricerca Operativa - Museo
modifica cronologia stampa login logout

Wiki

UniCrema


Materie per semestre

Materie per anno

Materie per laurea


Help

Uni.ROMuseo History

Hide minor edits - Show changes to output

Changed lines 43-44 from:
! Occorre quindi una variabile ausiliaria, massimizzarla, e imporre che sia <= a tutti e ! tre gli angoli;
to:
! Occorre quindi una variabile ausiliaria, massimizzarla, e imporre
!
che sia <= a tutti e tre gli angoli;
Added lines 1-70:
(:title Ricerca Operativa - Museo:)
%titolo%''':: Ricerca Operativa - Museo ::'''

!!Testo del problema
C'è una stanza in un museo, con 3 quadri appesi alle pareti secondo certe coordinate. Si vuole mettere un sensore d'allarme sul soffitto, in modo che esso "veda" i quadri sotto un certo angolo. La stanza è quadrata, con un lato di 16 metri; sul soffitto il sensore deve essere almeno a 1 metro da ogni parete.

L'ingegner Tizio vuole mettere il sensore in modo tale da massimizzare la somma complessiva degli angoli sotto i quali il sensore vede i quadri.

L'ingegner Caio vuole mettere invece il sensore in modo da massimizzare la minima ampiezza tra tutti e tre gli angoli.

Immaginando di vedere la stanza dal di sopra, ogni quadro ha due coordinate, perché è rappresentato da un segmento:
# p'_1_' = (0,0), q'_1_' = (0,4)
# p'_2_' = (0,10), q'_2_' = (6,16)
# p'_3_' = (10,0), q'_1_' = (15,0)

!!!Risoluzione
Dato un triangolo di lati ABC, abbiamo che: '''c'^2^' = a'^2^' + b'^2^' - 2abcos(alfa)''', con '''alfa''' l'angolo opposto al lato '''c'''.

Consideriamo i quadri, con le coordinate viste sopra, come il lato '''c''' di un triangolo con vertice il sensore.

!!!Codice LINGO
[@
model:

SETS:
quadri /1..3/: xp, yp, xq, yq, alfa, a, b, c;
ENDSETS


DATA:
! Le coordinate di ciascun quadro sono messe in colonna;
xp = 0 0 10;
yp = 0 10 0;
xq = 0 6 15;
yq = 4 16 0;
ENDDATA

!Funzione obiettivo: ci sono Tizio e Caio;
! Tizio vuole massimizzare la somma dei tre angoli, esce 3.58 etc. in radianti;
!max = @sum(quadri(i): alfa(i));

!Caio invece vuole massimizzare il minimo angolo;
! Occorre quindi una variabile ausiliaria, massimizzarla, e imporre che sia <= a tutti e ! tre gli angoli;
max = aux;
@for (quadri(i): aux <= alfa(i));


! Calcolo la lunghezza dei lati;
@for(quadri(i): a(i) = ((xp(i) - X)^2 + (yp(i)- Y)^2)^1/2);
@for(quadri(i): b(i) = ((xq(i) - X)^2 + (yq(i)- Y)^2)^1/2);
@for(quadri(i): c(i) = ((xp(i) - xq(i))^2 + (yp(i)- yq(i))^2)^1/2);

! Calcolo l'angolo alfa per ogni triangolo;
@for(quadri(i): (c)^2 = a(i)^2 + b(i)^2 - 2*a(i)*b(i) * @cos(alfa(i)));

!Vincolo sull'ampiezza dell'angolo;
@for(quadri(i): alfa(i) <= 3.14);

!Vincoli sulla posizione del sensore: deve essere almeno ad un metro dalle pareti;
X >= 1;
X <= 15;
Y >= 1;
Y <= 15;
end
@]

Come si vede, le funzioni obiettivo sono 2, perché 2 sono le proposte. Comunque alla fine salta fuori che i risultati sono molto simili.

----
[[Torna alla pagina di Ricerca Operativa -> Ricerca Operativa]]