Torna alla pagina di Ricerca Operativa
:: Ricerca Operativa - PLI - Ambulanze - 16.04.09 ::
Un territorio che comprende un certo numero di centri abitati deve essere coperto da un dato numero di ambulanze per il pronto intervento. Le ambulanze possono sostare presso apposite rimesse dislocate nel territorio, in posizioni date. Da ciascuna di queste posizioni ogni ambulanza può coprire alcuni dei centri abitati, ma non tutti. Un centro abitato si intende coperto quando esiste almeno un’ambulanza in grado di raggiungerlo entro un dato tempo limite.
Conoscendo la popolazione residente in ciascuno dei centri abitati, localizzare le ambulanze in modo da massimizzare la copertura della popolazione.
I centri abitati sono 9, le postazioni disponibili sono 6, le ambulanze sono 3. Tab. 1: Popolazione [n. abitanti] Paese Popolazione 1 250 2 450 3 1000 4 825 5 1100 6 940 7 120 8 280 9 480 Tab. 2: Tempo di intervento [minuti] Paese Postazione 1 2 3 4 5 6 1 1 3 12 6 12 4 2 2 2 11 2 13 8 3 5 3 12 0 19 7 4 7 5 14 1 21 9 5 5 0 8 3 11 3 6 14 8 0 12 6 12 7 17 12 3 16 2 9 8 12 8 8 12 2 4 9 7 3 12 7 7 0 Tab. 3: Disponibilità ambulanze N. Ambulanze Frazione di tempo 0 15% 1 20% 2 30% 3 35% Tempo max di intervento = 8 minuti.
(somma)i max xi * popoli
! esercizio: ambulanze; model: sets: centro /1..9/: popol, x; postazione /1..6/: y; intervento(centro,postazione): tInt; endsets data: popol = 250 450 1000 825 1100 940 120 280 480; tInt = 1 3 12 6 12 4 2 2 11 2 13 8 5 3 12 0 19 7 7 5 14 1 21 9 5 0 8 3 11 3 14 8 0 12 6 12 17 12 3 16 2 9 12 8 8 12 2 4 7 3 12 7 7 0; ambul = 3; maxInt = 8; enddata ! funzione obiettivo; max = @sum(centro(i): x(i) * popol(i)); ! vincolo sulla disponibilità di ambulanze; @sum(postazione(j): y(j)) = ambul; ! vincolo sulla copertura dei centri; @for(centro(i): x(i) <= @sum(postazione(j) | tInt(i,j) #LE# maxInt: y(j)) ); ! definisco le variabili binarie; @for(centro(i): @bin(x(i))); @for(postazione(j): @bin(y(j))); end