feat: complete q3

This commit is contained in:
snsd0805 2024-05-07 17:41:23 +08:00
parent a7d3d8a969
commit c57e6e4626
Signed by: snsd0805
GPG Key ID: 569349933C77A854

View File

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