diff --git a/tracking/factorOperations.py b/tracking/factorOperations.py index e96250b..e989bf9 100644 --- a/tracking/factorOperations.py +++ b/tracking/factorOperations.py @@ -102,7 +102,27 @@ def joinFactors(factors: List[Factor]): "*** YOUR CODE HERE ***" - raiseNotDefined() + factor_list = [item for item in factors] + conditioned_variables = [] + unconditioned_variables = [] + variablesDomainDict = factor_list[0].variableDomainsDict() + for factor in factor_list: + for var in factor.unconditionedVariables(): + if var not in unconditioned_variables: + unconditioned_variables.append(var) + if var in conditioned_variables: + conditioned_variables.remove(var) + for var in factor.conditionedVariables(): + if var not in conditioned_variables and var not in unconditioned_variables: + conditioned_variables.append(var) + joint_factor = Factor(unconditioned_variables, conditioned_variables, variablesDomainDict) + cases=joint_factor.getAllPossibleAssignmentDicts() + for case_ in cases: + prob = 1 + for factor in factor_list: + prob *= factor.getProbability(case_) + joint_factor.setProbability(case_, prob) + return joint_factor "*** END YOUR CODE HERE ***" ########### ########### ###########