Sei sulla pagina 1di 7

Laboratorio

I - a.a. 2012/13 - progetto d'esame

Rete elettrica


Sessione: Giugno/Luglio 2013 Data pubblicazione: 17 Giugno 2013 Data di consegna: 20 Luglio 2013 Discussione: 30 Luglio 2013 Il progetto consiste nellanalisi della connettivit di una rete elettrica e nella realizzazione di una serie di operazioni atte a calcolare le possibili riconfigurazioni in caso di guasti alla rete per massimizzare il numero di utenti connessi. Una rete elettrica consiste di una serie di nodi tra loro connessi. I nodi possono essere di tre tipi: generatori, trasmettitori e consumatori. I primi generano lelettricit che andr trasmessa sulla rete. Formalmente, se ci sono G generatori, ogni generatore gi, con i=1G, caratterizzato dal numero di utenti U(gi)0, che il generatore gi pu potenzialmente servire. I trasmettitori invece sono solo un tramite per lelettricit e, se la rete contiene T trasmettitori, ciascun trasmettitore ti, con i=1T, caratterizzato da P(ti)0, cio dal numero di utenti a cui ti pu trasmettere lelettricit. I consumatori invece rappresentano gli utenti e per semplicit si suppone che consumino tutti la stessa elettricit (e per questo motivo possiamo misurare lelettricit in termini di utenti serviti). Lenergia elettrica si muove in una rete secondo un canale specificato e una connessione tra due nodi non necessariamente simmetrica. I generatori forniscono energia direttamente ai trasmettitori, che possono fornirla ad altri trasmettitori o direttamente a degli utenti. Un utente pu essere connesso a pi trasmettitori. Un utente riceve energia se almeno uno dei trasmettitori a cui collegato gliela pu fornire. Un trasmettitore trasmette energia se non ha pi richieste rispetto alla sua portata, altrimenti si comporta come se fosse disconnesso. _____________________________________________________________________________________________ Esempio 1 Si considerino due trasmettitori t1 e t2 a cui fornita corrente da un generatore g con U(g)=4. Se t1 connesso agli utenti u1 e u2 e t2 agli utenti u2 e u3 e p(t1)=2 e p(t2)=1, la disconnessione di t1 provocherebbe la disconnessione di tutti e tre gli utenti. Infatti, u1 verrebbe disconnesso perch direttamente collegato solo a t1 e u2 e u3 verrebbero disconnessi perch t2, con portata 1, si troverebbe a dover servire due utenti e quindi si disconnetterebbe dalla rete. _____________________________________________________________________________________________

Il problema

Una rete si dice connessa se viene fornita energia a tutti gli utenti. Una rete connessa si dice minimale se nessuno dei suoi generatori pu essere disconnesso senza disconnettere almeno un utente, mentre minima, se non solo non possibile rimuovere alcun generatore, ma neanche ridurre lenergia che forniscono. Allinterno di una rete connessa, un trasmettitore ti si dice fondamentale se la sua disconnessione (P(ti)=0) provoca la disconnessione di almeno un utente. Tra i nodi fondamentali, un nodo si dice pericoloso se la sua disconnessione provoca pi disconnessioni rispetto ai nodi effettivamente serviti dal trasmettitore. _____________________________________________________________________________________________ Esempio 2 La rete descritta nellesempio 1 minimale, ma non minima. Non infatti possibile rimuovere g, ma possibile ridurre U(g) a 3. I trasmettitori t1 e t2 sono entrambi fondamentali e t1 anche pericoloso. _____________________________________________________________________________________________

Progetto (Java)
Si richiede di implementare una struttura dati efficiente, che permetta di eseguire le operazioni descritte nel seguito. -carica(file) Carica una rete le cui informazioni sono contenute in un file di nome file e la salva soltanto se la rete connessa (secondo la definizione data nella sezione precedente). Tale file contiene nella prima riga gli identificativi g1 g2 gG dei G generatori separati da uno spazio, nella seconda riga gli identificativi t1 t2 tT dei T trasmettitori separati da uno spazio e nella terza gli identificativi u1 u2 uN degli N utenti separati da uno spazio. Dalla quarta riga alla riga 4+G, ciascuna riga conterr la capacit generativa di ciascun generatore e dalla 4+G+1 alla 4+G+1+T riga, la capacit trasmissiva di ciascun trasmettitore. A partire dalla riga successiva, ogni riga conterr una connessione, rappresentata da due elementi s e d, dove s rappresenta la sorgente dellenergia e d la destinazione. Se file non esiste non viene eseguita alcuna operazione. _____________________________________________________________________________________________ Esempio 3 Il file che contiene la rete descritta nellesempio 1 pu essere cos composto g t1 t2 4 2 1 g t1 g t2 t1 u1

t1 u2 t2 u2 t2 u3 Si osservi che lordine delle connessioni pu essere qualsiasi permutazione di quella portata qui come esempio. _____________________________________________________________________________________________ - visualizza() Stampa tutte la rete, indicando prima, per ciascun utente, i trasmettitori che li riforniscono in modo diretto di energia e poi, per ciascun trasmettitore, i trasmettitori e i generatori che li riforniscono in modo diretto. - visualizza(u) Stampa per lutente u tutti i modi in cui u pu essere rifornito a partire dai vari generatori. - inserisci(n1,n2) Inserisce nella rete una connessione tra i nodi n1 e n2, solamente se tale connessione lecita. -elimina(t) Disconnette dalla rete il trasmettitore t, solamente se t non fondamentale. - minimale() Verifica se la rete minimale. - minima() Verifica se la rete minima. - riconfigura(t) Qualora, a causa di un problema sulla rete, il trasmettitore t vada disconnesso, anche se fondamentale, si calcolino le eventuali connessioni da eliminare per massimizzare il numero di utenti connessi senza aggiungere ulteriori connessioni. _____________________________________________________________________________________________ Esempio 4 Se si considera la rete descritta nellesempio 1 e la disconnessione forzata di t1, leliminazione della connessione tra t2 e u2 (o quella tra t2 e u3) massimizza il numero di utenti serviti, infatti in questo modo t2 riesce almeno a rifornire u3 (u2, rispettivamente). _____________________________________________________________________________________________ Specifiche di implementazione Il programma deve leggere un file contenente una sequenza di comandi, uno per linea del file. I comandi corrispondono alle operazioni descritte in precedenza (a parte il comando di terminazione del programma) e il loro formato specificato

nella Tabella 1. Per ogni comando letto il programma deve visualizzare sullo standard output il risultato dell'operazione nel formato descritto nella tabella. Si noti che non devono essere presenti vincoli sulla dimensione della rete. Input Operazione Output c f carica (file) Nessun output v visualizza() <lista fornitori utenti> <lista fornitori trasmettitori> dove la prima una sequenza contente per ciascun utente u le seguenti informazioni: u: t1 th dove t1 th sono i trasmettitori che riforniscono direttamente u. Analogamente, la seconda una sequenza contente per ciascun trasmettitore t la lista dei trasmettitori e generatori che riforniscono direttamente t: t: t1 tk g1 gl v u visualizza(u) u: <lista sequenza rifornimento> dove <lista sequenza rifornimento> contiene tutte le sequenze di rifornimento per lutente u, cio tutti i possibili modi in cui lenergia va da un generatore a u. i n1 n2 inserisci(n1, n2) Nessun output e t elimina(t) Nessun output ml minimale() 1 se la rete minimale 0 altrimenti mn minima() 1 se la rete minima 0 altrimenti r t riconfigura(t) t: <lista possibili insiemi connessioni> dove <lista possibili insiemi connessioni > una sequenza di possibili insiemi di connessioni che devono essere eliminate per garantire il massimo numero di utenti serviti. Tablella 1 IMPORTANTE Nell'implementazione delle operazioni sopra descritte si dovranno gestire, mediante opportune ECCEZIONI, le situazioni anomale relative all'esecuzione delle operazioni. Se ad esempio consideriamo l'operazione inserisci(n1, n2), le possibili situazioni anomale (in questo caso situazioni in cui l'operazione non pu essere completata) sono le seguenti: n1 e n2 non sono sorgenti e destinazioni compatibili (ad esempio n1 un utente). n1 e n2 non sono nodi esistenti. La connessione gi presente.

Tutte le classi sviluppate dallo studente per la soluzione del progetto devono essere collocate in un package di nome soluzione. Il metodo main per l'esecuzione dell'applicazione deve essere contenuto in una classe di nome Rete del package soluzione. I progetti dovranno essere adeguatamente commentati mediante l'utilizzo dei commenti di documentazione javadoc. La soluzione del progetto deve essere corredata da una breve relazione (max. 3 pagine).

Si consideri una versione semplificata del problema delle reti in cui i generatori (che sono al massimo 10) sono direttamente connessi con gli utenti (che sono al massimo 30). Non esistono quindi i trasmettitori. Si scriva un programma nell'assembly per MIPS, operante sul simulatore SPIM, che sia in grado di effettuare le seguenti operazioni: Verificare che una rete sia connessa, cio che tutti gli utenti abbiano energia. Verificare se un generatore g indispensabile per la rete. Verificare se pu essere ridotta la capacit di generazione di un generatore g. Il programma deve sottostare ad alcuni vincoli: Ad inizio esecuzione deve essere visualizzata un'intestazione che descriva brevemente lo scopo del programma. Dopo l'intestazione il programma deve visualizzare un menu di scelta (0- Inserisci rete, 1-Esci), che chiameremo men principale. Qualora venga scelta lopzione 0 nel men principale, il programma, dopo che avvenuto correttamente linserimento della rete (che deve essere memorizzata in strutture adeguate), deve visualizzare un menu di scelta (0- Connessa, 1- Generatore indispensabile, 2- Capacit generatore, 3- Torna al menu principale) . Il programma deve essere eseguibile fino a quando l'utente non sceglie di uscire con la scelta corrispondente nel menu principale. Descrizione delle funzionalit: 1. Inserisci rete: richiama una funzione che presi in ingresso due interi G e N, che rappresentano il numero di generatori e utenti e lindirizzo della/e struttura/e dati in cui salvare le informazioni sulle capacit dei generatori e sulla configurazione di rete, permette allutente di inserire gli elementi della rete. La procedura deve verificare che G e N siano dimensione valide. In caso contrario, esce, restituendo un codice derrore. Si osservi che in caso venga restituito dalla funzione un codice derrore il programma che la chiama rimane nel men principale 2. Connessa: richiama una funzione che presi come parametri la rete ed eventualmente il numero effettivo di generatori e utenti della rete, restituisce 1 se la rete connessa e 0 altrimenti. Il chiamante stamper il valore restituito dalla funzione.

Progetto (Assembler)

3. Generatore indispensabile: richiama una funzione che presi come parametri la rete, eventualmente il numero effettivo di generatori e utenti della rete, e un generatore g, restituisce 1 se la disconnessione dei generatori provoca la disconnessione di almeno un utente e 0 altrimenti. Il chiamante stamper il valore restituito dalla funzione. 4. Capacit generatore: richiama una funzione che presi come parametri la rete, eventualmente il numero effettivo di generatori e utenti della rete, e un generatore g, restituisce n dove n la capacit che pu essere tolta al generatore considerato senza disconnettere alcun utente. Il chiamante stamper il valore restituito dalla funzione. Note Come gi specificato la rete contiene al massimo 10 generatori e 30 utenti. Lo spazio per tale rete pu quindi essere allocato a priori (una volta scelta la/e struttura/e necessaria/e). Non sviluppare tutto il codice nel main. Fare uso di funzioni parametriche (come spiegato in precedenza). Tenere a mente le convenzioni sui registri e la procedura per chiamare le funzioni ( necessario salvare i registri preservati sullo stack se vengono usati nel codice della funzione). Qualora non si usassero le funzioni la valutazione di questa parte progetto sarebbe fortemente compromessa. necessario allegare al codice una breve documentazione (.txt o .pdf) sulle modalit di implementazione seguite. Il progetto pu essere sviluppato singolarmente o in gruppi di al pi 2 studenti. I progetti dovranno essere consegnati mediante l'apposita form, disponibile sul sito di e-learning, in un unico file zippato (.zip) contenente il file relazione.pdf per la parte java e la directory src/ con il codice sorgente del progetto (java). Inoltre il file zippato deve contenere un file .s con il codice assembly per il problema semplificato e la breve documentazione per questa parte di codice. Quindi il contenuto del file .zip sar del tipo: relazione.pdf src/soluzione/Rete.java src/soluzione/Classe_1.java documentazione.pdf Rete.s Il nome delle file zippato deve coincidere con il numero di matricola di uno degli autori (non importa quale). Per i progetti sviluppati in gruppo il progetto deve essere inviato una sola volta da uno degli autori (non importa quale).

Consegna del progetto

Durante lo svolgimento del progetto, per qualsiasi dubbio sul testo del progetto rivolgersi alla Dott.ssa Paola Spoletini tramite mail allindirizzo paola.spoletini@uninsubria.it. Loggetto della mail deve essere Laboratorio I: consegna luglio. Inoltre, nelle settimane 24/6-28/6 e 8/7-12/7 possibile incontrare il tutor del progetto William Lucia, per analizzare preventivamente la qualit della propria soluzione. Per incontrare il tutor, bisogna fissare un appuntamento tramite mail (williamlucia.wl@gmail.com )

Incontri con il tutor e domande sul progetto

Criteri di valutazione

L'attivit di progetto coinvolge i corsi del primo anno del corso di laurea, in particolare i corsi di Programmazione, Algoritmi e strutture dati e Architettura degli elaboratori. L'utilizzo di strutture dati e algoritmi appropriati costituisce quindi un elemento determinante nella valutazione del progetto. Oltre agli aspetti algoritmici verr inoltre valutata la qualit del codice (anche in assemby): struttura del progetto, adeguatezza dei costrutti utilizzati e dei commenti. I progetti vengono valutati dalla commissione d'esame, i progetti che superano la valutazione devono essere discussi dagli studenti di fronte alla commissione. Durante la discussione gli studenti dovranno fornire chiarimenti sulle scelte effettuate sul codice presentato. In particolare dovranno giustificare la scelta delle strutture dati utilizzate nel progetto e dovranno spiegare nel dettaglio gli algoritmi implementati. Per i progetti sviluppati in gruppo ci si aspetta comunque che entrambi gli studenti siano in grado di giustificare le scelte e commentare il codice.