feat: complete q2

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

View File

@ -102,7 +102,40 @@ def joinFactors(factors: List[Factor]):
"*** YOUR CODE HERE ***" "*** YOUR CODE HERE ***"
raiseNotDefined() conditioned_variables = set()
unconditioned_variables = set()
for factor in factors:
print(factor)
'''
print(factor.unconditionedVariables())
print(factor.conditionedVariables())
'''
conditioned_variables.update([ i for i in factor.conditionedVariables()])
unconditioned_variables.update([ i for i in factor.unconditionedVariables()])
# remove unconditioned_variables from new conditioned_variables
for var in list(conditioned_variables):
if var in unconditioned_variables:
conditioned_variables.remove(var)
# construct the new factor
# then, we should change the probability.
# Hint from CS188's page:
# For this problem, you may assume that all the input Factors have come from the same BayesNet, and so their variableDomainsDicts are all the same
new_factor = Factor(unconditioned_variables, conditioned_variables, list(factors)[0].variableDomainsDict())
# new probability
for assignment in new_factor.getAllPossibleAssignmentDicts():
prob = 1
for factor in factors:
prob *= factor.getProbability(assignment)
new_factor.setProbability(assignment, prob)
return new_factor
"*** END YOUR CODE HERE ***" "*** END YOUR CODE HERE ***"
########### ########### ########### ########### ########### ###########