Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
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).
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 )
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.