From c57e6e4626ecb6b37e217bd0e618efb8d3128c59 Mon Sep 17 00:00:00 2001 From: snsd0805 Date: Tue, 7 May 2024 17:41:23 +0800 Subject: [PATCH] feat: complete q3 --- factorOperations.py | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/factorOperations.py b/factorOperations.py index 304d7b7..1519c87 100644 --- a/factorOperations.py +++ b/factorOperations.py @@ -107,7 +107,6 @@ def joinFactors(factors: List[Factor]): for factor in factors: - print(factor) ''' print(factor.unconditionedVariables()) print(factor.conditionedVariables()) @@ -186,7 +185,30 @@ def eliminateWithCallTracking(callTrackingList=None): "unconditionedVariables: " + str(factor.unconditionedVariables())) "*** YOUR CODE HERE ***" - raiseNotDefined() + conditioned_variables = set(factor.conditionedVariables()) + unconditioned_variables = set(factor.unconditionedVariables()) + + # remove the elimination_variable from unconditioned variables + unconditioned_variables.remove(eliminationVariable) + + # new variable_domains_dict, removing the elimination variable + variable_domains_dict = {} + for variable, domains in factor.variableDomainsDict().items(): + if variable != eliminationVariable: + variable_domains_dict[variable] = domains + + new_factor = Factor(unconditioned_variables, conditioned_variables, variable_domains_dict) + + for fill_assignment in new_factor.getAllPossibleAssignmentDicts(): + prob = 0 + eliminate_variable_domains = factor.variableDomainsDict()[eliminationVariable] + for var in eliminate_variable_domains: + old_assignment = fill_assignment.copy() + old_assignment[eliminationVariable] = var + prob += factor.getProbability(old_assignment) + new_factor.setProbability(fill_assignment, prob) + return new_factor + "*** END YOUR CODE HERE ***" return eliminate