/** * Creates a new DynamicBayesianNetworkSampler given an input {@link DynamicBayesianNetwork} object. * @param network1 an input {@link DynamicBayesianNetwork} object. */ public DynamicBayesianNetworkSampler(DynamicBayesianNetwork network1){ network=network1; this.causalOrderTime0 = eu.amidst.dynamic.utils.Utils.getCausalOrderTime0(network.getDynamicDAG()); this.causalOrderTimeT = eu.amidst.dynamic.utils.Utils.getCausalOrderTimeT(network.getDynamicDAG()); }
public static void main(String[] agrs) throws IOException, ClassNotFoundException { DynamicBayesianNetworkGenerator.setNumberOfContinuousVars(2); DynamicBayesianNetworkGenerator.setNumberOfDiscreteVars(8); DynamicBayesianNetworkGenerator.setNumberOfStates(2); DynamicBayesianNetworkGenerator.setNumberOfLinks(5); DynamicBayesianNetwork dynamicBayesianNetwork; dynamicBayesianNetwork = DynamicBayesianNetworkGenerator.generateDynamicNaiveBayes(new Random(0), 2, true); System.out.println("DYNAMIC NAIVE BAYES"); System.out.println(dynamicBayesianNetwork.getDynamicDAG().toString()); dynamicBayesianNetwork = DynamicBayesianNetworkGenerator.generateDynamicFAN(new Random(0), 2, true); System.out.println("DYNAMIC FAN"); System.out.println(dynamicBayesianNetwork.getDynamicDAG().toString()); dynamicBayesianNetwork = DynamicBayesianNetworkGenerator.generateDynamicTAN(new Random(0), 2, true); System.out.println("DYNAMIC TAN"); System.out.println(dynamicBayesianNetwork.getDynamicDAG().toString()); dynamicBayesianNetwork = DynamicBayesianNetworkGenerator.generateDynamicBayesianNetwork(); System.out.println("DYNAMIC BN"); System.out.println(dynamicBayesianNetwork.getDynamicDAG().toString()); } }
/** * Sets the MAP variable for this DynamicMAPInference. * @param MAPvariable a valid {@link Variable} object. */ public void setMAPvariable(Variable MAPvariable) { boolean parents0 = model.getDynamicDAG().getParentSetTime0(MAPvariable).getNumberOfParents()>0; boolean parentsT = model.getDynamicDAG().getParentSetTimeT(MAPvariable).getParents().stream().anyMatch(parent -> !parent.isInterfaceVariable()); if (parents0 || parentsT) { System.out.println("Error: The dynamic MAP variable must not have parents"); System.exit(-5); } if (!MAPvariable.isMultinomial()) { System.out.println("Error: The dynamic MAP variable must be multinomial"); System.exit(-10); } this.MAPvariable = MAPvariable; this.MAPvarName = MAPvariable.getName(); }
/** * 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()); }
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()); } }
DynamicDAG dynamicDAG = model.getDynamicDAG(); DynamicVariables dynamicVariables = model.getDynamicVariables();
for (Variable var: this.getDynamicVariables()){ if (this.getDynamicDAG().getParentSetTime0(var).getNumberOfParents()==0){ str.append("P(" + var.getName()+") follows a "); str.append(this.getConditionalDistributionTime0(var).label()+"\n"); str.append("P(" + var.getName() + " | "); for (Variable parent : this.getDynamicDAG().getParentSetTime0(var)) { str.append(parent.getName() + " , "); if (this.getDynamicDAG().getParentSetTime0(var).getNumberOfParents() > 0){ str.delete(str.length() - 3, str.length()); if (this.getDynamicDAG().getParentSetTimeT(var).getNumberOfParents()==0){ str.append("P(" + var.getName()+") follows a "); str.append(this.getConditionalDistributionTimeT(var).label()+"\n"); str.append("P(" + var.getName() + " | "); for (Variable parent : this.getDynamicDAG().getParentSetTimeT(var)) { str.append(parent.getName() + " , "); if (this.getDynamicDAG().getParentSetTimeT(var).getNumberOfParents() > 0){ str.delete(str.length() - 3, str.length());
/** * 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; }
.filter(var -> { boolean notContainInterfaceVar = true; for (Variable variable : this.model.getDynamicDAG().getParentSetTimeT(var)) { notContainInterfaceVar = notContainInterfaceVar && !variable.isInterfaceVariable();
/** * 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; }
DynamicDAG dynamicDAG = Serialization.deepCopy(dynamicNB.getDynamicDAG());
DynamicDAG dynamicDAG = Serialization.deepCopy(dynamicNB.getDynamicDAG());
DynamicDAG dynamicDAG = dbn.getDynamicDAG();
public static void main(String[] args) throws IOException { Random random = new Random(1); //We first generate a dynamic Bayesian network (NB structure with class and attributes temporally linked) DynamicBayesianNetworkGenerator.setNumberOfContinuousVars(2); DynamicBayesianNetworkGenerator.setNumberOfDiscreteVars(5); DynamicBayesianNetworkGenerator.setNumberOfStates(3); DynamicBayesianNetwork dbnRandom = DynamicBayesianNetworkGenerator.generateDynamicNaiveBayes(random,2,true); //Sample dynamic data from the created dbn with random parameters DynamicBayesianNetworkSampler sampler = new DynamicBayesianNetworkSampler(dbnRandom); sampler.setSeed(0); //Sample 3 sequences of 100K instances DataStream<DynamicDataInstance> data = sampler.sampleToDataBase(3,10000); /*Parameter Learning with ML*/ //We fix the DAG structure, the data and learn the DBN ParameterLearningAlgorithm parallelMaximumLikelihood = new ParallelMaximumLikelihood(); parallelMaximumLikelihood.setWindowsSize(1000); parallelMaximumLikelihood.setDynamicDAG(dbnRandom.getDynamicDAG()); parallelMaximumLikelihood.initLearning(); parallelMaximumLikelihood.updateModel(data); DynamicBayesianNetwork dbnLearnt = parallelMaximumLikelihood.getLearntDBN(); //We print the model System.out.println(dbnLearnt.toString()); }
DynamicDAG dynamicDAG = model.getDynamicDAG(); BayesianNetwork bn = new BayesianNetwork(dag); Variable staticVar, dynVar;
svb.setDynamicDAG(dbnRandom.getDynamicDAG()); svb.setDataStream(data); svb.runLearning();
List<Variable> parentsTimeT = amidstDBN.getDynamicDAG().getParentSetTimeT(amidstVar).getParents(); if (parentsTimeT.size()==0){ Multinomial dist_TimeT = amidstDBN.getConditionalDistributionTimeT(amidstVar); List<Variable> parentsTime0 = amidstDBN.getDynamicDAG().getParentSetTime0(amidstVar).getParents(); if (parentsTime0.size()==0) { Multinomial dist_Time0 = amidstDBN.getConditionalDistributionTime0(amidstVar);
/** * Sets the Hugin model structure from the AMIDST Dynamic DAG. * @param amidstDBN the Dynamic Bayesian network model in AMIDST format. * @throws ExceptionHugin */ private void setStructure (DynamicBayesianNetwork amidstDBN) throws ExceptionHugin { DynamicDAG dynamicDAG = amidstDBN.getDynamicDAG(); DynamicVariables dynamicVariables = amidstDBN.getDynamicVariables(); List<Variable> amidstVars = dynamicVariables.getListOfDynamicVariables(); for (Variable amidstChild: amidstVars){ List<Variable> amidstParents = dynamicDAG.getParentSetTimeT(amidstChild).getParents(); Node huginChild = this.huginDBN.getNodeByName(amidstChild.getName()); for(Variable amidstParent: amidstParents) { if(amidstParent.isInterfaceVariable()) { huginChild.addParent(huginChild.getTemporalClone()); } else { //Variable Node huginParent = this.huginDBN.getNodeByName(amidstParent.getName()); huginChild.addParent(huginParent); Node huginParentClone = huginParent.getTemporalClone(); Node huginChildClone = huginChild.getTemporalClone(); huginChildClone.addParent(huginParentClone); } } } }