package bayesGame.bayesbayes.nodeCPD; import org.apache.commons.math3.fraction.Fraction; import bayesGame.bayesbayes.BayesNode; public class BayesCPD implements NodeCPD { private Fraction probabilityIfParentTrue; private Fraction probabilityIfParentFalse; public BayesCPD(Fraction trueProbability, Fraction falseProbability) { probabilityIfParentTrue = trueProbability; probabilityIfParentFalse = falseProbability; } @Override public BayesNode getNode(BayesNode sourceBayesNode, Object[] parents) { if (parents.length > 1){ throw(new IllegalArgumentException("Conditional probability only accepts one parent")); } Object nodeType = sourceBayesNode.type; sourceBayesNode.setProbabilityOfUntrueVariables(probabilityIfParentTrue); sourceBayesNode.setProbabilityOfUntrueVariables(Fraction.ONE.subtract(probabilityIfParentTrue), nodeType); sourceBayesNode.setProbabilityOfUntrueVariables(probabilityIfParentFalse, parents[0]); sourceBayesNode.setProbabilityOfUntrueVariables(Fraction.ONE.subtract(probabilityIfParentFalse), nodeType, parents[0]); String description = "'" + sourceBayesNode.type + "' is a conditional probability variable of type Bayes.\nIt has a " + probabilityIfParentTrue.getNumerator() + " in " + probabilityIfParentTrue.getDenominator() + " chance of being true if its parent is true, and a " + probabilityIfParentFalse.getNumerator() + " in " + probabilityIfParentFalse.getDenominator() + " chance of being true if its parent is false."; sourceBayesNode.cptDescription = description; sourceBayesNode.cptName = "Bayes"; return sourceBayesNode; } }