(invio un primo hack come una risposta per mantenere la domanda ordinato. Questo mod non sempre funziona e quindi è difettosa, vedere il secondo esempio riportato di seguito.
Per un hack che funziona, per favore vedi o la mia seconda risposta o le altre persone risposte!)
Trovo la permutazione canonica delle etichette, quindi una colorazione canonica di questo nuovo grafico canonico, e quindi posso usare vf2.
La nostra funzione di ri-colore del grafico è:
# Convert aaabbccdefaa -> 111223345611
canonical <- function(input){
labels <- unique(input)
match(input, labels)
}
E ora di nuovo al lavoro:
g <- graph.empty()
g <- g + vertices(1,2,3)
g <- g + path(1,2,3)
g1 <- g
V(g1)$color = c(1,2,2)
g2 <- g
V(g2)$color = c(2,1,1)
# Find canonical topological labeling and then canonical coloring
g1 <- permute.vertices(g1, canonical.permutation(g1)$labeling)
g2 <- permute.vertices(g2, canonical.permutation(g2)$labeling)
V(g1)$color <- canonical(V(g1)$color)
V(g2)$color <- canonical(V(g2)$color)
par(mfrow=c(1,2))
palette(rainbow(3))
plot(g1)
plot(g2)

Che ora sarà rilevato come isomorfic:
#vf2 wants colors to be the same, not "up to a relabeling"
# this is why we use canonical colors
graph.isomorphic.vf2(g1, g2)$iso
TRUE
Fallimento esempio:
Per questo esempio, non funziona:
g1 <- graph.empty()
g1 <- g1 + vertices(1,2)
g1 <- g1 + edge(1,2)
V(g1)$color = c(1,2)
g2 <- graph.empty()
g2 <- g2 + vertices(1,2)
g2 <- g2 + edge(2,1)
V(g2)$color = c(2,1)
# Find canonical topological labeling and then canonical coloring
g1 <- permute.vertices(g1, canonical.permutation(g1)$labeling)
g2 <- permute.vertices(g2, canonical.permutation(g2)$labeling)
V(g1)$color <- canonical(V(g1)$color)
V(g2)$color <- canonical(V(g2)$color)
par(mfrow=c(1,2))
palette(rainbow(3))
plot(g1)
plot(g2)
graph.isomorphic.vf2(g1,g2)$iso
# FALSE

Sembra che 'graph.subisomorphic (g1, g2)' restituisce VERO? Qualche ragione per cui stai specificamente cercando di usare l'algoritmo 'vf2'? Potresti voler controllare i riferimenti elencati nella pagina di aiuto '? Graph.subisomorphic.vf2' per vedere che l'algoritmo ha qualche difetto noto. – MrFlick
Il motivo per cui utilizzo 'vf2' è perché, guardando i documenti, mi sembrava l'unico algoritmo che si occupa dei colori. – alberto