/** * Returns the set of dynamic variables in this DynamicBayesianNetwork. * @return set of variables of type {@link DynamicVariables}. */ public DynamicVariables getDynamicVariables() { return this.dynamicDAG.getDynamicVariables(); }
/** * Returns the {@link Node} corresponding to a given {@link Variable} at time T. * @param variable a given {@link Variable} object. * @param slice an {@code int} that represents the slice value. * @return a {@link Node} object. */ public Node getNodeOfVarTimeT(Variable variable, int slice) { if (variable.isParameterVariable()) { return this.parametersToNodeTimeT.get(variable); } else if (!variable.isInterfaceVariable()){ return this.variablesToNodeTimeT.get(slice).get(variable); }else if (variable.isInterfaceVariable() && slice>0){ return this.variablesToNodeTimeT.get(slice - 1).get(this.dbnModel.getDynamicVariables().getVariableFromInterface(variable)); }else if (variable.isInterfaceVariable() && slice==0){ return this.cloneVariablesToNode.get(variable); }else{ throw new IllegalArgumentException(); } }
/** * 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(); }
/** * Runs inference at time T. */ public void runInferenceTimeT() { this.vmpTimeT.runInference(); this.plateuNodesTimeT.get(this.nRepetitions-1).stream().filter(node -> !node.isObserved() && !node.getMainVariable().isParameterVariable()).forEach(node -> { Variable temporalClone = this.dbnModel.getDynamicVariables().getInterfaceVariable(node.getMainVariable()); moveNodeQDist(this.getNodeOfVarTimeT(temporalClone,0), node); }); }
/** * Returns the DAG at time T of this DynamicDAG. * @return a {@link DAG} object. */ public DAG toDAGTimeT(){ List<Variable> allVariables = new ArrayList<>(); allVariables.addAll(this.getDynamicVariables().getListOfDynamicVariables()); allVariables.addAll(this.getDynamicVariables().getListOfInterfaceVariables()); Variables staticVariables = Variables.auxiliarBuilder(allVariables); DAG dag = new DAG(staticVariables); dag.setName(this.getName()); for (Variable dynamicVariable : dynamicVariables) { for (Variable parent : this.getParentSetTimeT(dynamicVariable)) { dag.getParentSet(dynamicVariable).addParent(parent); } } return dag; }
/** * Runs inference at time 0. */ public void runInferenceTime0() { this.vmpTime0.runInference(); this.vmpTime0.getNodes().stream().filter(node -> !node.isObserved() && !node.getMainVariable().isParameterVariable()).forEach(node -> { Variable temporalClone = this.dbnModel.getDynamicVariables().getInterfaceVariable(node.getMainVariable()); moveNodeQDist(this.getNodeOfVarTimeT(temporalClone,0), node); }); }
.filter(dist -> !dist.getVariable().isParameterVariable()) .map(dist -> { Variable temporalClone = this.dbnModel.getDynamicVariables().getInterfaceVariable(dist.getVariable()); EF_UnivariateDistribution uni = temporalClone.getDistributionType().newUnivariateDistribution().toEFUnivariateDistribution(); Node node = new Node(uni);
DynamicVariables dynamicVariables = dynamicDAG.getDynamicVariables();
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; }
public static List<Variable> getCausalOrderTimeT(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; for (Variable parent: dag.getParentSetTimeT(var2)) { if (parent.isInterfaceVariable()) continue; allParentsDone = allParentsDone && bDone[parent.getVarID()]; } if (allParentsDone){ order.add(var2); bDone[var2.getVarID()] = true; } } } } return order; }
/** * 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; }
.flatMap(p -> p.getParents().stream()) .filter(v -> v.isInterfaceVariable()) .map( v -> this.dynamicDAG.getDynamicVariables().getVariableFromInterface(v)) .map(v -> v.getName()) .collect(Collectors.toList());
.filter(var -> !var.getMainVar().getName().contains("H")) .forEach(w -> { dag.getDynamicVariables().getListOfDynamicVariables().stream() .filter(x -> x.getName().contains("H") && x.getVarID()!=varH1.getVarID()) dynamicSampler.setHiddenVar(varH1); if(this.isActivateMiddleLayer()) { dag.getDynamicVariables().getListOfDynamicVariables().stream() .filter(x -> x.getName().contains("H") && x.getVarID()!=varH1.getVarID())
Variable sensorT1 = fireDetectorModel.getDynamicVariables().getVariableByName("SensorTemp1"); Variable sensorT2 = fireDetectorModel.getDynamicVariables().getVariableByName("SensorTemp2"); svb.addParameterConstraint(new Constraint("alpha", sensorT1, 0.0, true)); svb.addParameterConstraint(new Constraint("alpha", sensorT2, 0.0, true)); svb.addParameterConstraint(new Constraint("beta1", sensorT2, 1.0, false)); Variable temp = fireDetectorModel.getDynamicVariables().getVariableByName("Temperature"); svb.addParameterConstraint(new Constraint("alpha | Fire = 0", temp, 0.0, false)); svb.addParameterConstraint(new Constraint("beta1 | Fire = 0", temp, 1.0, false));
@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; }