Matching
Definizione Dato un grafo non orientato G = (V, A), un
matching su tale grafo è un sottinsieme M ⊆ A dell’insieme di archi A tale che non ci sono in esso coppie di archi
adiacenti, ovvero con un nodo in comune.
Matching di peso massimo
Se associamo ad ogni arco e ∈ A un peso we > 0 possiamo associare un peso anche a un matching M pari alla somma dei pesi degli archi in M, cioè:
w(M ) = X
e∈M
we.
Matching di peso massimo
Se associamo ad ogni arco e ∈ A un peso we > 0 possiamo associare un peso anche a un matching M pari alla somma dei pesi degli archi in M, cioè:
w(M ) = X
e∈M
we.
Nel problema di matching pesato si vuole determinare tra tutti i possibili matching in un grafo quello di peso massimo, cioè si vuole risolvere il seguente problema:
max
M ⊆A è un matchingw(M ).
Applicazioni
Questo problema modella tutte le applicazioni in cui
abbiamo membri di un insieme (rappresentati dai nodi del grafo) alcuni dei quali accoppiabili tra loro (i nodi collegati da archi). Ad ogni potenziale accoppiamento si associa un peso (o profitto) e si vuole individuare quali coppie formare (tenendo conto che un membro dell’insieme può far parte al massimo di una coppia) in modo da massimizzare il peso (o profitto) totale
Esempio
Grafo non orientato G = (V, A) con:
V = {a, b, c, d, e, f },
A = {(a, b); (a, f ); (b, c); (c, d); (c, e); (d, e); (e, f )}
e:
Arco (a, b) (a, f ) (b, c) (c, d) (c, e) (d, e) (e, f )
Peso 4 2 3 6 2 5 1
Esempio
Grafo non orientato G = (V, A) con:
V = {a, b, c, d, e, f },
A = {(a, b); (a, f ); (b, c); (c, d); (c, e); (d, e); (e, f )}
e:
Arco (a, b) (a, f ) (b, c) (c, d) (c, e) (d, e) (e, f )
Peso 4 2 3 6 2 5 1
Esempi di matching:
M = {(a, b); (c, e)} w(M ) = 4 + 2 = 6
Esempio
Grafo non orientato G = (V, A) con:
V = {a, b, c, d, e, f },
A = {(a, b); (a, f ); (b, c); (c, d); (c, e); (d, e); (e, f )}
e:
Arco (a, b) (a, f ) (b, c) (c, d) (c, e) (d, e) (e, f )
Peso 4 2 3 6 2 5 1
Esempi di matching:
M1 = {(a, b); (c, e)} w(M1) = 4 + 2 = 6
M = {(a, b); (c, d); (e, f )} w(M ) = 4 + 6 + 1 = 11
Matching di cardinalità massima
Caso particolare:
we = 1 ∀ e ∈ A.
In tal caso il peso di un matching coincide con la sua cardinalità | M | e si parla di problema di matching di cardinalità massima.
Modello matematico - variabili
Ad ogni arco e associamo una variabile binaria xe definita nel modo seguente:
xe =
( 0 se e non viene inserito nel matching 1 altrimenti
Modello matematico-vincoli
Per garantire che le variabili xe con valore pari a 1 formino effettivamente un matching introduciamo dei vincoli.
Modello matematico-vincoli
Per garantire che le variabili xe con valore pari a 1 formino effettivamente un matching introduciamo dei vincoli.
Per avere un matching su ogni nodo del grafo deve incidere al massimo un arco del matching.
Modello matematico-vincoli
Per garantire che le variabili xe con valore pari a 1 formino effettivamente un matching introduciamo dei vincoli.
Per avere un matching su ogni nodo del grafo deve incidere al massimo un arco del matching.
Indichiamo per ogni nodo i ∈ V il seguente insieme degli archi incidenti su di esso:
δ(i) = {e ∈ A : e incide su i}.
Modello matematico-vincoli
Per garantire che le variabili xe con valore pari a 1 formino effettivamente un matching introduciamo dei vincoli.
Per avere un matching su ogni nodo del grafo deve incidere al massimo un arco del matching.
Indichiamo per ogni nodo i ∈ V il seguente insieme degli archi incidenti su di esso:
δ(i) = {e ∈ A : e incide su i}.
Se vogliamo che al massimo un nodo del matching incida su ogni nodo i del grafo, dovremo imporre i seguenti vincoli:
X xe ≤ 1 ∀ i ∈ V.
Nell’esempio
Nodo a:
xab + xaf ≤ 1
Nell’esempio
Nodo a:
xab + xaf ≤ 1 Nodo b:
xab + xbc ≤ 1
Nell’esempio
Nodo a:
xab + xaf ≤ 1 Nodo b:
xab + xbc ≤ 1 Nodo c:
xbc + xcd + xce ≤ 1
Nell’esempio
Nodo a:
xab + xaf ≤ 1 Nodo b:
xab + xbc ≤ 1 Nodo c:
xbc + xcd + xce ≤ 1 Nodo d:
xcd + xde ≤ 1
Nell’esempio
Nodo a:
xab + xaf ≤ 1 Nodo b:
xab + xbc ≤ 1 Nodo c:
xbc + xcd + xce ≤ 1 Nodo d:
xcd + xde ≤ 1 Nodo e:
xce + xde + xef ≤ 1
Nell’esempio
Nodo a:
xab + xaf ≤ 1 Nodo b:
xab + xbc ≤ 1 Nodo c:
xbc + xcd + xce ≤ 1 Nodo d:
xcd + xde ≤ 1 Nodo e:
xce + xde + xef ≤ 1 Nodo f:
xaf + xef ≤ 1
Modello matematico - obiettivo
L’obiettivo del problema è il peso totale del matching che è dato dalla seguente espressione:
X
e∈A
wexe.
Modello matematico - obiettivo
L’obiettivo del problema è il peso totale del matching che è dato dalla seguente espressione:
X
e∈A
wexe.
Nell’esempio:
4xab + 2xaf + 3xbc + 6xcd + 2xce + 5xde + xef
Modello matematico finale
max P
e∈A wexe P
e∈δ(i) xe ≤ 1 ∀ i ∈ V xe ∈ {0, 1} ∀ e ∈ A
Nell’esempio
max 4xab + 2xaf + 3xbc + 6xcd + 2xce + 5xde + xef xab + xaf ≤ 1
xab + xbc ≤ 1 xbc + xcd + xce ≤ 1
xcd + xde ≤ 1 xce + xde + xef ≤ 1
xaf + xef ≤ 1
xab, xaf, xbc, xcd, xce, xde, xef ∈ {0, 1}
In forma matriciale
Siano:
x il vettore di ordine | A | le cui componenti sono le variabili xe, e ∈ A;
In forma matriciale
Siano:
x il vettore di ordine | A | le cui componenti sono le variabili xe, e ∈ A;
w il vettore di ordine | A | le cui componenti sono i pesi we, e ∈ A;
In forma matriciale
Siano:
x il vettore di ordine | A | le cui componenti sono le variabili xe, e ∈ A;
w il vettore di ordine | A | le cui componenti sono i pesi we, e ∈ A;
C la matrice dei vincoli di ordine | V | × | A |: coincide con la matrice di incidenza nodo-arco del grafo;
In forma matriciale
Siano:
x il vettore di ordine | A | le cui componenti sono le variabili xe, e ∈ A;
w il vettore di ordine | A | le cui componenti sono i pesi we, e ∈ A;
C la matrice dei vincoli di ordine | V | × | A |: coincide con la matrice di incidenza nodo-arco del grafo;
0 e 1 rispettivamente il vettore le cui componenti sono tutte pari a 0 e quello le cui componenti sono tutte pari a 1;
In forma matriciale
Siano:
x il vettore di ordine | A | le cui componenti sono le variabili xe, e ∈ A;
w il vettore di ordine | A | le cui componenti sono i pesi we, e ∈ A;
C la matrice dei vincoli di ordine | V | × | A |: coincide con la matrice di incidenza nodo-arco del grafo;
0 e 1 rispettivamente il vettore le cui componenti sono tutte pari a 0 e quello le cui componenti sono tutte pari a 1;
I la matrice identica.
Modello in forma matriciale
max wx
Cx ≤ 1 Ix ≤ 1
x ≥ 0 intero dove:
wx ↔ P
e∈A wexe;
Modello in forma matriciale
max wx
Cx ≤ 1 Ix ≤ 1
x ≥ 0 intero dove:
wx ↔ P
e∈A wexe; Cx ≤ 1 ↔ P
e∈δ(i) xe ≤ 1 ∀ i ∈ V ;
Modello in forma matriciale
max wx
Cx ≤ 1 Ix ≤ 1
x ≥ 0 intero dove:
wx ↔ P
e∈A wexe; Cx ≤ 1 ↔ P
e∈δ(i) xe ≤ 1 ∀ i ∈ V ;
Ix ≤ 1 e x ≥ 0 intero ↔ xe ∈ {0, 1} ∀ e ∈ A
Nell’esempio
Vettore pesi w:
(4 2 3 6 2 5 1)
Nell’esempio
Vettore pesi w:
(4 2 3 6 2 5 1) Matrice C:
xab xaf xbc xcd xce xde xef
a 1 1 0 0 0 0 0
b 1 0 1 0 0 0 0
c 0 0 1 1 1 0 0
d 0 0 0 1 0 1 0
e 0 0 0 0 1 1 1
f 0 1 0 0 0 0 1
Complessità
Il problema di matching appartiene alla classe P , ovvero esiste una procedura di complessità polinomiale che lo risolve.
Complessità
Il problema di matching appartiene alla classe P , ovvero esiste una procedura di complessità polinomiale che lo risolve.
Nel caso di grafi bipartiti, dove C è TU, possiamo sfruttare il solito risultato sulle matrici TU.
Complessità
Il problema di matching appartiene alla classe P , ovvero esiste una procedura di complessità polinomiale che lo risolve.
Nel caso di grafi bipartiti, dove C è TU, possiamo sfruttare il solito risultato sulle matrici TU.
Non possiamo invece in generale dimostrare questo utilizzando i risultati visti sulle matrici TU (per grafi non
orientati generici la matrice di incidenza nodo-arco C non è necessariamente TU).
Chiusura convessa
Per grafi generici i vincoli già introdotti non sono sufficienti per definire la chiusura convessa, occorre introdurre altri vincoli.
Chiusura convessa
Per grafi generici i vincoli già introdotti non sono sufficienti per definire la chiusura convessa, occorre introdurre altri vincoli.
Dato U ⊆ V , indichiamo con E(U ) l’insieme di tutti gli archi del grafo con entrambi gli estremi in U. I vincoli aggiuntivi sono i seguenti:
X
e∈E(U )
xe ≤ | U | 2
∀ U ⊆ V, | U | dispari
Nell’esempio
U = {a, b, c} → xab + xbc ≤ 1 U = {a, b, d} → xab ≤ 1 U = {a, b, e} → xab ≤ 1
U = {a, b, f } → xab + xaf ≤ 1 U = {a, c, d} → xcd ≤ 1
U = {a, c, e} → xce ≤ 1 U = {a, c, f } → 0 ≤ 1 eccetera ...
Problema (P conv)
max P
e∈A wexe P
e∈δ(i) xe ≤ 1 ∀ i ∈ V P
e∈E(U ) xe ≤ j
|U | 2
k ∀ U ⊆ V, | U | dispari xe ≥ 0 ∀ e ∈ A
Nota bene
Il numero dei vincoli aggiuntivi è esponenziale rispetto alla dimensione del problema di matching.
Nota bene
Il numero dei vincoli aggiuntivi è esponenziale rispetto alla dimensione del problema di matching.
Tuttavia, il problema (P conv) è risolvibile in tempo polinomiale in quanto, dato un generico vettore
x ∈ R|A|, x ≥ 0, è possibile stabilire in tempo polinomiale se questo soddisfa o meno i vincoli aggiuntivi.
Grafi bipartiti: cardinalità massima
In tutte le applicazioni in cui gli elementi accoppiabili tra loro appartengono a due classi distinte (ad esempio, lavoratori da una parte e lavori dall’altra), il grafo corrispondente
G = (V, A) è un grafo bipartito con le due classi di bipartizione V1 e V2.
Grafi bipartiti: cardinalità massima
In tutte le applicazioni in cui gli elementi accoppiabili tra loro appartengono a due classi distinte (ad esempio, lavoratori da una parte e lavori dall’altra), il grafo corrispondente
G = (V, A) è un grafo bipartito con le due classi di bipartizione V1 e V2.
Faremo inoltre l’ulteriore ipotesi che tutti i pesi siano uguali a 1 ovvero consideremo il problema di matching di
cardinalità massima su grafi bipartiti.
Un esempio
Grafo bipartito G = (V1 ∪ V2, A) con:
V1 = {a1, a2, a3, a4} V2 = {b1, b2, b3, b4}
A = {(a1, b1); (a2, b2); (a2, b3); (a2, b4); (a3, b2); (a4, b1)}
Un matching iniziale
Un matching di partenza (non necessariamente di
cardinalità massima) può essere ottenuto con la seguente semplice procedura:
Un matching iniziale
Un matching di partenza (non necessariamente di
cardinalità massima) può essere ottenuto con la seguente semplice procedura:
Inizializzazione Si ponga M = ∅.
1. Se esiste un arco e ∈ A \ M che non sia adiacente ad alcun arco in M, allora porre M = M ∪ {e} e ripetere il passo 1. Altrimenti: STOP.
Algoritmo di risoluzione
Inizializzazione Sia M un matching di partenza
(eventualmente individuato con la procedura vista).
Algoritmo di risoluzione
Inizializzazione Sia M un matching di partenza
(eventualmente individuato con la procedura vista).
Passo 0 Tutti i vertici del grafo sono non etichettati.
Algoritmo di risoluzione
Inizializzazione Sia M un matching di partenza
(eventualmente individuato con la procedura vista).
Passo 0 Tutti i vertici del grafo sono non etichettati.
Passo 1. Se non c’è alcun vertice del grafo in V1 che soddisfa le seguenti proprietà
è non etichettato;
su di esso non incide alcun arco in M,
allora: STOP. Altrimenti si seleziona un vertice del grafo in V1 con tali proprietà e gli si assegna etichetta (E, −). Si inizializzi l’insieme R dei vertici analizzati con R = ∅.
Passo 2. Se tutti i vertici etichettati sono stati analizzati, ritornare al Passo 1; altrimenti selezionare un vertice k etichettato ma non analizzato ed analizzarlo, cioè si ponga R = R ∪ {k}. Analizzare un vertice vuol dire compiere le seguenti operazioni:
Passo 2. Se tutti i vertici etichettati sono stati analizzati, ritornare al Passo 1; altrimenti selezionare un vertice k etichettato ma non analizzato ed analizzarlo, cioè si ponga R = R ∪ {k}. Analizzare un vertice vuol dire compiere le seguenti operazioni:
Se la prima componente dell’etichetta di k è una E, allora si assegna un’etichetta (O, k) a tutti i vertici del grafo adiacenti a k e non ancora etichettati; quindi si ripete il Passo 2.
Se la prima componente dell’etichetta di k è una O, allora sono possibili due casi
Passo 2. Se tutti i vertici etichettati sono stati analizzati, ritornare al Passo 1; altrimenti selezionare un vertice k etichettato ma non analizzato ed analizzarlo, cioè si ponga R = R ∪ {k}. Analizzare un vertice vuol dire compiere le seguenti operazioni:
Se la prima componente dell’etichetta di k è una E, allora si assegna un’etichetta (O, k) a tutti i vertici del grafo adiacenti a k e non ancora etichettati; quindi si ripete il Passo 2.
Se la prima componente dell’etichetta di k è una O, allora sono possibili due casi
Caso 1 C’è un arco marcato incidente su k: in tal caso si assegna l’etichetta (E, k) al vertice unito a k dall’arco in M e si ripete il Passo 2.;
Caso 2 Non ci sono archi in M incidenti su k. In tal
Continua
Passo 3. Utilizzando la seconda componente delle etichette risalire dal vertice k in cui ci si è bloccati al
Passo 2 fino al vertice s con seconda componente pari a −. In questo modo si è individuato un cammino da s a k che inizia con un arco non appartenente a M,
prosegue alternando archi in M e archi non
appartenenti a M, e termina in k con un arco non appartenente a M. A questo punto si aggiorna M
invertendo l’appartenenza e non appartenenza a M per i soli archi lungo tale cammino. Quindi, tutti gli archi non appartenenti a M lungo il cammino vengono inseriti in M e viceversa. Infine si cancellano tutte le etichette ripartendo dal Passo 1.
Complessità dell’algoritmo
Si può dimostrare che questo algoritmo richiede un numero di operazioni O(min(| V1 |, | V2 |) | A |) e ha quindi
complessità polinomiale.
Complessità dell’algoritmo
Si può dimostrare che questo algoritmo richiede un numero di operazioni O(min(| V1 |, | V2 |) | A |) e ha quindi
complessità polinomiale.
Va sottolineato che non è il meglio che si possa ottenere
per questo problema. Esiste infatti anche un altro algoritmo, che non vedremo, la cui complessità è pari a
O(| V |1/2| A |).
Un’osservazione
Il problema di matching di cardinalità massima su grafi
bipartiti può essere visto come caso particolare di problema di flusso massimo. Come?