You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

check_results_of_ged_env.py 4.0 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. """
  4. Created on Thu Jun 25 11:31:46 2020
  5. @author: ljia
  6. """
  7. def xp_check_results_of_GEDEnv():
  8. """Compare results of GEDEnv to GEDLIB.
  9. """
  10. """**1. Get dataset.**"""
  11. from gklearn.utils import Dataset
  12. # Predefined dataset name, use dataset "MUTAG".
  13. ds_name = 'MUTAG'
  14. # Initialize a Dataset.
  15. dataset = Dataset()
  16. # Load predefined dataset "MUTAG".
  17. dataset.load_predefined_dataset(ds_name)
  18. results1 = compute_geds_by_GEDEnv(dataset)
  19. results2 = compute_geds_by_GEDLIB(dataset)
  20. # Show results.
  21. import pprint
  22. pp = pprint.PrettyPrinter(indent=4) # pretty print
  23. print('Restuls using GEDEnv:')
  24. pp.pprint(results1)
  25. print()
  26. print('Restuls using GEDLIB:')
  27. pp.pprint(results2)
  28. return results1, results2
  29. def compute_geds_by_GEDEnv(dataset):
  30. from gklearn.ged.env import GEDEnv
  31. import numpy as np
  32. graph1 = dataset.graphs[0]
  33. graph2 = dataset.graphs[1]
  34. ged_env = GEDEnv() # initailize GED environment.
  35. ged_env.set_edit_cost('CONSTANT', # GED cost type.
  36. edit_cost_constants=[3, 3, 1, 3, 3, 1] # edit costs.
  37. )
  38. for g in dataset.graphs[0:10]:
  39. ged_env.add_nx_graph(g, '')
  40. # ged_env.add_nx_graph(graph1, '') # add graph1
  41. # ged_env.add_nx_graph(graph2, '') # add graph2
  42. listID = ged_env.get_all_graph_ids() # get list IDs of graphs
  43. ged_env.init(init_type='LAZY_WITHOUT_SHUFFLED_COPIES') # initialize GED environment.
  44. options = {'threads': 1 # parallel threads.
  45. }
  46. ged_env.set_method('BIPARTITE', # GED method.
  47. options # options for GED method.
  48. )
  49. ged_env.init_method() # initialize GED method.
  50. ged_mat = np.empty((10, 10))
  51. for i in range(0, 10):
  52. for j in range(i, 10):
  53. ged_env.run_method(i, j) # run.
  54. ged_mat[i, j] = ged_env.get_upper_bound(i, j)
  55. ged_mat[j, i] = ged_mat[i, j]
  56. results = {}
  57. results['pi_forward'] = ged_env.get_forward_map(listID[0], listID[1]) # forward map.
  58. results['pi_backward'] = ged_env.get_backward_map(listID[0], listID[1]) # backward map.
  59. results['upper_bound'] = ged_env.get_upper_bound(listID[0], listID[1]) # GED bewteen two graphs.
  60. results['runtime'] = ged_env.get_runtime(listID[0], listID[1])
  61. results['init_time'] = ged_env.get_init_time()
  62. results['ged_mat'] = ged_mat
  63. return results
  64. def compute_geds_by_GEDLIB(dataset):
  65. from gklearn.gedlib import librariesImport, gedlibpy
  66. from gklearn.ged.util import ged_options_to_string
  67. import numpy as np
  68. graph1 = dataset.graphs[5]
  69. graph2 = dataset.graphs[6]
  70. ged_env = gedlibpy.GEDEnv() # initailize GED environment.
  71. ged_env.set_edit_cost('CONSTANT', # GED cost type.
  72. edit_cost_constant=[3, 3, 1, 3, 3, 1] # edit costs.
  73. )
  74. # ged_env.add_nx_graph(graph1, '') # add graph1
  75. # ged_env.add_nx_graph(graph2, '') # add graph2
  76. for g in dataset.graphs[0:10]:
  77. ged_env.add_nx_graph(g, '')
  78. listID = ged_env.get_all_graph_ids() # get list IDs of graphs
  79. ged_env.init(init_option='LAZY_WITHOUT_SHUFFLED_COPIES') # initialize GED environment.
  80. options = {'initialization-method': 'RANDOM', # or 'NODE', etc.
  81. 'threads': 1 # parallel threads.
  82. }
  83. ged_env.set_method('BIPARTITE', # GED method.
  84. ged_options_to_string(options) # options for GED method.
  85. )
  86. ged_env.init_method() # initialize GED method.
  87. ged_mat = np.empty((10, 10))
  88. for i in range(0, 10):
  89. for j in range(i, 10):
  90. ged_env.run_method(i, j) # run.
  91. ged_mat[i, j] = ged_env.get_upper_bound(i, j)
  92. ged_mat[j, i] = ged_mat[i, j]
  93. results = {}
  94. results['pi_forward'] = ged_env.get_forward_map(listID[0], listID[1]) # forward map.
  95. results['pi_backward'] = ged_env.get_backward_map(listID[0], listID[1]) # backward map.
  96. results['upper_bound'] = ged_env.get_upper_bound(listID[0], listID[1]) # GED bewteen two graphs.
  97. results['runtime'] = ged_env.get_runtime(listID[0], listID[1])
  98. results['init_time'] = ged_env.get_init_time()
  99. results['ged_mat'] = ged_mat
  100. return results
  101. if __name__ == '__main__':
  102. results1, results2 = xp_check_results_of_GEDEnv()

A Python package for graph kernels, graph edit distances and graph pre-image problem.