Browse Source

Add exp: compare GEDEnv with the GEDLIB version.

v0.2.x
jajupmochi 5 years ago
parent
commit
74a6e5fad3
2 changed files with 129 additions and 3 deletions
  1. +126
    -0
      gklearn/experiments/ged/check_results_of_ged_env.py
  2. +3
    -3
      gklearn/ged/util/lsape_solver.py

+ 126
- 0
gklearn/experiments/ged/check_results_of_ged_env.py View File

@@ -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()

+ 3
- 3
gklearn/ged/util/lsape_solver.py View File

@@ -61,9 +61,9 @@ class LSAPESolver(object):
""" """
self.clear_solution() self.clear_solution()
if self.__solve_optimally: if self.__solve_optimally:
row_id, col_id = linear_sum_assignment(self.__cost_matrix) # @todo: only hungarianLSAPE ('ECBP') can be used.
self.__row_to_col_assignments[0] = col_id
self.__col_to_row_assignments[0] = np.argsort(col_id) # @todo: might be slow, can use row_id
row_ind, col_ind = linear_sum_assignment(self.__cost_matrix) # @todo: only hungarianLSAPE ('ECBP') can be used.
self.__row_to_col_assignments[0] = col_ind
self.__col_to_row_assignments[0] = np.argsort(col_ind) # @todo: might be slow, can use row_ind
self.__compute_cost_from_assignments() self.__compute_cost_from_assignments()
if num_solutions > 1: if num_solutions > 1:
pass # @todo: pass # @todo:


Loading…
Cancel
Save