|
- from ged.costfunctions import ConstantCostFunction, RiesenCostFunction
- from ged.costfunctions import NeighboorhoodCostFunction
- from ged.bipartiteGED import computeBipartiteCostMatrix, getOptimalMapping
- from scipy.optimize import linear_sum_assignment
-
- def ged(G1, G2, method='Riesen', rho=None, varrho=None,
- cf=ConstantCostFunction(1, 3, 1, 3),
- solver=linear_sum_assignment):
- """Compute Graph Edit Distance between G1 and G2 according to mapping
- encoded within rho and varrho. Graph's node must be indexed by a
- index which is used is rho and varrho
- NB: Utilisation de
- dictionnaire pour etre plus versatile ?
-
- """
- if ((rho is None) or (varrho is None)):
- if(method == 'Riesen'):
- cf_bp = RiesenCostFunction(cf,lsap_solver=solver)
- elif(method == 'Neighboorhood'):
- cf_bp = NeighboorhoodCostFunction(cf,lsap_solver=solver)
- elif(method == 'Basic'):
- cf_bp = cf
- else:
- raise NameError('Non existent method ')
-
- rho, varrho = getOptimalMapping(
- computeBipartiteCostMatrix(G1, G2, cf_bp), lsap_solver=solver)
-
- n = G1.number_of_nodes()
- m = G2.number_of_nodes()
- ged = 0
- for i in G1.nodes_iter():
- phi_i = rho[i]
- if(phi_i >= m):
- ged += cf.cnd(i, G1)
- else:
- ged += cf.cns(i, phi_i, G1, G2)
- for j in G2.nodes_iter():
- phi_j = varrho[j]
- if(phi_j >= n):
- ged += cf.cni(j, G2)
-
- for e in G1.edges_iter(data=True):
- i = e[0]
- j = e[1]
- phi_i = rho[i]
- phi_j = rho[j]
- if (phi_i < m) and (phi_j < m):
- mappedEdge = len(list(filter(lambda x: True if
- x == phi_j else False, G2[phi_i])))
- if(mappedEdge):
- e2 = [phi_i, phi_j, G2[phi_i][phi_j]]
- min_cost = min(cf.ces(e, e2, G1, G2),
- cf.ced(e, G1) + cf.cei(e2, G2))
- ged += min_cost
- else:
- ged += cf.ced(e, G1)
- else:
- ged += cf.ced(e, G1)
- for e in G2.edges_iter(data=True):
- i = e[0]
- j = e[1]
- phi_i = varrho[i]
- phi_j = varrho[j]
- if (phi_i < n) and (phi_j < n):
- mappedEdge = len(list(filter(lambda x: True if x == phi_j
- else False, G1[phi_i])))
- if(not mappedEdge):
- ged += cf.cei(e, G2)
- else:
- ged += cf.ced(e, G2)
- return ged, rho, varrho
-
-
- def computeDistanceMatrix(dataset):
- pass
|