parent
3a80bd3ce9
commit
7efe6778c0
@ -0,0 +1,83 @@ |
|||||||
|
import sys |
||||||
|
sys.path.append('../') |
||||||
|
import itertools |
||||||
|
import json |
||||||
|
import typing |
||||||
|
|
||||||
|
import networkx as nx |
||||||
|
import numpy as np |
||||||
|
from networkx.readwrite import json_graph |
||||||
|
|
||||||
|
from random import choice |
||||||
|
|
||||||
|
from abc import ABC |
||||||
|
|
||||||
|
|
||||||
|
from optimizers.optimizer import Optimizer |
||||||
|
from estimators import structure_estimator as se |
||||||
|
import structure_graph.network_graph as ng |
||||||
|
|
||||||
|
|
||||||
|
class ConstraintBasedOptimizer(Optimizer): |
||||||
|
""" |
||||||
|
Optimizer class that implement Hill Climbing Search |
||||||
|
|
||||||
|
""" |
||||||
|
def __init__(self, |
||||||
|
node_id:str, |
||||||
|
structure_estimator: se.StructureEstimator, |
||||||
|
tot_vars_count:int |
||||||
|
): |
||||||
|
""" |
||||||
|
Compute Optimization process for a structure_estimator |
||||||
|
|
||||||
|
""" |
||||||
|
super().__init__(node_id, structure_estimator) |
||||||
|
self.tot_vars_count = tot_vars_count |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def optimize_structure(self): |
||||||
|
""" |
||||||
|
Compute Optimization process for a structure_estimator |
||||||
|
|
||||||
|
Parameters: |
||||||
|
|
||||||
|
Returns: |
||||||
|
the estimated structure for the node |
||||||
|
|
||||||
|
""" |
||||||
|
print("##################TESTING VAR################", self.node_id) |
||||||
|
u = list(self.structure_estimator.complete_graph.predecessors(self.node_id)) |
||||||
|
#tests_parents_numb = len(u) |
||||||
|
#complete_frame = self.complete_graph_frame |
||||||
|
#test_frame = complete_frame.loc[complete_frame['To'].isin([self.node_id])] |
||||||
|
child_states_numb = self.structure_estimator.sample_path.structure.get_states_number(self.node_id) |
||||||
|
b = 0 |
||||||
|
while b < len(u): |
||||||
|
#for parent_id in u: |
||||||
|
parent_indx = 0 |
||||||
|
while parent_indx < len(u): |
||||||
|
removed = False |
||||||
|
#if not list(self.structure_estimator.generate_possible_sub_sets_of_size(u, b, u[parent_indx])): |
||||||
|
#break |
||||||
|
S = self.structure_estimator.generate_possible_sub_sets_of_size(u, b, u[parent_indx]) |
||||||
|
#print("U Set", u) |
||||||
|
#print("S", S) |
||||||
|
test_parent = u[parent_indx] |
||||||
|
#print("Test Parent", test_parent) |
||||||
|
for parents_set in S: |
||||||
|
#print("Parent Set", parents_set) |
||||||
|
#print("Test Parent", test_parent) |
||||||
|
if self.structure_estimator.complete_test(test_parent, self.node_id, parents_set, child_states_numb, self.tot_vars_count): |
||||||
|
#print("Removing EDGE:", test_parent, self.node_id) |
||||||
|
self.structure_estimator.complete_graph.remove_edge(test_parent, self.node_id) |
||||||
|
u.remove(test_parent) |
||||||
|
removed = True |
||||||
|
break |
||||||
|
#else: |
||||||
|
#parent_indx += 1 |
||||||
|
if not removed: |
||||||
|
parent_indx += 1 |
||||||
|
b += 1 |
||||||
|
self.structure_estimator.cache.clear() |
Reference in new issue