feat: complete q2
This commit is contained in:
parent
f9da3043da
commit
a7d3d8a969
@ -102,7 +102,40 @@ def joinFactors(factors: List[Factor]):
|
||||
|
||||
|
||||
"*** 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 ***"
|
||||
|
||||
########### ########### ###########
|
||||
|
||||
Loading…
Reference in New Issue
Block a user