From 38061036e4149cf4985830e9c717801709c771b4 Mon Sep 17 00:00:00 2001 From: ZhuangYumin Date: Wed, 3 Jul 2024 15:46:29 +0000 Subject: [PATCH] traking q4 --- tracking/inference.py | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/tracking/inference.py b/tracking/inference.py index a5afcd6..e1463f1 100644 --- a/tracking/inference.py +++ b/tracking/inference.py @@ -188,7 +188,32 @@ def inferenceByVariableEliminationWithCallTracking(callTrackingList=None): eliminationOrder = sorted(list(eliminationVariables)) "*** YOUR CODE HERE ***" - raiseNotDefined() + # print("bn=",bayesNet) + # print("queryVariables=",queryVariables) + # print("evidenceDict=",evidenceDict) + # print("eliminationOrder=",eliminationOrder) + # Initialize current factors list with evidence + currentFactorsList = bayesNet.getAllCPTsWithEvidence(evidenceDict) + # print("currentFactorsList=",currentFactorsList) + + # Iteratively join and eliminate variables in the elimination order + for variable in eliminationOrder: + # Join all factors containing the variable, thus making the variable "disappear" in the right part of the factor + currentFactorsList, joinedFactor = joinFactorsByVariable(currentFactorsList, variable) + + # Only eliminate if there are more than one unconditioned variable, thus making the variable "disappear" in the left part of the factor + if len(joinedFactor.unconditionedVariables()) > 1: + eliminatedFactor = eliminate(joinedFactor, variable) + currentFactorsList.append(eliminatedFactor) + + # Join all remaining factors + finalFactor = joinFactors(currentFactorsList) + + # Normalize to get the true conditional probability + normalizedFactor = normalize(finalFactor) + # print("normalizedFactor=",normalizedFactor) + + return normalizedFactor "*** END YOUR CODE HERE ***"