dynamicDAG.getParentSetTime0(gaussianHiddenVars.get(i)).addParent(gaussianHiddenVars.get(j)); dynamicDAG.getParentSetTimeT(gaussianHiddenVars.get(i)).addParent(gaussianHiddenVars.get(j)); dynamicDAG.getParentSetTime0(observedVars.get(i)).addParent(observedVars.get(j)); dynamicDAG.getParentSetTimeT(observedVars.get(i)).addParent(observedVars.get(j));
/** * 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(); }
/** * Returns a textual representation of the parent set of this DynamicDAG. * @return a String description of the parent set of this DynamicDAG. */ public String toString() { StringBuilder str = new StringBuilder(); str.append("\nDynamic DAG at Time 0\n"); for (Variable var : this.getDynamicVariables()) { str.append(var.getName() + " has "+ this.getParentSetTime0(var).getNumberOfParents() + " parent(s): " + this.parentSetTime0.get(var.getVarID()).toString() + "\n"); } str.append("\nDynamic DAG at Time T\n"); for (Variable var : this.getDynamicVariables()) { str.append(var.getName() + " has "+ this.getParentSetTimeT(var).getNumberOfParents() + " parent(s): " + this.getParentSetTimeT(var).toString() + "\n"); } return str.toString(); }
dynamicDAG.getParentSetTime0(observedVars.get(i)).addParent(observedVars.get(j)); dynamicDAG.getParentSetTimeT(observedVars.get(i)).addParent(observedVars.get(j));
Variable var2 = nonConnectedVars.get(random.nextInt(nonConnectedVars.size())); if (var1.getVarID()<var2.getVarID() && dag.getParentSetTime0(var2).getNumberOfParents()==0 && var2.getDistributionType().isParentCompatible(var1)) dag.getParentSetTime0(var2).addParent(var1); else if (var2.getVarID()<var1.getVarID() && dag.getParentSetTime0(var1).getNumberOfParents()==0 && var1.getDistributionType().isParentCompatible(var2)) dag.getParentSetTime0(var1).addParent(var2); else continue;
@Override protected void buildDAG() { Variable discreteHiddenVar = this.variables.newMultinomialDynamicVariable("discreteHiddenVar", getNumStatesHiddenVar()); dynamicDAG = new DynamicDAG(this.variables); dynamicDAG.getParentSetsTimeT() .stream() .filter(w -> w.getMainVar() != discreteHiddenVar) .forEach(w -> w.addParent(discreteHiddenVar)); dynamicDAG.getParentSetTimeT(discreteHiddenVar).addParent(discreteHiddenVar.getInterfaceVariable()); /* * Learn full covariance matrix */ if(!isDiagonal()) { List<Variable> observedVars = this.variables.getListOfDynamicVariables() .stream() .filter(v -> !v.equals(discreteHiddenVar)) .peek(v-> { if(v.isMultinomial()) throw new UnsupportedOperationException("Full covariance matrix cannot be used with" + " multinomial attributes"); }) .collect(Collectors.toList()); for (int i=0; i<observedVars.size()-1; i++){ for(int j=i+1; j<observedVars.size(); j++) { dynamicDAG.getParentSetTime0(observedVars.get(i)).addParent(observedVars.get(j)); dynamicDAG.getParentSetTimeT(observedVars.get(i)).addParent(observedVars.get(j)); } } } }
dynamicDAG.getParentSetTime0(observedVars.get(i)).addParent(observedVars.get(j)); dynamicDAG.getParentSetTimeT(observedVars.get(i)).addParent(observedVars.get(j));
/** * 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(inputVars.get(i)).addParent(inputVars.get(j)); dynamicDAG.getParentSetTimeT(inputVars.get(i)).addParent(inputVars.get(j)); dynamicDAG.getParentSetTime0(outputVars.get(i)).addParent(outputVars.get(j)); dynamicDAG.getParentSetTimeT(outputVars.get(i)).addParent(outputVars.get(j));
List<Variable> parents0 = dynamicDAG.getParentSetTime0(dynVar).getParents();
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());
public static List<Variable> getCausalOrderTime0(DynamicDAG dag){ DynamicVariables variables = dag.getDynamicVariables(); int nNrOfAtts = variables.getNumberOfVars(); List<Variable> order = new ArrayList(); boolean[] bDone = new boolean[variables.getNumberOfVars()]; for (Variable var: variables){ bDone[var.getVarID()] = false; } for (int iAtt = 0; iAtt < nNrOfAtts; iAtt++) { boolean allParentsDone = false; for (Variable var2 : variables){ if (!bDone[var2.getVarID()]) { allParentsDone = true; int iParent = 0; for (Variable parent: dag.getParentSetTime0(var2)) allParentsDone = allParentsDone && bDone[parent.getVarID()]; if (allParentsDone){ order.add(var2); bDone[var2.getVarID()] = true; } } } } return order; }
dynamicDAG.getParentSetTime0(attrVars.get(i)).addParent(attrVars.get(j)); dynamicDAG.getParentSetTimeT(attrVars.get(i)).addParent(attrVars.get(j));
} while (!level2Var.isMultinomial() || level2Var.getName().equals(classVarName) || level2Var.equals(level1Var)); dynamicDAG.getParentSetTime0(level2Var).addParent(level1Var); dynamicDAG.getParentSetTimeT(level2Var).addParent(level1Var); variablesLevel2.add(level2Var); dynamicDAG.getParentSetTime0(currentVar).addParent(possibleParent); dynamicDAG.getParentSetTimeT(currentVar).addParent(possibleParent);
dynamicDAG.getParentSetTime0(level2Var).addParent(treeRoot); dynamicDAG.getParentSetTimeT(level2Var).addParent(treeRoot); variablesLevel2.add(level2Var); dynamicDAG.getParentSetTime0(currentVar).addParent(possibleParent); dynamicDAG.getParentSetTimeT(currentVar).addParent(possibleParent);
if (dag.getParentSetTime0(var2).contains(var1) || !var2.getDistributionType().isParentCompatible(var1) || dag.getParentSetTime0(var2).getNumberOfParents()>=3) continue; dag.getParentSetTime0(var2).addParent(var1); dagLinks++;
/** * Returns the DAG at time 0 of this DynamicDAG. * @return a {@link DAG} object. */ public DAG toDAGTime0(){ Variables staticVariables = Variables.auxiliarBuilder(this.getDynamicVariables().getListOfDynamicVariables()); DAG dag = new DAG(staticVariables); dag.setName(this.getName()); for (Variable dynamicVariable : dynamicVariables) { for (Variable parent : this.getParentSetTime0(dynamicVariable)) { dag.getParentSet(dynamicVariable).addParent(parent); } } return dag; }
dynamicDAG.getParentSetTime0(dynVar).getParents().stream().forEach(parentaux2 -> dag.getParentSet(staticVar).addParent(variables.getVariableByName(parentaux2.getName() + "_t0"))); } else { final int final_i=i;
if (dag.getParentSetTime0(var2).contains(var1) || !var2.getDistributionType().isParentCompatible(var1) || dag.getParentSetTime0(var2).getNumberOfParents()>=3) { iter++; continue; dag.getParentSetTime0(var2).addParent(var1); dagLinks++;
List<Variable> parentsTime0 = amidstDBN.getDynamicDAG().getParentSetTime0(amidstVar).getParents(); if (parentsTime0.size()==0) { Multinomial dist_Time0 = amidstDBN.getConditionalDistributionTime0(amidstVar);