/** * Tests if two Dynamic Bayesian networks are equals. * Two Dynamic Bayesian networks are considered equals if they have an equal conditional distribution for each variable at both Time 0 and T. * @param bnet a given DynamicBayesianNetwork to be compared with this DynamicBayesianNetwork. * @param threshold a threshold value. * @return a boolean indicating if the two DynamicBNs are equals or not. */ public boolean equalDBNs(DynamicBayesianNetwork bnet, double threshold) { boolean equals = true; if (this.getDynamicDAG().equals(bnet.getDynamicDAG())){ for (Variable var : this.getDynamicVariables()) { equals = equals && this.getConditionalDistributionTime0(var).equalDist(bnet.getConditionalDistributionTime0(var), threshold) && this.getConditionalDistributionTimeT(var).equalDist(bnet.getConditionalDistributionTimeT(var), threshold); } } return equals; }
str.append(this.getConditionalDistributionTime0(var).label()+"\n"); }else { str.append("P(" + var.getName() + " | "); str.append(this.getConditionalDistributionTime0(var).label() + "\n"); str.append(this.getConditionalDistributionTime0(var).toString() + "\n");
/** * Returns the Bayesian network at Time 0. * @return a {@link BayesianNetwork} object. */ public BayesianNetwork toBayesianNetworkTime0(){ DAG dagTime0 = this.getDynamicDAG().toDAGTime0(); BayesianNetwork bnTime0 = new BayesianNetwork(dagTime0); for (Variable dynamicVar : this.getDynamicVariables()) { Variable staticVar = dagTime0.getVariables().getVariableByName(dynamicVar.getName()); ConditionalDistribution deepCopy = Serialization.deepCopy(this.getConditionalDistributionTime0(dynamicVar)); deepCopy.setVar(staticVar); List<Variable> newParents = deepCopy.getConditioningVariables().stream().map(var -> dagTime0.getVariables().getVariableByName(var.getName())).collect(Collectors.toList()); deepCopy.setConditioningVariables(newParents); bnTime0.setConditionalDistribution(staticVar,deepCopy); } return bnTime0; }
if (amidstDBN.getConditionalDistributionTime0(amidstVar) instanceof Multinomial){ dist = new Multinomial_MultinomialParents(amidstVar,new ArrayList()); dist.setMultinomial(0,amidstDBN.getConditionalDistributionTime0(amidstVar)); }else { dist = amidstDBN.getConditionalDistributionTime0(amidstVar);
dynamicConDist = Serialization.deepCopy( timeStep==0 ? model.getConditionalDistributionTime0(dynVariable) : model.getConditionalDistributionTimeT(dynVariable) ); ConditionalDistribution conditionalDistribution = Serialization.deepCopy(model.getConditionalDistributionTime0(dynVariable)); Variable staticVar1 = variables.getVariableByName(dynVariable.getName() + "_t0"); List<Variable> thisVarParents = conditionalDistribution.getConditioningVariables();
List<Variable> parentsTime0 = amidstDBN.getDynamicDAG().getParentSetTime0(amidstVar).getParents(); if (parentsTime0.size()==0) { Multinomial dist_Time0 = amidstDBN.getConditionalDistributionTime0(amidstVar); int numStates = amidstVar.getNumberOfStates(); double[] amidstProbabilities = new double[numStates]; Multinomial_MultinomialParents dist_Time0 = amidstDBN.getConditionalDistributionTime0(amidstVar); int numParentAssignmentsTime0 = MultinomialIndex.getNumberOfPossibleAssignments(parentsTime0); int numStates = amidstVar.getNumberOfStates();
Multinomial fireprob = fireDetector.getConditionalDistributionTime0(fire); fireprob.setProbabilities(new double[]{0.999, 0.001}); Normal_MultinomialParents tempprob = fireDetector.getConditionalDistributionTime0(temperature); tempprob.getNormal(1).setMean(tempprob.getNormal(0).getMean()+10); tempprob.getNormal(1).setVariance(tempprob.getNormal(0).getVariance()); Multinomial_MultinomialParents smokeProb = fireDetector.getConditionalDistributionTime0(smoke); smokeProb.getMultinomial(1).setProbabilities(new double[]{0.001, 0.999});
Multinomial fireprobTime0 = bayesianNetwork.getConditionalDistributionTime0(fire); fireprobTime0.setProbabilities(new double[]{1.0, 0.0}); Normal_MultinomialParents tempprob = bayesianNetwork.getConditionalDistributionTime0(temperature); tempprob.getNormal(0).setMean(18); tempprob.getNormal(0).setVariance(3); ConditionalLinearGaussian t1prob = bayesianNetwork.getConditionalDistributionTime0(sensorT1); t1prob.setCoeffForParent(temperature, 1.0); t1prob.setIntercept(0.0); t1prob.setVariance(1.5); ConditionalLinearGaussian t2prob = bayesianNetwork.getConditionalDistributionTime0(sensorT2); t2prob.setCoeffForParent(temperature, 1.0); t2prob.setIntercept(0.0); Multinomial_MultinomialParents smokeProb = bayesianNetwork.getConditionalDistributionTime0(smoke); smokeProb.getMultinomial(0).setProbabilities(new double[]{0.9, 0.1}); Normal_MultinomialParents sensorSmokeProb = bayesianNetwork.getConditionalDistributionTime0(sensorSmoke); sensorSmokeProb.getNormal(0).setMean(0); sensorSmokeProb.getNormal(0).setVariance(0.1);
@Override public DynamicBayesianNetwork getLearntDynamicBayesianNetwork() { BayesianNetwork bnTime0 = this.parallelVBTime0.getLearntBayesianNetwork(); BayesianNetwork bnTimeT = this.svbTimeT.getLearntBayesianNetwork(); DynamicVariables dynamicVariables = this.dynamicDAG.getDynamicVariables(); DynamicBayesianNetwork dbn = new DynamicBayesianNetwork(this.dynamicDAG); for (Variable dynamicVariable : dynamicVariables) { ConditionalDistribution dynamicDist = dbn.getConditionalDistributionTime0(dynamicVariable); ConditionalDistribution staticDist = bnTime0.getConditionalDistribution(bnTime0.getVariables().getVariableByName(dynamicVariable.getName())); staticDist.setVar(dynamicVariable); staticDist.setConditioningVariables(dynamicDist.getConditioningVariables()); dbn.setConditionalDistributionTime0(dynamicVariable,staticDist); } for (Variable dynamicVariable : dynamicVariables) { ConditionalDistribution dynamicDist = dbn.getConditionalDistributionTimeT(dynamicVariable); ConditionalDistribution staticDist = bnTimeT.getConditionalDistribution(bnTimeT.getVariables().getVariableByName(dynamicVariable.getName())); staticDist.setVar(dynamicVariable); staticDist.setConditioningVariables(dynamicDist.getConditioningVariables()); dbn.setConditionalDistributionTimeT(dynamicVariable,staticDist); } return dbn; }
Multinomial distA_Time0 = dbn.getConditionalDistributionTime0(A); distA_Time0.setProbabilities(new double[]{0.3, 0.7}); Multinomial_MultinomialParents distB_Time0 = dbn.getConditionalDistributionTime0(B); distB_Time0.getMultinomial(0).setProbabilities(new double[]{0.4, 0.1, 0.5}); distB_Time0.getMultinomial(1).setProbabilities(new double[]{0.2, 0.5, 0.3}); Multinomial_MultinomialParents distC_Time0 = dbn.getConditionalDistributionTime0(C); distC_Time0.getMultinomial(0).setProbabilities(new double[]{0.4, 0.6}); distC_Time0.getMultinomial(1).setProbabilities(new double[]{0.2, 0.8}); Multinomial_MultinomialParents distD_Time0 = dbn.getConditionalDistributionTime0(D); distD_Time0.getMultinomial(0).setProbabilities(new double[]{0.7, 0.3}); distD_Time0.getMultinomial(1).setProbabilities(new double[]{0.1, 0.9}); Multinomial_MultinomialParents distE_Time0 = dbn.getConditionalDistributionTime0(E); distE_Time0.getMultinomial(0).setProbabilities(new double[]{0.8, 0.2}); distE_Time0.getMultinomial(1).setProbabilities(new double[]{0.1, 0.9}); Multinomial_MultinomialParents distG_Time0 = dbn.getConditionalDistributionTime0(G); distG_Time0.getMultinomial(0).setProbabilities(new double[]{0.6, 0.4}); distG_Time0.getMultinomial(1).setProbabilities(new double[]{0.7, 0.3});