Laboratorio di Algoritmi

Documenti analoghi
Laboratorio di Algoritmi

Laboratorio di Python

PRINCIPI GENERALI. Corso di Tecniche di Simulazione, a.a. 2005/2006. Francesca Mazzia. Dipartimento di Matematica Università di Bari.

Laboratorio di Algoritmi

Modelli descrittivi, statistica e simulazione

TECNICHE DI SIMULAZIONE

ESEMPI DI SIMULAZIONE

Sistema : collezione di componenti (elementi, entità) interdipendenti che interagiscono fra loro in accordo a specifiche predefinite.

Lezione 3. I numeri relativi

PUNTATORI. Ivan Lanese

Teoria delle File di Attesa

Laboratorio di Algoritmi e Strutture Dati

2. Simulazione discreta: approcci alla simulazione

Laboratorio di matematica: processamento, interpretazione ed elaborazione dei dati

Il tipo astratto coda con priorità: specifiche sintattiche e semantiche. Realizzazioni.

Lezione 4. Sommario. L artimetica binaria: I numeri relativi e frazionari. I numeri relativi I numeri frazionari

Uso di base dell ordinamento di dati in Microsoft Excel

FPL Prova di Laboratorio

Kangourou della Matematica 2019 Coppa Ecolier a squadre Finale Cervia, 9 maggio Quesiti

Programmazione I Paolo Valente /2018. Lezione 6. Notazione posizionale

Gestione degli impegni Requisiti generali Si fissi come ipotesi che la sequenza di impegni sia ordinata rispetto al tempo,, e che ogni lavoratore abbi

Laboratorio di Algoritmi

N.B. Per la risoluzione dei seguenti esercizi, si fa riferimento alle Tabelle riportate alla fine del documento.

Simuliamo ora il funzionamento di LRU sulla reference string data:

Alee in macchine combinatorie

Programmazione I Paolo Valente /2017. Lezione 6. Notazione posizionale

Indicazioni operative essenziali all utilizzo del REGISTRO ELETTRONICO NUVOLA

Ingegneria del Software 17. Esercizi riassuntivi. Dipartimento di Informatica Università di Pisa A.A. 2014/15

Alee in macchine combinatorie. Le Alee

CORSO DI PROGRAMMAZIONE

Codifica binaria: - numeri interi relativi -

Informazione e Registri - 2

I furgoncini di Algoritmia

Informazione binaria: - rappresentazione dei numeri naturali e interi relativi -

SIMULAZIONE DI SISTEMI CASUALI 2 parte. Processi stocastici e teoria delle code. Processi stocastici

In questa lezione Strutture dati elementari: Pila Coda Loro uso nella costruzione di algoritmi.

Informatica 3. LEZIONE 16: Heap - Codifica di Huffmann. Modulo 1: Heap e code di priorità Modulo 2: Esempio applicativo: codifica di Huffmann

Laboratorio di Programmazione

Esercitazione 4 Heap

Strutture Dati per Inserimento Ordinato

Strutture Dati per Inserimento Ordinato. Luca Abeni

Intelligenza Artificiale. Ricerca euristica L algoritmo A*

Verifiche (verifiche)

La codifica delle informazioni numeriche ed alfanumeriche.

GALP Software per la gestione delle gare d appalto. si riporta un esempio di gara: col criterio del prezzo più basso

1) Disegnare la rete di progetto con le attività sugli archi, e la rete di progetto con le attività sui nodi.

Metodi e Modelli Matematici di Probabilità per la Gestione Prova scritta 13/01/2010

Progetti Algoritmi e Strutture Dati A.A Si intende realizzare una coda di priorità mediante un max-heap.

Il linguaggio C. Prof. E. Occhiuto INFORMATICA 242AA a.a. 2010/11 pag. 1

Esercizi

Algoritmi e Strutture Dati

Variabili e tipi di. Alessandra Giordani Lunedì 11 aprile

Simulazione. D.E.I.S. Università di Bologna DEISNet

PROBLEMA DEI CAMMINI MINIMI [CORMEN ET AL. CAP. 24] Il costo di cammino minimo da un vertice u ad un vertice v è definito nel seguente modo:

modificato da andynaz Cambiamenti di base Tecniche Informatiche di Base

Contabilità di magazzino

Conversione di base. Conversione decimale binario. Si calcolano i resti delle divisioni per due

Esercizi su strutture dati

Tabelle Hash. Implementazioni Dizionario. Implementazione. Tabelle ad accesso diretto. Tempo richiesto dall operazione più costosa:

Introduzione. Corso di Tecniche di Simulazione, a.a. 2005/2006. Francesca Mazzia. Dipartimento di Matematica Università di Bari.

SISTEMI DI ELABORAZIONE

Questi appunti costituiscono soltanto una traccia sintetica del Corso di Laboratorio di Fisica, a prescindere dalle opportune spiegazioni e dai

Teoria delle File di Attesa Una coda, o fila di attesa, si forma quando degli utenti attendono di essere serviti da uno o più serventi.

INTRODUZIONE ALLA PROGRAMMAZIONE

Algoritmi e Strutture Dati - II modulo Soluzioni degli esercizi

Note per la Lezione 21 Ugo Vaccaro

Casi di prova. Il problema dell ordinamento. Casi di prova. Casi di prova. Casi di prova

Pianificazione di un esperimento di simulazione

Lezione 2. La conoscenza del mondo

Algoritmi e Strutture Dati

CONVERSIONE BINARIO DECIMALE NB: Convertire in decimale il numero binario N = N =

Calcolo su Polinomi ===================

Variabile, costante ed espressione

APPUNTI PER IL CORSO DI MATEMATICA APPLICATA. 1. Lezione 1 Richiamo brevemente alcune notazioni della teoria degli insiemi.

SISTEMI DI ELABORAZIONE

1 Definizione di sistema lineare omogeneo.

INDICI PER FILE. Accesso secondario. Strutture ausiliarie di accesso

Algoritmi e Strutture Dati

ESEMPI DI SIMULAZIONE

Problemi algoritmici e Complessità degli algoritmi

Modelli descrittivi, statistica e simulazione

Corso di Informatica

Algoritmi e strutture dati

Sistemi di numerazione

Raccolta dati di qualità dei servizi telefonici

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A Pietro Frasca.

Caratteri e stringhe

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A Pietro Frasca.

6) Descrivere con un diagramma a blocchi un algoritmo che legga da input due numeri ne calcoli il prodotto in termini di somme ripetute.

Generalità. Strumenti per l Elaborazione di Dati. Generalità. Generalità. I dati: I dati: I dati:

Sviluppo di programmi

Variabili e input/ Alessandra Giordani Lunedì 18 marzo

Elementi di informatica

Laboratorio di Algoritmi e Strutture Dati

PROCESSI NON SEQUENZIALI E TIPI DI INTERAZIONE

Corso di Informatica Generale (C. L. Economia e Commercio) Ing. Valerio Lacagnina Rappresentazione dei numeri relativi

Algoritmi e Strutture Dati

8 Valore assoluto. 8.1 Definizione e proprietà

Laboratorio di Algoritmi e Strutture Dati. Aniello Murano. people.na.infn.it/~murano/ Murano Aniello - Lab. di ASD Terza Lezione

RETI LOGICHE T Ingegneria Informatica. Esercitazione 3 Reti Sequenziali Sincrone

Transcript:

Laboratorio di Algoritmi Progetto Supermercato (giugno 2017) Nota: La scadenza del progetto è fissata per lunedì 19 giugno compreso. Nota: Questa versione del documento è stata aggiornata il 13 giugno. Le modifiche principali sono: 1. coerentemente con quanto detto in aula, sono previsti 4 tipi di eventi anziché solo 3: agli eventi INGRESSO (ingresso di un cliente nel supermercato, prima indicato come ARRIVO), CASSA (arrivo di un cliente a una cassa) e USCITA (fine del servizio alla cassa e uscita di un cliente), si è aggiunto l evento SERVIZIO (inizio del servizio di un cliente a una cassa); 2. sono stati riportati diversi chiarimenti richiesti da studenti; è possibile che altri chiarimenti si aggiungano in seguito. Il problema Si vuole simulare il funzionamento di un supermercato, valutando come varia il livello di servizio dei clienti in base agli orari di apertura delle casse. Figura 1: Struttura del supermercato La Figura?? illustra la struttura del supermercato, che è abbastanza tipica; si compone di: un ingresso, indicato con il simbolo I; otto corsie, ciascuna formata da 5 scaffali: gli scaffali sono indicati con sigle progressive Sij, dove i è un numero progressivo che indica la corsia, da 0 a 7: la corsia 0 parte dall ingresso, le altre sono via via più lontane; j indica il numero progressivo dello scaffale, da 1 a 5 (dall ingresso verso il fondo); 1

un corridoio finale, in cui sboccano tutte le corsie: lo sbocco di ogni corsia è indicato con il simbolo Fi, dove i è un numero progressivo che indica la corsia, da 0 a 7; un corridoio iniziale, in cui sboccano le corsie da 1 a 7, ma non la corsia 0; in questo corridoio si trovano sette casse, indicate con i simboli Ci, dove i è un numero progressivo da 1 a 7 corrispondente alla corsia più vicina; un uscita, subito dopo le casse. I clienti entrano dall ingresso e possono muoversi come segue: dall ingresso allo scaffale S01 o viceversa, in 5 secondi; da uno scaffale al successivo o al precedente nella stessa corsia, in 10 secondi; dallo scaffale 5 di ogni corsia (Si5, per i da 0 a 7) allo sbocco della corsia nel corridoio finale (Fi, per i da 0 a 7) o viceversa, in 5 secondi; dallo sbocco di una corsia a quello precedente o successivo, in 7 secondi; dallo scaffale 1 di ogni corsia (Si5, per i da 1 a 7) alla cassa corrispondente (Ci, per i da 1 a 7) o viceversa, in 5 secondi da una cassa a quella precedente o successiva, in 8 secondi. Un cliente è caratterizzato da un ora di ingresso, misurata in secondi a partire dall apertura del supermercato. Inoltre, è caratterizzato da una lista di acquisti, formata dal numero di oggetti da comprare e dalla sequenza dei simboli degli scaffali in cui ogni oggetto si trova. Si suppone che il cliente si muova nel supermercato seguendo esattamente la lista, anche se questo significa andare avanti e indietro per il supermercato in modo stupido. Fra i vari percorsi possibili per andare da uno scaffale all altro, però, il cliente sceglie quello più breve. Ogni oggetto richiede 15 secondi per essere raccolto. Raccolto l ultimo oggetto, il cliente va alla cassa aperta più vicina e si mette in coda (per semplicità, non sceglie la cassa in base alla lunghezza della coda). Ogni cassa è caratterizzata da un intervallo di apertura, descritto dall orario di apertura e chiusura, misurati in secondi dall apertura del supermercato. Se la cassa è aperta, il primo cliente deposita i suoi acquisti sul nastro e la cassa li smaltisce impiegando 5 secondi per ogni oggetto. Il progetto Il programma da realizzare deve caricare da un file le informazioni relative agli intervalli di apertura delle casse e da un altro le informazioni relative al comportamento dei clienti. Il file relativo all apertura delle casse segue il formato: C1 0 14400 C2 0 8000 C3 2000 10000 C4 6000 9000 C5 6000 9000 C6 7200 14400 C7 7200 14400 dove ogni riga si riferisce a una cassa e riporta il simbolo della cassa, l orario di apertura e l orario di chiusura in secondi dall apertura dell intero supermercato (entrambi numeri interi). Il file relativo al comportamento dei clienti segue il formato: 2

U1 0 4 S13 S21 S45 S52 U2 0 1 S51 U3 0 2 S32 S25 U4 0 2 S25 S21 dove ogni riga si riferisce a un cliente e riporta il simbolo del cliente, l orario di ingresso in secondi dall apertura del supermercato, il numero di oggetti da acquistare e l elenco dei simboli degli scaffali in cui si trovano tali oggetti, nell ordine che verrà seguito dal cliente per raccoglierli. Il programma deve simulare lo svolgimento della giornata. Per farlo, deve elaborare gli eventi principali della giornata, aggiornare di conseguenza lo stato del sistema (cioè indicare dove sono i clienti, quali casse sono libere o occupate, ecc... ) e dedurre da ciascun evento le sue conseguenze, cioè gli altri eventi di interesse che ne derivano. L idea fondamentale del procedimento è: si caricano tutti gli eventi originali (ingresso di nuovi clienti) in un apposita struttura; si estrae dall insieme degli eventi il primo in ordine di tempo (a parità di tempo, si considerano i clienti in ordine alfabetico rispetto ai loro simboli); se l evento corrente è l ingresso di un cliente, si deduce l istante in cui il cliente finisce i suoi acquisti e arriva alla cassa (che è la cassa aperta più vicina allo scaffale del suo ultimo acquisto), si genera l evento di arrivo del cliente alla cassa e si aggiunge tale evento all insieme degli eventi; se l evento corrente è l arrivo di un cliente a una cassa, i casi sono due: 1. se la cassa è libera, diventa occupata e si genera l evento di inizio del servizio per il cliente; 2. se la cassa è occupata, si accoda il nuovo cliente a quelli che lo precedono alla cassa; se l evento corrente è l inizio del servizio di un cliente, si deduce l istante in cui la spesa sarà stata processata, si genera l evento di fine del servizio per il cliente (che coincide con l uscita dal supermercato) e si aggiunge tale evento all insieme degli eventi; se l evento corrente è l uscita di un cliente dal supermercato, i casi sono due: 1. se non ci sono altri clienti in coda a quella cassa, essa diventa libera; 2. se ci sono altri clienti in coda, si genera l evento di inizio del servizio per il primo cliente (istantaneamente subito dopo). Un aspetto delicato è l orario di apertura delle casse: se un cliente arriva a una cassa quando essa è chiusa, non può accedervi. D altra parte, se l orario di una cassa termina quando ci sono ancora clienti in coda, la cassa rimane aperta finché non li ha smaltiti, ma non accetta nuovi clienti. In sintesi, la regola è molto semplice: un cliente si rivolge sempre alla cassa aperta più vicina alla posizione dell ultimo acquisto. Una volta che il cliente è in coda, gli orari della cassa non lo riguardano più. Il programma deve stampare gli eventi in ordine cronologico, uno per ogni riga, precisando l orario in secondi dall apertura del supermercato (numero intero), il tipo di evento (INGRESSO, CASSA, SERVIZIO, USCITA), il simbolo del cliente interessato e, per gli eventi di tipo CASSA e SERVIZIO il simbolo della cassa interessata. 3

Quindi, deve stampare una riga per ogni cliente, riportando il simbolo del cliente, la durata totale della spesa in secondi, il numero di altri clienti che lo hanno preceduto in coda e la durata della coda in secondi (tutti numeri interi). Infine, deve stampare una riga per ogni cassa, riportando il simbolo della cassa, la durata in secondi del periodo in cui è stata occupata (numero intero) e la percentuale di tale durata rispetto all intervallo di apertura (numero reale con due cifre decimali). Si noti che questa percentuale potrebbe anche essere superiore al 100% nel caso (un po improbabile) che fosse occupata per tutto il suo intervallo di apertura e dovesse rimanere aperta dopo la chiusura per smaltire la coda arretrata di clienti. Esempio Si consideri il piccolo esempio riportato più sopra: U1 0 4 S13 S21 S45 S52 U2 0 1 S51 U3 0 2 S32 S25 U4 0 2 S25 S21 Gli utenti entrano tutti all apertura del supermercato. scaffale 3 della corsia 1 (impiegando... L utente U1 va allo Chiarimenti Nella lista di oggetti che un cliente deve acquistare ci possono essere oggetti ripetuti? Sì, nella lista ci possono essere posizioni ripetute. Se non sono consecutive, il cliente andrà avanti e indietro per il supermercato seguendo la lista; se sono consecutive, il percorso ottimo fra l una e l altra avrà durata nulla, ma il tempo necessario a raccogliere ciascun oggetto rimane lo stesso, distinto per ogni oggetto anche se gli oggetti si trovano nella stessa posizione. Questo dovrebbe semplificare al massimo il calcolo. Durante l ultima lezione ci aveva consigliato di gestire gli eventi con la struttura di heap, ma non mi è chiaro come farlo Siccome ogni evento ne innesca altri temporalmente successivi, un min-heap consente di ricavare in ogni istante il primo evento in sequenza temporale, dunque quello che sicuramente non è influenzato da nessun altro. Gli eventi che esso innesca dipendono dall evento stesso e dallo stato del sistema (casse aperte e chiuse, clienti in coda, ecc... ). Quindi, la simulazione del supermercato procede estraendo il primo evento in ordine cronologico, determinandone gli effetti in base allo stato del sistema, applicando gli effetti allo stato del sistema (code che si allungano o accorciano, o casse che diventano occupate o libere, ecc... ) e generando nuovi eventi provocati da quello corrente, che vengono aggiunti al min-heap in modo da essere processati quando sarà il loro momento. Fatto questo, si passa all evento successivo e si ricomincia. Quando non ci sono più eventi, si termina. Come rappresentiamo il grafo del supermercato? In generale, conviene usare la rappresentazione che consente l algoritmo più efficiente (fra quelli che conoscete) per eseguire le operazioni richieste dal progetto. In questo caso, si tratta di un calcolo dei percorsi minimi fra le varie posizioni. 4

Per quanto riguarda la lista degli eventi della giornata, è pi conveniente aggiungere gli eventi in modo già ordinato o aggiungere prima tutti gli eventi e successivamente ordinarla usando uno degli algoritmi visti a lezione? Conviene togliere gli eventi uno alla volta nell ordine con cui si verificano e aggiungerli uno alla volta via via che vengono innescati. Per quanto riguarda l heap, conviene allocarlo una volta sola all inizio (con quale dimensione? una stima ragionevole del massimo numero di eventi che potrebbe contenere contemporaneamente) e deallocarlo una volta sola alla fine. Per ogni cliente è richiesto di specificare il numero di persone che lo hanno preceduto in coda. Tale numero comprende anche l utente che è servito alla cassa? No, l utente che viene servito non è in coda. Quindi, la lunghezza della coda in quel momento è 0. Bisogna gestire la possibilità che un utente finisca di raccogliere gli oggetti dopo la chiusura del supermercato o in un momento in cui non vi siano casse aperte? No, ci sarà sempre almeno una cassa aperta, e il supermercato sarà aperto abbastanza a lungo da servire tutti i clienti. Nella stampa degli eventi, se ci sono eventi simultanei è richiesto di stampare per primo l evento associato all utente con indice inferiore. Questo provoca alcune piccole stranezze. Vediamo qualche esempio: se i clienti U3 e U7 arrivano insieme alla cassa, viene servito per primo U3 e U7 si mette in coda; se sono in casse diverse e finiscono il servizio contemporaneamente, esce per primo U3; se U3 finisce il servizio e contemporaneamente U7 arriva alla cassa, si processa prima l uscita di U3, per cui U7 arriva a una cassa vuota, innesca l inizio del servizio, che viene processato subito dopo, mentre se U7 finisce il servizio e contemporaneamente U3 arriva alla cassa, si processa prima l arrivo di U3, che si mette in coda (una coda di lunghezza 0, dato che è il primo), poi l uscita di U7, che innesca l inizio del servizio di U3 (dopo un attesa in coda di 0 secondi): rispetto all altro caso, gli istanti sono gli stessi, ma l ordine degli eventi diverso Concordo che siano stranezze, ma teniamo le regole più semplici possibili per il progetto: le incoerenze che ne risultano non sono gravi. 5