|
@@ -0,0 +1,126 @@ |
|
|
|
|
|
#!/usr/bin/env python3 |
|
|
|
|
|
# -*- coding: utf-8 -*- |
|
|
|
|
|
""" |
|
|
|
|
|
Created on Thu Jun 25 11:31:46 2020 |
|
|
|
|
|
|
|
|
|
|
|
@author: ljia |
|
|
|
|
|
""" |
|
|
|
|
|
|
|
|
|
|
|
def xp_check_results_of_GEDEnv(): |
|
|
|
|
|
"""Compare results of GEDEnv to GEDLIB. |
|
|
|
|
|
""" |
|
|
|
|
|
"""**1. Get dataset.**""" |
|
|
|
|
|
|
|
|
|
|
|
from gklearn.utils import Dataset |
|
|
|
|
|
|
|
|
|
|
|
# Predefined dataset name, use dataset "MUTAG". |
|
|
|
|
|
ds_name = 'MUTAG' |
|
|
|
|
|
|
|
|
|
|
|
# Initialize a Dataset. |
|
|
|
|
|
dataset = Dataset() |
|
|
|
|
|
# Load predefined dataset "MUTAG". |
|
|
|
|
|
dataset.load_predefined_dataset(ds_name) |
|
|
|
|
|
|
|
|
|
|
|
results1 = compute_geds_by_GEDEnv(dataset) |
|
|
|
|
|
results2 = compute_geds_by_GEDLIB(dataset) |
|
|
|
|
|
|
|
|
|
|
|
# Show results. |
|
|
|
|
|
import pprint |
|
|
|
|
|
pp = pprint.PrettyPrinter(indent=4) # pretty print |
|
|
|
|
|
print('Restuls using GEDEnv:') |
|
|
|
|
|
pp.pprint(results1) |
|
|
|
|
|
print() |
|
|
|
|
|
print('Restuls using GEDLIB:') |
|
|
|
|
|
pp.pprint(results2) |
|
|
|
|
|
|
|
|
|
|
|
return results1, results2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def compute_geds_by_GEDEnv(dataset): |
|
|
|
|
|
from gklearn.ged.env import GEDEnv |
|
|
|
|
|
import numpy as np |
|
|
|
|
|
|
|
|
|
|
|
graph1 = dataset.graphs[0] |
|
|
|
|
|
graph2 = dataset.graphs[1] |
|
|
|
|
|
|
|
|
|
|
|
ged_env = GEDEnv() # initailize GED environment. |
|
|
|
|
|
ged_env.set_edit_cost('CONSTANT', # GED cost type. |
|
|
|
|
|
edit_cost_constants=[3, 3, 1, 3, 3, 1] # edit costs. |
|
|
|
|
|
) |
|
|
|
|
|
for g in dataset.graphs[0:10]: |
|
|
|
|
|
ged_env.add_nx_graph(g, '') |
|
|
|
|
|
# ged_env.add_nx_graph(graph1, '') # add graph1 |
|
|
|
|
|
# ged_env.add_nx_graph(graph2, '') # add graph2 |
|
|
|
|
|
listID = ged_env.get_all_graph_ids() # get list IDs of graphs |
|
|
|
|
|
ged_env.init(init_type='LAZY_WITHOUT_SHUFFLED_COPIES') # initialize GED environment. |
|
|
|
|
|
options = {'threads': 1 # parallel threads. |
|
|
|
|
|
} |
|
|
|
|
|
ged_env.set_method('BIPARTITE', # GED method. |
|
|
|
|
|
options # options for GED method. |
|
|
|
|
|
) |
|
|
|
|
|
ged_env.init_method() # initialize GED method. |
|
|
|
|
|
|
|
|
|
|
|
ged_mat = np.empty((10, 10)) |
|
|
|
|
|
for i in range(0, 10): |
|
|
|
|
|
for j in range(i, 10): |
|
|
|
|
|
ged_env.run_method(i, j) # run. |
|
|
|
|
|
ged_mat[i, j] = ged_env.get_upper_bound(i, j) |
|
|
|
|
|
ged_mat[j, i] = ged_mat[i, j] |
|
|
|
|
|
|
|
|
|
|
|
results = {} |
|
|
|
|
|
results['pi_forward'] = ged_env.get_forward_map(listID[0], listID[1]) # forward map. |
|
|
|
|
|
results['pi_backward'] = ged_env.get_backward_map(listID[0], listID[1]) # backward map. |
|
|
|
|
|
results['upper_bound'] = ged_env.get_upper_bound(listID[0], listID[1]) # GED bewteen two graphs. |
|
|
|
|
|
results['runtime'] = ged_env.get_runtime(listID[0], listID[1]) |
|
|
|
|
|
results['init_time'] = ged_env.get_init_time() |
|
|
|
|
|
results['ged_mat'] = ged_mat |
|
|
|
|
|
|
|
|
|
|
|
return results |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def compute_geds_by_GEDLIB(dataset): |
|
|
|
|
|
from gklearn.gedlib import librariesImport, gedlibpy |
|
|
|
|
|
from gklearn.ged.util import ged_options_to_string |
|
|
|
|
|
import numpy as np |
|
|
|
|
|
|
|
|
|
|
|
graph1 = dataset.graphs[5] |
|
|
|
|
|
graph2 = dataset.graphs[6] |
|
|
|
|
|
|
|
|
|
|
|
ged_env = gedlibpy.GEDEnv() # initailize GED environment. |
|
|
|
|
|
ged_env.set_edit_cost('CONSTANT', # GED cost type. |
|
|
|
|
|
edit_cost_constant=[3, 3, 1, 3, 3, 1] # edit costs. |
|
|
|
|
|
) |
|
|
|
|
|
# ged_env.add_nx_graph(graph1, '') # add graph1 |
|
|
|
|
|
# ged_env.add_nx_graph(graph2, '') # add graph2 |
|
|
|
|
|
for g in dataset.graphs[0:10]: |
|
|
|
|
|
ged_env.add_nx_graph(g, '') |
|
|
|
|
|
listID = ged_env.get_all_graph_ids() # get list IDs of graphs |
|
|
|
|
|
ged_env.init(init_option='LAZY_WITHOUT_SHUFFLED_COPIES') # initialize GED environment. |
|
|
|
|
|
options = {'initialization-method': 'RANDOM', # or 'NODE', etc. |
|
|
|
|
|
'threads': 1 # parallel threads. |
|
|
|
|
|
} |
|
|
|
|
|
ged_env.set_method('BIPARTITE', # GED method. |
|
|
|
|
|
ged_options_to_string(options) # options for GED method. |
|
|
|
|
|
) |
|
|
|
|
|
ged_env.init_method() # initialize GED method. |
|
|
|
|
|
|
|
|
|
|
|
ged_mat = np.empty((10, 10)) |
|
|
|
|
|
for i in range(0, 10): |
|
|
|
|
|
for j in range(i, 10): |
|
|
|
|
|
ged_env.run_method(i, j) # run. |
|
|
|
|
|
ged_mat[i, j] = ged_env.get_upper_bound(i, j) |
|
|
|
|
|
ged_mat[j, i] = ged_mat[i, j] |
|
|
|
|
|
|
|
|
|
|
|
results = {} |
|
|
|
|
|
results['pi_forward'] = ged_env.get_forward_map(listID[0], listID[1]) # forward map. |
|
|
|
|
|
results['pi_backward'] = ged_env.get_backward_map(listID[0], listID[1]) # backward map. |
|
|
|
|
|
results['upper_bound'] = ged_env.get_upper_bound(listID[0], listID[1]) # GED bewteen two graphs. |
|
|
|
|
|
results['runtime'] = ged_env.get_runtime(listID[0], listID[1]) |
|
|
|
|
|
results['init_time'] = ged_env.get_init_time() |
|
|
|
|
|
results['ged_mat'] = ged_mat |
|
|
|
|
|
|
|
|
|
|
|
return results |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == '__main__': |
|
|
|
|
|
results1, results2 = xp_check_results_of_GEDEnv() |