/** * Sets the dynamic DAG for this this DynamicPlateauStructure. * @param dbnModel a {@link DynamicDAG} object. */ public void setDBNModel(DynamicDAG dbnModel) { this.dbnModel = dbnModel; List<EF_ConditionalDistribution> distTim0 = this.dbnModel.getParentSetsTime0().stream().map(pSet -> pSet.getMainVar().getDistributionType().<EF_ConditionalDistribution>newEFConditionalDistribution(pSet.getParents())).collect(Collectors.toList()); this.setEFBayesianNetworkTime0(new EF_LearningBayesianNetwork(distTim0)); List<EF_ConditionalDistribution> distTimT = this.dbnModel.getParentSetsTimeT().stream().map(pSet -> pSet.getMainVar().getDistributionType().<EF_ConditionalDistribution>newEFConditionalDistribution(pSet.getParents())).collect(Collectors.toList()); this.setEFBayesianNetworkTimeT(new EF_LearningBayesianNetwork(distTimT)); }
/** * 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(); }
.map(pSet -> pSet.getMainVar().getDistributionType().<EF_ConditionalDistribution>newEFConditionalDistribution(pSet.getParents())) .collect(Collectors.toList());
.map(pSet -> pSet.getMainVar().getDistributionType().<EF_ConditionalDistribution>newEFConditionalDistribution(pSet.getParents())) .collect(Collectors.toList());
List<Variable> parents0 = dynamicDAG.getParentSetTime0(dynVar).getParents(); List<Variable> parents = dynamicDAG.getParentSetTimeT(dynVar).getParents();
/** * Initializes the distributions of this DynamicBayesianNetwork. * The initialization is performed for each variable at time ) and T depending on its distribution type * as well as the distribution type of its parent set (if that variable has parents). */ private void initializeDistributions() { //Parents should have been assigned before calling this method (from dynamicmodelling.models) this.distributionsTime0 = new ArrayList(this.getDynamicVariables().getNumberOfVars()); this.distributionsTimeT = new ArrayList(this.getDynamicVariables().getNumberOfVars()); for (Variable var : this.getDynamicVariables()) { int varID = var.getVarID(); /* Distributions at time t */ this.distributionsTimeT.add(varID, var.newConditionalDistribution(this.dynamicDAG.getParentSetTimeT(var).getParents())); this.dynamicDAG.getParentSetTimeT(var).blockParents(); /* Distributions at time 0 */ this.distributionsTime0.add(varID, var.newConditionalDistribution(this.dynamicDAG.getParentSetTime0(var).getParents())); this.dynamicDAG.getParentSetTime0(var).blockParents(); } //distributionsTimeT = Collections.unmodifiableList(this.distributionsTimeT); //distributionsTime0 = Collections.unmodifiableList(this.distributionsTime0); }
dynamicDAG.getParentSetTime0(dynVar).getParents().stream().forEach(parentaux2 -> dag.getParentSet(staticVar).addParent(variables.getVariableByName(parentaux2.getName() + "_t0"))); } else { final int final_i=i; dynamicDAG.getParentSetTimeT(dynVar).getParents().stream().filter(parentVar -> parentVar.isInterfaceVariable()).forEach(parentVar -> dag.getParentSet(staticVar).addParent(variables.getVariableByName(parentVar.getName().replace("_Interface", "_t" + Integer.toString(final_i - 1))))); dynamicDAG.getParentSetTimeT(dynVar).getParents().stream().filter(parentVar -> !parentVar.isInterfaceVariable()).forEach(parentVar -> dag.getParentSet(staticVar).addParent(variables.getVariableByName(parentVar.getName() + "_t" + Integer.toString(final_i))));
.flatMap(p -> p.getParents().stream()) .filter(v -> v.isInterfaceVariable()) .map( v -> this.dynamicDAG.getDynamicVariables().getVariableFromInterface(v)) .flatMap(p -> p.getParents().stream()) .filter(v -> v.isInterfaceVariable()) .map(v -> v.getName())
Variable staticVar_current = variables.getVariableByName(groupedClassName + "_t1"); Variable staticVar_interface = variables.getVariableByName(groupedClassName + "_t0"); List<Variable> parents = bn.getDAG().getParentSet(staticVar_current).getParents(); ConditionalDistribution conDist_dynamic = Serialization.deepCopy(conDistT); Variable staticVar_current = variables.getVariableByName(groupedClassName + "_t2"); Variable staticVar_interface = variables.getVariableByName(groupedClassName + "_t1"); List<Variable> parents = bn.getDAG().getParentSet(staticVar_current).getParents(); ConditionalDistribution conDist_dynamic = Serialization.deepCopy(conDistT); generalConditionalDistTimeT = new Multinomial_MultinomialParents(staticVar, bn.getDAG().getParentSet(staticVar).getParents()); Variable staticVar0 = variables.getVariableByName(groupedClassName + "_t1"); 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); Variable staticVar1 = variables.getVariableByName(groupedClassName + "_t" + Integer.toString(timeStep)); ConditionalDistribution conditionalDistribution = Serialization.deepCopy(generalConditionalDistTimeT); conditionalDistribution.setConditioningVariables(dag.getParentSet(staticVar1).getParents()); conditionalDistribution.setVar(staticVar1); bn.setConditionalDistribution(staticVar1, conditionalDistribution); List<Variable> parents1 = bn.getDAG().getParentSet(staticVar1).getParents(); List<Variable> parentList = bn.getDAG().getParentSet(staticVar2).getParents();
/** * Sets the distribution of a normal variable with multinomial parents in the AMIDST model from the corresponding * distribution in the Hugin model. * For each assignment of the multinomial parents, a univariate normal is set. * @param huginVar the Hugin variable with the distribution to be converted. * @throws ExceptionHugin */ private void setNormal_MultinomialParents(Node huginVar) throws ExceptionHugin { int indexNode = this.huginBN.getNodes().indexOf(huginVar); Variable amidstVar = this.amidstBN.getVariables().getVariableById(indexNode); List<Variable> conditioningVariables = this.amidstBN.getDAG().getParentSet(amidstVar).getParents(); int numParentAssignments = MultinomialIndex.getNumberOfPossibleAssignments(conditioningVariables); Normal_MultinomialParents dist = this.amidstBN.getConditionalDistribution(amidstVar); for (int i = 0; i < numParentAssignments; i++) { Normal normal = dist.getNormal(i); this.setNormal(huginVar, normal, i); } }
/** * Sets the distribution of a multinomial variable with multinomial parents in the AMIDST model * from the corresponding distribution in the Hugin model. * @param huginVar the Hugin variable with the distribution to be converted. * @throws ExceptionHugin */ private void setMultinomial_MultinomialParents(Node huginVar) throws ExceptionHugin { int indexNode = this.huginBN.getNodes().indexOf(huginVar); Variable amidstVar = this.amidstBN.getVariables().getVariableById(indexNode); int numStates = amidstVar.getNumberOfStates(); double[] huginProbabilities = huginVar.getTable().getData(); List<Variable> parents = this.amidstBN.getDAG().getParentSet(amidstVar).getParents(); int numParentAssignments = MultinomialIndex.getNumberOfPossibleAssignments(parents); for (int i = 0; i < numParentAssignments; i++) { double[] amidstProbabilities = new double[numStates]; for (int k = 0; k < numStates; k++) { amidstProbabilities[k] = huginProbabilities[i * numStates + k]; } Multinomial_MultinomialParents dist = this.amidstBN.getConditionalDistribution(amidstVar); dist.getMultinomial(i).setProbabilities(amidstProbabilities); } }
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); } } } }