/** * 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.getConditionalDistributionTimeT(var).label()+"\n"); }else { str.append("P(" + var.getName() + " | "); str.append(this.getConditionalDistributionTimeT(var).label() + "\n"); str.append(this.getConditionalDistributionTimeT(var).toString() + "\n");
/** * Returns the Bayesian network at Time T. * @return a {@link BayesianNetwork} object. */ public BayesianNetwork toBayesianNetworkTimeT(){ DAG dagTimeT = this.getDynamicDAG().toDAGTimeT(); BayesianNetwork bnTimeT = new BayesianNetwork(dagTimeT); for (Variable dynamicVar : this.getDynamicVariables()) { Variable staticVar = dagTimeT.getVariables().getVariableByName(dynamicVar.getName()); ConditionalDistribution deepCopy = Serialization.deepCopy(this.getConditionalDistributionTimeT(dynamicVar)); deepCopy.setVar(staticVar); List<Variable> newParents = deepCopy.getConditioningVariables().stream().map(var -> dagTimeT.getVariables().getVariableByName(var.getName())).collect(Collectors.toList()); deepCopy.setConditioningVariables(newParents); bnTimeT.setConditionalDistribution(staticVar,deepCopy); } return bnTimeT; }
if (amidstDBN.getConditionalDistributionTimeT(amidstVar) instanceof Multinomial){ dist = new Multinomial_MultinomialParents(amidstVar,new ArrayList()); dist.setMultinomial(0,amidstDBN.getConditionalDistributionTimeT(amidstVar)); }else { dist = amidstDBN.getConditionalDistributionTimeT(amidstVar);
dynamicConDist = Serialization.deepCopy( timeStep==0 ? model.getConditionalDistributionTime0(dynVariable) : model.getConditionalDistributionTimeT(dynVariable) ); ConditionalDistribution conditionalDistribution1 = Serialization.deepCopy(model.getConditionalDistributionTimeT(dynVariable)); Variable staticVar2 = variables.getVariableByName(dynVariable.getName() + "_t" + Integer.toString(i)); List<Variable> thisVarParents1 = conditionalDistribution1.getConditioningVariables();
Multinomial_MultinomialParents fireprobTimeT = fireDetector.getConditionalDistributionTimeT(fire); fireprobTimeT.getMultinomial(0).setProbabilities(new double[]{0.999, 0.001}); fireprobTimeT.getMultinomial(1).setProbabilities(new double[]{0.01, 0.99}); Multinomial_MultinomialParents smokeProbTimeT = fireDetector.getConditionalDistributionTimeT(smoke); smokeProbTimeT.getMultinomial(1).setProbabilities(new double[]{0.001, 0.999}); smokeProbTimeT.getMultinomial(3).setProbabilities(new double[]{0.001, 0.999}); Normal_MultinomialNormalParents tempTimeT = fireDetector.getConditionalDistributionTimeT(temperature); tempTimeT.getNormal_NormalParentsDistribution(1).setIntercept(tempprob.getNormal(0).getMean()+10); tempTimeT.getNormal_NormalParentsDistribution(1).setCoeffForParent(temperature.getInterfaceVariable(),0.0);
List<Variable> parentsTimeT = amidstDBN.getDynamicDAG().getParentSetTimeT(amidstVar).getParents(); if (parentsTimeT.size()==0){ Multinomial dist_TimeT = amidstDBN.getConditionalDistributionTimeT(amidstVar); int numStates = amidstVar.getNumberOfStates(); double[] amidstProbabilities = new double[numStates]; Multinomial_MultinomialParents dist_TimeT = amidstDBN.getConditionalDistributionTimeT(amidstVar); int numParentAssignments = MultinomialIndex.getNumberOfPossibleAssignments(parentsTimeT); int numStates = amidstVar.getNumberOfStates();
Normal_MultinomialNormalParents dist = dbn.getConditionalDistributionTimeT(variable); dist.getNormal_NormalParentsDistribution(0).setCoeffParents(new double[]{1.0}); dist.getNormal_NormalParentsDistribution(0).setIntercept(10); Normal_MultinomialNormalParents dist = dbn.getConditionalDistributionTimeT(variable); dist.getNormal_NormalParentsDistribution(0).setCoeffParents(new double[]{1.0}); dist.getNormal_NormalParentsDistribution(0).setIntercept(0); Normal_MultinomialNormalParents dist = dbn.getConditionalDistributionTimeT(variable); dist.getNormal_NormalParentsDistribution(0).setCoeffParents(new double[]{1.0}); dist.getNormal_NormalParentsDistribution(0).setIntercept(-10);
Multinomial_MultinomialParents fireprobTimeT = bayesianNetwork.getConditionalDistributionTimeT(fire); fireprobTimeT.getMultinomial(0).setProbabilities(new double[]{1.0, 0.0}); Normal_MultinomialNormalParents tempprobTimeT = bayesianNetwork.getConditionalDistributionTimeT(temperature); tempprobTimeT.getNormal_NormalParentsDistribution(0).setIntercept(0); tempprobTimeT.getNormal_NormalParentsDistribution(0).setCoeffForParent(temperature.getInterfaceVariable(),1); tempprobTimeT.getNormal_NormalParentsDistribution(0).setVariance(0.00001); ConditionalLinearGaussian t1probTimeT = bayesianNetwork.getConditionalDistributionTimeT(sensorT1); t1probTimeT.setCoeffForParent(temperature, 1.0); t1probTimeT.setIntercept(0.0); t1probTimeT.setVariance(1.5); ConditionalLinearGaussian t2probTimeT = bayesianNetwork.getConditionalDistributionTimeT(sensorT2); t2probTimeT.setCoeffForParent(temperature, 1.0); t2probTimeT.setIntercept(0.0); Multinomial_MultinomialParents smokeProbTimeT = bayesianNetwork.getConditionalDistributionTimeT(smoke); smokeProbTimeT.getMultinomial(0).setProbabilities(new double[]{0.9, 0.1}); smokeProbTimeT.getMultinomial(1).setProbabilities(new double[]{0.9, 0.1}); smokeProbTimeT.getMultinomial(3).setProbabilities(new double[]{0.9, 0.1}); Normal_MultinomialParents sensorSmokeProbTimeT = bayesianNetwork.getConditionalDistributionTimeT(sensorSmoke); sensorSmokeProbTimeT.getNormal(0).setMean(0); sensorSmokeProbTimeT.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_MultinomialParents distA_TimeT = dbn.getConditionalDistributionTimeT(A); distA_TimeT.getMultinomial(0).setProbabilities(new double[]{0.15, 0.85}); distA_TimeT.getMultinomial(1).setProbabilities(new double[]{0.1, 0.9}); Multinomial_MultinomialParents distB_TimeT = dbn.getConditionalDistributionTimeT(B); distB_TimeT.getMultinomial(0).setProbabilities(new double[]{0.1, 0.2, 0.7}); distB_TimeT.getMultinomial(1).setProbabilities(new double[]{0.6, 0.1, 0.3}); Multinomial_MultinomialParents distC_TimeT = dbn.getConditionalDistributionTimeT(C); distC_TimeT.getMultinomial(0).setProbabilities(new double[]{0.4, 0.6}); distC_TimeT.getMultinomial(1).setProbabilities(new double[]{0.2, 0.8}); Multinomial_MultinomialParents distD_TimeT = dbn.getConditionalDistributionTimeT(D); distD_TimeT.getMultinomial(0).setProbabilities(new double[]{0.7, 0.3}); distD_TimeT.getMultinomial(1).setProbabilities(new double[]{0.1, 0.9}); Multinomial_MultinomialParents distE_TimeT = dbn.getConditionalDistributionTimeT(E); distE_TimeT.getMultinomial(0).setProbabilities(new double[]{0.3, 0.7}); distE_TimeT.getMultinomial(1).setProbabilities(new double[]{0.6, 0.4}); Multinomial_MultinomialParents distG_TimeT = dbn.getConditionalDistributionTimeT(G); distG_TimeT.getMultinomial(0).setProbabilities(new double[]{0.2, 0.8}); distG_TimeT.getMultinomial(1).setProbabilities(new double[]{0.5, 0.5});