|
|
@@ -0,0 +1,66 @@ |
|
|
|
import ot |
|
|
|
import sys |
|
|
|
import pathlib |
|
|
|
sys.path.insert(0, "../") |
|
|
|
|
|
|
|
from pygraph.utils.graphfiles import loadDataset |
|
|
|
from pygraph.ged.costfunctions import ConstantCostFunction |
|
|
|
from pygraph.utils.utils import getSPLengths |
|
|
|
from tqdm import tqdm |
|
|
|
import numpy as np |
|
|
|
from scipy.optimize import linear_sum_assignment |
|
|
|
from pygraph.ged.GED import ged |
|
|
|
import scipy |
|
|
|
|
|
|
|
def pad(C, n): |
|
|
|
C_pad = np.zeros((n, n)) |
|
|
|
C_pad[:C.shape[0], :C.shape[1]] = C |
|
|
|
return C_pad |
|
|
|
|
|
|
|
if (__name__ == "__main__"): |
|
|
|
ds_filename = "/home/bgauzere/work/Datasets/Acyclic/dataset_bps.ds" |
|
|
|
dataset, y = loadDataset(ds_filename) |
|
|
|
cf = ConstantCostFunction(1, 3, 1, 3) |
|
|
|
N = len(dataset) |
|
|
|
|
|
|
|
pairs = list() |
|
|
|
|
|
|
|
ged_distances = list() #np.zeros((N, N)) |
|
|
|
gw_distances = list() #np.zeros((N, N)) |
|
|
|
for i in tqdm(range(0, N)): |
|
|
|
for j in tqdm(range(i, N)): |
|
|
|
G1 = dataset[i] |
|
|
|
G2 = dataset[j] |
|
|
|
n = G1.number_of_nodes() |
|
|
|
m = G2.number_of_nodes() |
|
|
|
if(n == m): |
|
|
|
C1 = getSPLengths(G1) |
|
|
|
C2 = getSPLengths(G2) |
|
|
|
|
|
|
|
C1 /= C1.max() |
|
|
|
C2 /= C2.max() |
|
|
|
|
|
|
|
dim = max(n, m) |
|
|
|
if(n < m): |
|
|
|
C1 = pad(C1, dim) |
|
|
|
elif (m < n): |
|
|
|
C2 = pad(C2, dim) |
|
|
|
|
|
|
|
p = ot.unif(dim) |
|
|
|
q = ot.unif(dim) |
|
|
|
|
|
|
|
gw = ot.gromov_wasserstein(C1, C2, p, q, |
|
|
|
'square_loss', epsilon=5e-3) |
|
|
|
row_ind, col_ind = linear_sum_assignment(-gw) |
|
|
|
rho = col_ind |
|
|
|
varrho = row_ind[np.argsort(col_ind)] |
|
|
|
pairs.append((i,j)) |
|
|
|
gw_distances.append(ged(G1, G2, cf=cf, rho=rho, varrho=varrho)[0]) |
|
|
|
|
|
|
|
ged_distances.append(ged(G1, G2, cf=cf)[0]) |
|
|
|
|
|
|
|
print("Moyenne sur Riesen : {}".format(np.mean(ged_distances))) |
|
|
|
print("Moyenne sur GW : {} ".format(np.mean(gw_distances))) |
|
|
|
|
|
|
|
np.save("distances_riesen", ged_distances) |
|
|
|
np.save("distances_gw", gw_distances) |