feat: complete q2
This commit is contained in:
parent
f9da3043da
commit
a7d3d8a969
@ -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 ***"
|
||||||
|
|
||||||
########### ########### ###########
|
########### ########### ###########
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user