Top Banner
Tesina di Ricerca Operativa E.Benetti,F.Brunelli,E .Nazzaro
16

Ricerca operativa

Jul 26, 2015

Download

guestb70ba
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Ricerca operativa

Tesina diRicerca Operativa

E.Benetti,F.Brunelli,E.Nazzaro

Page 2: Ricerca operativa

Localizzazione dei centri di emergenza Sia data una regione geografica, e un insieme di

potenziali siti in cui installare dei presidi medici di emergenza. Si vuole garantire che ogni punto del territorio sia entro una distanza (in linea d’aria) prefissata D dal centro più vicino. Si risolva il problema di determinare il numero minimo di siti e quali, e si consideri la variante in cui un punto può essere entro distanza D’>D se a distanza D c’e’ una farmacia 24h.

Page 3: Ricerca operativa

Discretizzazione utenti Il primo passo nello sviluppo del

progetto è quello di discretizzare il numero di utenti della provincia di Ferrara in modo tale da fornire, in maniera più agevole, al programma Mosel i dati necessari per l’ elaborazione.

Questo è stato fatto sovrapponendo alla cartina di Ferrara una griglia che suddivide il territtorio in quadrati di 4,5 Km di lato; i vertici di tali quadrati rappresentano i punti utenza, ed il loro lato diventa l’ unità di misura usata dal programma Xpress.

Page 4: Ricerca operativa

Gestione della distanza per la copertura totale del territtorio (1/2)

Questa discretizzazione pone un problema nella copertura del territtorio: come infatti si nota nella figura, nel caso in cui uno o più punti utenza dello stesso quadrato si trovino sul bordo dell’area di copertura del sito di emergenza, o in punti limitrofi ad esso, possono non essere incluse tutte le zone della provincia.

D

Page 5: Ricerca operativa

Gestione della distanza per la copertura totale del territtorio (2/2)

Per risolvere questa problematica, abbiamo deciso di imporre che i punti utenza siano entro una distanza D-√2/2 dal sito di emergenza.

(dove √2/2 è la metà della diagonale di un quadrato della griglia e D è la distanza in km inserita dall’utente,divisa per 4,5 al fine di renderla compatibile con la nostra discretizzazione. Analogamente è trattata la Delta delle farmacie).

D

Page 6: Ricerca operativa

Piattaforma grafica

Latitudine e longitudine del punto Distanza D Distanza delta

Siti Disponibili

Page 7: Ricerca operativa

Passaggio dati tra piattaforma grafica ed Xpress (1/3)Nell’ interfaccia in Java si è scelto di gestire i click del mouse con un

ascoltatore di eventi che, oltre ad aggiungere in un vettore le coordinate dei punti cliccati col tasto sinistro e visualizzare longitudine e latitudine con un click del tasto destro, permette di gestire anche diversi pulsanti:

Scrivi: Raccoglie le coordinate dei siti possibili e le salva in un file di nome “outputInterface.txt” in un formato comprensibile al programma Xpress

Disegna: Disegna i punti contenuti nel file “inputInterface.txt”

Reset: Resetta l’ intera interfaccia

Reset Siti: Resetta solo i siti evidenziati

Page 8: Ricerca operativa

Passaggio dati tra piattaforma grafica ed Xpress (2/3)Esempio: SX: [ 3.580246913580247 4.148148148148148 2.9876543209876543

6.197530864197531 6.074074074074074 6.172839506172839 8.962962962962964 8.17283950617284 8.592592592592593 10.493827160493828 10.296296296296296 13.08641975308642 15.82716049382716 18.54320987654321 21.061728395061728 20.0 19.679012345679013 18.320987654320987 15.358024691358025 13.45679012345679 13.308641975308642 13.580246913580247 17.061728395061728 17.506172839506174 15.45679012345679 11.358024691358025 ] SY: [ 2.617283950617284 4.296296296296297 6.074074074074074 7.08641975308642 2.765432098765432 4.271604938271605 4.197530864197531 6.567901234567901 8.987654320987655 10.246913580246913 5.950617283950617 2.3950617283950617 1.876543209876543 2.246913580246914 3.753086419753086 6.271604938271605 9.728395061728396 11.530864197530864 11.308641975308642 9.753086419753087 12.864197530864198 6.419753086419753 5.407407407407407 8.592592592592593 8.17283950617284 3.925925925925926 ] D: 6N: 26DELTA: 2

Page 9: Ricerca operativa

Passaggio dati tra piattaforma grafica ed Xpress (3/3)Acquisizione dati in Mosel:

declarations N: integer !numero siti disponibili

end-declarations

initializations from 'outputInterface.txt'N

end-initializations

declarationsSITES = 1..N ! Siti possibiliUSERS = 1..211 ! UtentiSX,SY: array(SITES) of real ! Coordinate siti possibiliUX,UY: array(USERS) of real ! Coordinate utentiD: real ! Distanza da rispettareSA: array(SITES) of mpvarA: mpvar

end-declarations

initializations from 'outputInterface.txt'SX SY D

end-initializations

initializations from 'utenti.txt'UX UY

end-initializations

Dal file “outputInterface.txt” vengono presi in ingresso: - N: Numero dei siti disponibili- SX,SY: Coordinate dei siti- D: Distanza richiesta

Dal file “utenti.txt” invece:- UX,UY: Coordinate dei punti utenza discretizzati

Page 10: Ricerca operativa

Vincoli e funzione obiettivo del programma Xpress forall (i in SITES) SA(i) is_binary Questo vincolo impone che un sito sia attivato (valore 1) o non

attivato (valore 0).

forall (b in USERS) sum(a in SITES) (SA(a)*OK(a,b)) >= 1

Questo vincolo controlla, per ogni punto utenza, che esso sia coperto da almeno 1 sito. Questo si ottiene moltiplicando il vettore riga dei siti con ogni colonna della matrice di ammissibilità OK(a,b), che ha per colonne i punti utenza e per righe i siti.

OBIETTIVO: Minimizzando la somma dei valori nel vettore dei siti, minimizzeremo il numero dei siti.

A = sum(i in SITES) SA(i)minimize(A)

Page 11: Ricerca operativa

Creazione matrice ammissibilitàforall(a in SITES,b in USERS) do

DIST(a,b):= sqrt((SX(a)-UX(b))^2 + (SY(a)-UY(b))^2)if(DIST(a,b)<=(D-(sqrt(2)/2))) then

OK(a,b) := 1else OK(a,b) := 0end-if

end-do

Per ogni sito disponibile viene prima calcolata la distanza rispetto a ogni utente e memorizzata nella matrice DIST(a,b).

Se questa distanza è <= a quella richiesta dalle specifiche allora la posizione corrispondente nella matrice di ammissibilità OK(a,b) assumerà valore 1, altrimenti 0

Page 12: Ricerca operativa

Passaggio inverso tra Xpress e piattaforma grafica

fopen("inputInterface.txt",F_OUTPUT)forall(a in SITES | getsol(SA(a))>0) do

write(SX(a),",",SY(a),",") end-do

write("%") fclose(F_OUTPUT)

Esempio:

4.14815,4.2963,10.4938,10.2469,13.0864,2.39506,20,6.2716,18.321,11.5309,%

Page 13: Ricerca operativa

Output grafico (Emergenza)

Siti scelti da Xpress

Page 14: Ricerca operativa

Output grafico (Farmacie)

Page 15: Ricerca operativa

Aggiunta delle Farmacie! Distanze utenti e farmacie e matrice ammissibilita distanzaforall(a in FARMA,b in USERS) do

DISTF(a,b):= sqrt((FX(a)-UX(b))^2 + (FY(a)-UY(b))^2)if(DISTF(a,b)<=D) then

OKF(a,b) := 1else OKF(a,b) := 0end-if

end-do

! Distanze tra siti e utenti e matrice ammissibilità distanzaforall(a in SITES,b in USERS) do

DIST(a,b):= sqrt((SX(a)-UX(b))^2 + (SY(a)-UY(b))^2)if(sum(c in FARMA) OKF(c,b) >= 1) then

if(DIST(a,b)<=((D-(sqrt(2)/2))+DELTA)) then

OK(a,b) := 1else OK(a,b) := 0end-ifelse if(DIST(a,b)<=(D-(sqrt(2)/2))) then

OK(a,b) := 1else OK(a,b) := 0end-if

end-ifend-do

Nel file “utentifarma.txt” oltre ai punti utenza avremo, in questo caso, 4 farmacie:FX: [4 9 13 14] FY: [3 5 3 12]

Dal file “inputIterface.txt” prenderemo in ingresso anche la Delta definita dall’utente.

Analogamente al caso precedente, si calcoleranno le distanze tra farmacie e punti utenza e verranno memorizzati in DISTF(a,b). A seconda che rispettino o meno la distanza D richiesta verrà scritto 1 o 0 nella matrice OKF(a,b).

Nel controllo delle distanze tra siti e punti utenza nella matrice DIST(a,b) se nella colonna corrispondente a un utente nella matrice OKF vi è almeno un 1 (ovvero, è presente almeno una farmacia a distanza <=D), nella matrice di ammissibilità OK(a,b) metteremo un 1 se la distanza è <= D-(sqrt(2)/2))+DELTA, se non vi è una farmacia la distanza verrà calcolata come prima.

Page 16: Ricerca operativa

Commenti La scelta di far comunicare interfaccia e

programma Xpress tramite file è stata determinata dal fatto che le classi di integrazione per Java fornite da Mosel sono per i soli utenti aventi licenza completa, questo avrebbe limitato l’ utilizzo dell’ interfaccia Java.

L’ utilizzo del file consente invece di realizzare un’ architettura client/server, dove il client possiede l’interfaccia e il server il processo servitore in Xpress, grazie alla quale si può pensare ad un utilizzo distribuito di questa applicazione.