/** * 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; }
/** * Generates a Dynamic Naive Bayes model with randomly initialized distributions. * @param random an object of type {@link java.util.Random}. * @param numberClassStates the number of states for the class variable. * @param connectChildrenTemporally a {@code boolean} that indicates whether the children are connected temporally or not. * @return a {@link DynamicBayesianNetwork} object. */ public static DynamicBayesianNetwork generateDynamicNaiveBayes(Random random, int numberClassStates, boolean connectChildrenTemporally){ DynamicBayesianNetwork network = new DynamicBayesianNetwork( DynamicBayesianNetworkGenerator.generateDynamicNaiveBayesDAG(numberClassStates, connectChildrenTemporally)); network.randomInitialization(random); return network; }
public static void main(String[] args) { DynamicBayesianNetworkGenerator.setNumberOfContinuousVars(0); DynamicBayesianNetworkGenerator.setNumberOfDiscreteVars(5); DynamicBayesianNetworkGenerator.setNumberOfStates(2); DynamicBayesianNetworkGenerator.setNumberOfLinks(5); DynamicBayesianNetwork dynamicNaiveBayes = DynamicBayesianNetworkGenerator.generateDynamicNaiveBayes(new Random(0), 2, true); System.out.println("ORIGINAL DYNAMIC DAG:"); System.out.println(dynamicNaiveBayes.getDynamicDAG().toString()); //System.out.println(dynamicNaiveBayes.toString()); System.out.println(); //dynamicNaiveBayes.getDynamicVariables().getListOfDynamicVariables().forEach(var -> System.out.println(var.getName())); //dynamicNaiveBayes.getDynamicVariables().getListOfDynamicVariables().forEach(var -> System.out.println(var.getName())); BayesianNetwork bn = DynamicToStaticBNConverter.convertDBNtoBN(dynamicNaiveBayes,4); System.out.println("NEW STATIC DAG:"); System.out.println(); System.out.println(bn.getDAG().toString()); System.out.println(); System.out.println("ORIGINAL DYNAMIC BN:"); System.out.println(dynamicNaiveBayes.toString()); System.out.println("STATIC BN:"); System.out.println(bn.toString()); } }
/** * {@inheritDoc} */ @Override public void setModel(DynamicBayesianNetwork model_) { this.model = model_; this.bnTime0 = model.toBayesianNetworkTime0(); this.bnTimeT = model.toBayesianNetworkTimeT(); }
/** * Returns the total number of variables in this DynamicBayesianNetwork. * @return an {@code int} that represents the number of variables. */ public int getNumberOfVars() { return this.getDynamicVariables().getNumberOfVars(); }
DynamicDAG dynamicDAG = model.getDynamicDAG(); BayesianNetwork bn = new BayesianNetwork(dag); Variable staticVar, dynVar; dynVar = model.getDynamicVariables().getVariableByName(MAPvarName); conDist0 = Serialization.deepCopy(model.getConditionalDistributionsTime0().get(dynVar.getVarID())); conDistT = Serialization.deepCopy(model.getConditionalDistributionsTimeT().get(dynVar.getVarID())); Variable staticVar0_interface = variables.getVariableByName(groupedClassName + "_t0"); List<Variable> parents = bn.getDAG().getParentSet(staticVar0).getParents(); ConditionalDistribution conDist_dynamic = Serialization.deepCopy(model.getConditionalDistributionsTimeT().get(dynVar.getVarID())); ConditionalDistribution conditionalDistTime1 = groupedDistributionMAPVariableTimeT(dynVar, staticVar0, staticVar0_interface.getNumberOfStates(), parents, conDist_dynamic, modelNumber); conditionalDistTime1.setVar(staticVar0); List<Variable> dynVariables = model.getDynamicVariables().getListOfDynamicVariables(); List<Variable> dynVariablesWithClassParent = dynVariables.stream().filter(var -> !var.equals(MAPvariable)).filter(var -> dynamicDAG.getParentSetTime0(var).contains(MAPvariable)).collect(Collectors.toList()); List<Variable> dynVariablesNoClassParent = dynVariables.stream().filter(var -> !var.equals(MAPvariable)).filter(var -> !dynamicDAG.getParentSetTime0(var).contains(MAPvariable)).collect(Collectors.toList()); 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(); ConditionalDistribution conditionalDistribution1 = Serialization.deepCopy(model.getConditionalDistributionTimeT(dynVariable)); Variable staticVar2 = variables.getVariableByName(dynVariable.getName() + "_t" + Integer.toString(i)); List<Variable> thisVarParents1 = conditionalDistribution1.getConditioningVariables();
System.out.println(amidstDBN.toString()); for (Variable var: amidstDBN.getDynamicVariables().getListOfDynamicVariables()){
DynamicVariables variables = dynamicNB.getDynamicVariables(); DynamicDAG dynamicDAG = Serialization.deepCopy(dynamicNB.getDynamicDAG()); DynamicBayesianNetwork dynamicFAN = new DynamicBayesianNetwork(dynamicDAG); dynamicFAN.randomInitialization(random); return dynamicFAN;
/** * In this example we show how to create an input-outputString KF with Gaussian mixtures (as in Figure 4.29 of Deliverable 2.1). */ public static void VerdandeInputOutputHMM() throws IOException { DataStream<DynamicDataInstance> data = DynamicDataStreamLoader.loadFromFile("datasets/simulated/syntheticDataVerdandeScenario3.arff"); Attribute attDepth = data.getAttributes().getAttributeByName("depth"); Attribute attGammaDiff = data.getAttributes().getAttributeByName("gammaDiff"); DynamicVariables dynamicVariables = new DynamicVariables(); Variable observedDepth = dynamicVariables.newDynamicVariable(attDepth); Variable observedGammaDiff = dynamicVariables.newDynamicVariable(attGammaDiff); Variable formationNo = dynamicVariables.newMultinomialLogisticDynamicVariable("FormationNo", 2); Variable shift = dynamicVariables.newMultinomialDynamicVariable("Shift",2); DynamicDAG dynamicDAG = new DynamicDAG(dynamicVariables); dynamicDAG.getParentSetTimeT(formationNo).addParent(observedDepth); dynamicDAG.getParentSetTimeT(formationNo).addParent(dynamicVariables.getInterfaceVariable(formationNo)); //TODO Error trying to add a duplicate parent. A -> B <- Aclone. We are considering A and AClone the same variables? Is that right? dynamicDAG.getParentSetTimeT(shift).addParent(formationNo); //dynamicDAG.getParentSetTimeT(shift).addParent(dynamicVariables.getInterfaceVariable(formationNo)); dynamicDAG.getParentSetTimeT(shift).addParent(dynamicVariables.getInterfaceVariable(shift)); dynamicDAG.getParentSetTimeT(observedGammaDiff).addParent(shift); System.out.println("-------------------------------------\n"); System.out.println("Input-outputString HMM (Figure 4.31 of D2.1)\n"); System.out.println(dynamicDAG.toString()); DynamicBayesianNetwork dbn = new DynamicBayesianNetwork(dynamicDAG); System.out.println(dbn.toString()); DynamicBayesianNetworkWriter.save(dbn, "networks/simulated/HuginVerdandeIOHMM.dbn"); }
Variable amidstVar = amidstDBN.getDynamicVariables().getVariableByName(huginNode.getName()); if (amidstDBN.getConditionalDistributionTimeT(amidstVar) instanceof Multinomial){ dist = new Multinomial_MultinomialParents(amidstVar,new ArrayList()); dist.setMultinomial(0,amidstDBN.getConditionalDistributionTimeT(amidstVar)); }else { dist = amidstDBN.getConditionalDistributionTimeT(amidstVar); Variable amidstVar = amidstDBN.getDynamicVariables().getVariableByName(huginNode.getTemporalMaster().getName()); if (amidstDBN.getConditionalDistributionTime0(amidstVar) instanceof Multinomial){ dist = new Multinomial_MultinomialParents(amidstVar,new ArrayList()); dist.setMultinomial(0,amidstDBN.getConditionalDistributionTime0(amidstVar)); }else { dist = amidstDBN.getConditionalDistributionTime0(amidstVar);
DynamicBayesianNetwork dbn = new DynamicBayesianNetwork(dynamicDAG); System.out.printf(dbn.toString()); 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}); 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});
@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; }
/** * Return the list of non-observed and temporally connected variables for time T. * @return a {@code List} of {@link Variable}. */ private List<Variable> getTargetVarsTimeT(){ return this.model.getDynamicVariables().getListOfDynamicVariables().stream() .filter(var -> !var.isInterfaceVariable()) .filter(var -> Utils.isMissingValue(this.assignment.getValue(var))) .filter(var -> { boolean notContainInterfaceVar = true; for (Variable variable : this.model.getDynamicDAG().getParentSetTimeT(var)) { notContainInterfaceVar = notContainInterfaceVar && !variable.isInterfaceVariable(); } return !notContainInterfaceVar; }) .collect(Collectors.toList()); }
/** * 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; }
/** * 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; }
DynamicBayesianNetwork bayesianNetwork = new DynamicBayesianNetwork(dag); 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); Multinomial_MultinomialParents fireprobTimeT = bayesianNetwork.getConditionalDistributionTimeT(fire); fireprobTimeT.getMultinomial(0).setProbabilities(new double[]{1.0, 0.0}); Normal_MultinomialNormalParents tempprobTimeT = bayesianNetwork.getConditionalDistributionTimeT(temperature);
return null; DynamicVariables dynamicVariables = dbn.getDynamicVariables(); Variables variables = new Variables(); DynamicDAG dynamicDAG = dbn.getDynamicDAG(); staticVar = variables.getVariableByName(dynamicVariables.getVariableById(j).getName() + "_t0"); cdist = Serialization.deepCopy(dbn.getConditionalDistributionsTime0().get(j)); cdist.getConditioningVariables().stream().forEachOrdered(cdvar -> parentList.add(variables.getVariableByName(cdvar.getName() + "_t0"))); staticVar = variables.getVariableByName(dynamicVariables.getVariableById(j).getName() + "_t" + Integer.toString(final_i)); cdist = Serialization.deepCopy(dbn.getConditionalDistributionsTimeT().get(j)); cdist.getConditioningVariables().stream().forEachOrdered(cdvar -> { parentList.add(((cdvar.isInterfaceVariable() || (cdvar.getName().contains("_t"))) ?
DynamicBayesianNetwork bn = model.getDynamicBNModel(); bn.randomInitialization(new Random(0)); System.out.println(bn.toString()); Variable targetVar = bn.getDynamicVariables().getVariableByName("DiscreteVar0");
DynamicBayesianNetwork dynamicBayesianNetwork = new DynamicBayesianNetwork(dynamicDAG); System.out.println(dynamicBayesianNetwork.toString()); logProb += dynamicBayesianNetwork.getLogProbabiltyOfFullAssignmentTime0(dataInstance); }else{ logProb += dynamicBayesianNetwork.getLogProbabiltyOfFullAssignmentTimeT(dataInstance);
for (Variable variable : dbn.getDynamicVariables()) { if (!variable.getName().startsWith("A")) continue; Normal_MultinomialNormalParents dist = dbn.getConditionalDistributionTimeT(variable); dist.getNormal_NormalParentsDistribution(0).setCoeffParents(new double[]{1.0}); dist.getNormal_NormalParentsDistribution(0).setIntercept(10); sampler.setHiddenVar(dbn.getDynamicVariables().getVariableByName(hiddenVar)); sampler.setMARVar(dbn.getDynamicVariables().getVariableByName(noisyVar), 0.1); System.out.println("--------------- CREATING DATA " + i + " --------------------------"); if (i==4){ for (Variable variable : dbn.getDynamicVariables()) { if (!variable.getName().startsWith("A")) continue; Normal_MultinomialNormalParents dist = dbn.getConditionalDistributionTimeT(variable); dist.getNormal_NormalParentsDistribution(0).setCoeffParents(new double[]{1.0}); dist.getNormal_NormalParentsDistribution(0).setIntercept(0); for (Variable variable : dbn.getDynamicVariables()) { if (!variable.getName().startsWith("A")) continue; Normal_MultinomialNormalParents dist = dbn.getConditionalDistributionTimeT(variable); dist.getNormal_NormalParentsDistribution(0).setCoeffParents(new double[]{1.0}); dist.getNormal_NormalParentsDistribution(0).setIntercept(-10);