Browse Source

Update MedianGraphEstimator: add __decrease_order() method.

v0.2.x
jajupmochi 5 years ago
parent
commit
5f7a9ed019
2 changed files with 14 additions and 14 deletions
  1. +13
    -13
      gklearn/ged/median/median_graph_estimator.py
  2. +1
    -1
      gklearn/ged/median/test_median_graph_estimator.py

+ 13
- 13
gklearn/ged/median/median_graph_estimator.py View File

@@ -6,7 +6,7 @@ Created on Mon Mar 16 18:04:55 2020
@author: ljia @author: ljia
""" """
import numpy as np import numpy as np
from gklearn.ged.env import AlgorithmState
from gklearn.ged.env import AlgorithmState, NodeMap
from gklearn.ged.util import misc from gklearn.ged.util import misc
from gklearn.utils import Timer from gklearn.utils import Timer
import time import time
@@ -770,7 +770,7 @@ class MedianGraphEstimator(object):
decreased_order = False decreased_order = False
# Decrease the order as long as the best deletion delta is negative. # Decrease the order as long as the best deletion delta is negative.
while self.__compute_best_deletion_delta(graphs, median, id_deleted_node) < -self.__epsilon: # @todo
while self.__compute_best_deletion_delta(graphs, median, id_deleted_node) > -self.__epsilon: # @todo
decreased_order = True decreased_order = True
self.__delete_node_from_median(id_deleted_node[0], median) self.__delete_node_from_median(id_deleted_node[0], median)
@@ -790,13 +790,13 @@ class MedianGraphEstimator(object):
# Compute cost delta. # Compute cost delta.
delta = 0.0 delta = 0.0
for graph_id, graph in graphs.items(): for graph_id, graph in graphs.items():
k = self.__get_node_image_from_map(self.__node_maps_from_median[graph_id], i)
k = self.__node_maps_from_median[graph_id].image(i)
if k == np.inf: if k == np.inf:
delta -= self.__node_del_cost delta -= self.__node_del_cost
else: else:
delta += self.__node_ins_cost - self.__ged_env.get_node_rel_cost(median.nodes[i], graph.nodes[k]) delta += self.__node_ins_cost - self.__ged_env.get_node_rel_cost(median.nodes[i], graph.nodes[k])
for j, j_label in median[i].items(): for j, j_label in median[i].items():
l = self.__get_node_image_from_map(self.__node_maps_from_median[graph_id], j)
l = self.__node_maps_from_median[graph_id].image(j)
if k == np.inf or l == np.inf: if k == np.inf or l == np.inf:
delta -= self.__edge_del_cost delta -= self.__edge_del_cost
elif not graph.has_edge(k, l): elif not graph.has_edge(k, l):
@@ -813,25 +813,25 @@ class MedianGraphEstimator(object):
return best_delta return best_delta
def __delete_node_from_median(self, id_deleted_node, median): # @todo: update env.node_map?
def __delete_node_from_median(self, id_deleted_node, median):
# Update the median. # Update the median.
median.remove_node(id_deleted_node) median.remove_node(id_deleted_node)
# Update the node maps. # Update the node maps.
for _, node_map in self.__node_maps_from_median.items():
new_node_map = [] # @todo
is_unassigned_target_node = [True] * len(node_map)
for key, node_map in self.__node_maps_from_median.items():
new_node_map = NodeMap(nx.number_of_nodes(median), node_map.num_target_nodes())
is_unassigned_target_node = [True] * node_map.num_target_nodes()
for i in range(0, nx.number_of_nodes(median)): for i in range(0, nx.number_of_nodes(median)):
if i != id_deleted_node: if i != id_deleted_node:
new_i = (i if i < id_deleted_node else i - 1) new_i = (i if i < id_deleted_node else i - 1)
k = self.__get_node_image_from_map(node_map, i)
new_node_map.append((new_i, k)) # @todo
k = node_map.image(i)
new_node_map.add_assignment(new_i, k)
if k != np.inf: if k != np.inf:
is_unassigned_target_node[k] = False is_unassigned_target_node[k] = False
for k in range(0, len(node_map)):
for k in range(0, node_map.num_target_nodes()):
if is_unassigned_target_node[k]: if is_unassigned_target_node[k]:
new_node_map.append(np.inf, k)
node_map = new_node_map # @todo
new_node_map.add_assignment(np.inf, k)
self.__node_maps_from_median[key] = new_node_map
# Increase overall number of decreases. # Increase overall number of decreases.
self.__num_decrease_order += 1 self.__num_decrease_order += 1


+ 1
- 1
gklearn/ged/median/test_median_graph_estimator.py View File

@@ -56,7 +56,7 @@ def test_median_graph_estimator():
mge.set_refine_method(algo, '--threads ' + str(threads) + ' --initial-solutions ' + str(initial_solutions) + ' --ratio-runs-from-initial-solutions 1') mge.set_refine_method(algo, '--threads ' + str(threads) + ' --initial-solutions ' + str(initial_solutions) + ' --ratio-runs-from-initial-solutions 1')
mge_options = '--time-limit ' + str(time_limit) + ' --stdout 2 --init-type ' + init_type mge_options = '--time-limit ' + str(time_limit) + ' --stdout 2 --init-type ' + init_type
mge_options += ' --random-inits ' + str(num_inits) + ' --seed ' + '1' + ' --update-order FALSE --refine FALSE'# @todo: std::to_string(rng())
mge_options += ' --random-inits ' + str(num_inits) + ' --seed ' + '1' + ' --update-order TRUE --refine FALSE'# @todo: std::to_string(rng())
# Select the GED algorithm. # Select the GED algorithm.
algo_options = '--threads ' + str(threads) + algo_options_suffix algo_options = '--threads ' + str(threads) + algo_options_suffix


Loading…
Cancel
Save