Assegnamento - Corsi a Distanza

Transcript

Assegnamento - Corsi a Distanza
1
Matching
1.1
Definizioni
Definizione 1.1 (Matching di un grafo G = (N, A)) Il matching di un grafo è un
sottoinsieme M di archi tali per cui nessuna coppia di essi condivida lo stesso nodo.
Definizione 1.2 (Matching completo) Il matching
¹
º completo è un matching M
|N |
il cui numero di archi (cardinalità) è |M | =
(cioè la massima cardinalità
2
possibile).
Definizione 1.3 (Arco accoppiato) Un arco è accoppiato se è appartenente al
matching M .
Definizione 1.4 (Arco libero) Un arco è libero se non è accoppiato.
Definizione 1.5 (Vertice esposto) Un vertice esposto è un vertice non incidente
con archi accoppiati.
Definizione 1.6 (Vertice accoppiato) Un vertice accoppiato è un vertice non esposto, cioè incidente con un arco accoppiato.
Definizione 1.7 (Cammino alternante) Un cammino alternante è un cammino
p = [u1 , u2 , ..., u2k ] tale per cui gli archi [u1 , u2 ] ... [u2k−1 , u2k ] siano liberi e gli archi
[u2 , u3 ] ... [u2k−2 , u2k−1 ] siano accoppiati.
Definizione 1.8 (Vertice esterno (outer)) Un vertice esterno è un vertice di posizione dispari di un cammino alternante p che cominci con un vertice esposto.
Definizione 1.9 (Vertice interno (inner)) Un vertice interno è un vertice di posizione pari di un cammino alternante p che comincia con un vertice esposto.
Definizione 1.10 (Cammino aumentante) Un cammino aumentante è un cammino p = [u1 , u2 , ..., u2k ] alternante dove u1 e u2k sono esposti.
1
R. Tadei - F. Della Croce - Ricerca Operativa e Ottimizzazione
1.1.1
Algoritmo per la ricerca del massimo matching
La motivazione dell’attributo aumentante dell’ultima definizione è dovuta al seguente
lemma
Lemma 1.1 Sia P l’insieme degli archi di un cammino alternante p = [u1 , u2 , ..., u2k ]
rispetto ad un matching M . Allora M 0 = M ⊕P è un matching di cardinalità |M |+1.
Dimostrazione Si ricorda che M ⊕ P = (M − P ) ∪ (P − M ) = (M ∪ P ) − (M ∩ P ) .
Dimostriamo dapprima che M ⊕ P sia un matching. Supponiamo per assurdo che
M ⊕ P non lo sia, cioè che due archi e, e0 incidano lo stesso nodo. Siccome M ⊕ P =
(M − P ) ∪ (P − M ) abbiamo tre possibilità
1. e, e0 ∈ M − P
2. e, e0 ∈ P − M
3. e ∈ M − P
e0 ∈ P − M
Nel primo caso avremmo che due archi in M incidono lo stesso nodo, contro l’ipotesi
iniziali in quanto M è un matching.
Nel secondo caso, tutti gli archi appartenenti a P − M sono della forma [u2j−1 , u2j ]
e quindi due di essi non possono incidere sullo stesso vertice.
Nel terzo caso supponiamo che un arco e0 = [u2j−1 , u2j ] ∈ P − M abbia un nodo in
comune con un altro arco e ∈ M − P ; assumiamo, per esempio, che tale nodo sia
u2j : ma u2j è un vertice dell’arco e00 = [u2j , u2j+1 ] ∈ M e quindi i due archi e00 e e
appartenenti a M hanno in comune un nodo, contro le ipotesi. Se ne conclude che M 0 è
un matching; inoltre |P | = 2k − 1 di cui k sono liberi ([u1 , u2 ] , [u3 , u4 ] , ..., [u2k−1 , uk2 ]
e k − 1 appartengono a M : da ciò si ottiene che |M 0 | = |M ⊕ P | = |M | + |P | −
2 |P ∩ M | = |M | + 2k − 1 − 2 (k − 1) = |M | + 1.
¦
Dal lemma precedente deriva il seguente
Teorema 1.2 Un matching M in un grafo G = (N, A) è massimo se e solo se non
esiste alcun cammino aumentante in G = (N, A) rispetto a M.
Dimostrazione L’implicazione matching massimo =⇒ non esiste cammino aumentante segue direttamente dal lemma 1.1. Dimostriamo ora l’implicazione inversa (non
esiste cammino aumentante =⇒ matching massimo). Supponiamo per assurdo che il
matching M non sia massimo, cioè che esista una matching M 0 tale che |M 0 | > |M |.
Consideriamo gli archi in M ⊕ M 0 ; questi archi formano un sottografo di G. Siccome gli archi di un matching non possono incidere sullo stesso nodo, il sottografo
2
Progetto Leonardo – Editrice Esculapio – Bologna
Capitolo I – Matching
G0 (V, M ⊕ M 0 ) è tale per cui i suoi vertici non abbiano più di due archi incidenti. Se
il numero di tali archi è due allora uno appartiene a M e l’altro a M 0 . Se ne deduce
che tutte le componenti connesse di G0 sono dei cammini o dei circuiti di lunghezza
pari. Siccome |M 0 | > |M | deve verificarsi il caso in cui uno dei cammini abbia più
archi appartenenti a M 0 : questo comporta l’esistenza di un cammino aumentante,
contro l’ipotesi.
¦
I passi dell’algoritmo sono i seguenti
1. Porre M = {∅}.
2. Cercare un cammino aumentante. Se esso non esiste, STOP; il matching è
massimo.
3. Aggiornare il matching corrente applicando il lemma 1.1:
M ∪ {[u1 , u2 ] ... [u2k−1 , u2k ]} \ {[u2 , u3 ] ... [u2k−2 , u2k−1 ]} .
Ritornare al passo 2.
Si dimostra che la complessità di questo algoritmo applicato ad un grafo bipartito
B (N1 , N2 , A) è O (min {|N1 | , |N2 |} · |A|).
Algoritmo Ungherese per il problema dell’assegnamento
L’ultimo lemma presentato viene fortemente utilizzato dall’algoritmo ungherese, che
modifica progressivamente la matrice C dei costi tramite somme e sottrazioni di
costanti sulle righe e sulle colonne. Questi aggiornamenti della matrice dei costi
vengono fatti in modo tale da garantire sempre costi non negativi e cercando contemporaneamente di aumentare gli elementi nulli (e conseguentemente gli accoppiamenti di costo nullo) sino a raggiungere la soluzione ottima, consistente appunto in n
accoppiamenti di costo nullo.
I passi dell’algoritmo
1. Analizzare la matrice C per trovare il valore minimo di ciascuna riga e sottrarre
tale valore ad ogni elemento della riga: in questo modo si aggiorna la matrice
C il cui generico elemento vale ora
cij = cij − min cij
j
i = 1, ..., n.
2. Analizzare la matrice C per trovare il valore minimo di ciascuna colonna e
sottrarre tale valore ad ogni elemento della colonna: in questo modo si aggiorna
nuovamente la matrice C il cui generico elemento vale ora
cij = cij − min cij
i
j = 1, ..., n.
3
R. Tadei - F. Della Croce - Ricerca Operativa e Ottimizzazione
3. Sia dato il grafo bipartito B = (N1 , N2 , A), in cui N1 e N2 corrispondono rispettivamente alle righe ed alle colonne della matrice C e A sia formato dall’insieme
di coppie (i, j) tali che cij = 0. Verificare, con l’algoritmo per la ricerca del
massimo matching, se esiste un matching completo, ossia se ci sono n accoppiamenti di costo nullo, uno per ogni riga e per ogni colonna, sulla matrice C. Se
è cosı̀, STOP.
4. Applicare alla matrice C la procedura U (updating) per aggiornarla e tornare
al passo 3.
Procedura U
1. Considerare la matrice C reinizializzata, ossia con tutte le righe e le colonne
non barrate.
2. Etichettare tutte le righe che non sono state accoppiate dall’algoritmo per la
ricerca del massimo matching.
3. Etichettare le colonne che hanno degli 0 in corrispondenza delle righe etichettate.
4. Etichettare le righe che sono state accoppiate, dall’algoritmo per la ricerca del
massimo matching, con le colonne etichettate.
5. Ripetere i passi 2 e 3 finché non ci sono più righe o colonne da etichettare.
6. Barrare ogni riga non etichettata ed ogni colonna etichettata.
7. Trovare il minimo tra gli elementi non barrati della matrice ed indicarlo con δ.
8. Sottrarre il valore δ agli elementi non barrati ed aggiungere δ a quelli barrati
sia per riga che per colonna.
9. La matrice così ottenuta è la nuova matrice C.
Si noti che alla fine del passo 5, se tutto è stato eseguito correttamente, ogni zero
deve essere barrato e la somma del numero di righe e di colonne barrate deve essere
pari al numero degli accoppiamenti ottenuti dall’algoritmo per la ricerca del massimo
matching.
Esempio 1.1
Si risolva il problema di assegnamento caratterizzato dalla seguente matrice dei costi
A
B
C
D
1
1
4
3
3
2
8
7
5
1
3
5
7
4
6
4
2
5
2
3
Applichiamo i passi dell’algoritmo ungherese
4
Progetto Leonardo – Editrice Esculapio – Bologna
Capitolo I – Matching
1.
A
B
C
D
1
0
0
1
2
2
7
3
3
0
3
4
3
2
5
4
1
1
0
2
A
B
C
D
1
0
0
1
2
2
7
3
3
0
3
2
1
0
3
4
1
1
0
2
2.
3. Ricerca del massimo matching
A
1
B
2
C
3
D
4
4. Visto che il matching non è completo, ossia la soluzione non è ottima, applichiamo la procedura U per aggiornare la matrice C
∗
∗
A
B
C
D
∗
1
0
0
1
2
2
7
3
3
0
3
2
1
0
3
4
1
1
0
2
δ = min (7, 2, 1, 3, 1, 1) = 1
La matrice aggiornata è la seguente
A
B
C
D
1
0
0
2
3
2
6
2
3
0
3
1
0
0
3
4
0
0
0
2
5
R. Tadei - F. Della Croce - Ricerca Operativa e Ottimizzazione
3. Ricerca del massimo matching
A
1
B
2
C
3
D
4
La soluzione è ottima (matching completo) ed è data dagli accoppiamenti A − 1,
B − 3, C − 4, D − 2, mentre il valore della funzione obiettivo è 11.
6
Progetto Leonardo – Editrice Esculapio – Bologna