/** * Return the list of non-observed variables for Time 0. * @return a {@code List} of {@link Variable}. */ private List<Variable> getTargetVarsTime0(){ return this.model.getDynamicVariables().getListOfDynamicVariables().stream() .filter(var -> Utils.isMissingValue(this.assignment.getValue(var))) .collect(Collectors.toList()); }
private Assignment updateDynamicAssignmentTime0(DynamicAssignment dynamicAssignment){ HashMapAssignment assignment = new HashMapAssignment(); this.model.getDynamicVariables() .getListOfDynamicVariables() .stream() .forEach(var -> { double value = dynamicAssignment.getValue(var); assignment.setValue(var, value); }); return assignment; }
/** * 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()); }
System.exit(-20); if (!Double.isNaN(dynAssig.getValue(MAPvariable))) { System.out.println("Error: MAP variable should not be in the evidence"); System.exit(-30); for (Variable dynVariable : dynAssigVariables) { Variable staticVariable = unfoldedStaticModel.getVariables().getVariableByName(dynVariable.getName() + "_t" + Integer.toString(time)); double varValue = dynamicAssignment.getValue(dynVariable); staticEvidence.setValue(staticVariable, varValue);
/** * Sets the AMIDST evidence into a given time slice of the expanded Hugin model. * @param assignment the evidence to be propagated. * @param time the time slice in which the evidence is entered. */ public void setAssignmentToHuginModel(DynamicAssignment assignment, int time) { List<Variable> dynamicVariables = amidstDBN.getDynamicVariables().getListOfDynamicVariables(); for (Variable var : dynamicVariables) { //Skip non-observed variables if(!Double.isNaN(assignment.getValue(var))){ if (var.isMultinomial()) { try { LabelledDCNode node = (LabelledDCNode) domainObject.getNodeByName("T" + time + "." + var.getName()); node.selectState((int)assignment.getValue(var)); } catch (ExceptionHugin exceptionHugin) { exceptionHugin.printStackTrace(); } } } } }
.stream() .forEach(var -> { double value = dynamicAssignment.getValue(var); assignment.setValue(var,value); }); .forEach(var -> { Variable var_interface = var.getInterfaceVariable(); double value_interface = dynamicAssignment.getValue(var_interface); assignment.setValue(var_interface,value_interface);
evidence.forEach(evid -> { System.out.println("Evidence at time " + evid.getTimeID()); evid.getVariables().forEach(variable -> System.out.println(variable.getName() + ": " + Integer.toString((int) evid.getValue(variable)))); System.out.println(); });
for (Variable dynVariable : dynAssigVariables) { Variable staticVariable = unfoldedStaticModel.getVariables().getVariableByName(dynVariable.getName() + "_t" + Integer.toString(time)); double varValue = dynamicAssignment.getValue(dynVariable); staticEvidence.setValue(staticVariable, varValue);
for (Variable dynVariable : dynAssigVariables) { Variable staticVariable = unfoldedStaticModel.getVariables().getVariableByName(dynVariable.getName() + "_t" + Integer.toString(time)); double varValue = dynamicAssignment.getValue(dynVariable); staticEvidence.setValue(staticVariable, varValue);
/** * Moves the window ahead for a given number of time steps. * @param nsteps an {@link int} that represents a given number of time steps. */ private void moveWindow(int nsteps){ //The first step we need to manually move the evidence from master to clone variables. HashMapDynamicAssignment newassignment =null; if (this.assignment!=null) { newassignment=new HashMapDynamicAssignment(this.model.getNumberOfDynamicVars()); for (Variable var : this.model.getDynamicVariables()) { newassignment.setValue(this.model.getDynamicVariables().getInterfaceVariable(var), this.assignment.getValue(var)); newassignment.setValue(var, Utils.missingValue()); } } for (int i = 0; i < nsteps; i++) { this.infAlgTimeT.setModel(this.bnTimeT); this.infAlgTimeT.setEvidence(updateDynamicAssignmentTimeT(newassignment)); this.infAlgTimeT.runInference(); this.getTargetVarsTimeT().stream() .forEach(var -> moveNodeQDist(this.infAlgTimeT, this.bnTimeT, var)); } }
/** * Moves the window ahead for a given number of time steps. * @param nsteps an {@link int} that represents a given number of time steps. */ private void moveWindow(int nsteps){ //The first step we need to manually move the evidence from master to clone variables. HashMapDynamicAssignment newassignment = null; if (this.assignment!=null) { newassignment=new HashMapDynamicAssignment(this.model.getNumberOfDynamicVars()); for (Variable var : this.model.getDynamicVariables()) { newassignment.setValue(this.model.getDynamicVariables().getInterfaceVariable(var), this.assignment.getValue(var)); newassignment.setValue(var, Utils.missingValue()); } } for (int i = 0; i < nsteps; i++) { this.vmpTimeT.setEvidence(newassignment); this.vmpTimeT.runInference(); this.vmpTimeT.getNodes().stream() .filter(node -> !node.getMainVariable().isInterfaceVariable()) .filter(node -> !node.isObserved()) .forEach(node -> { Variable temporalClone = this.model.getDynamicVariables().getInterfaceVariable(node.getMainVariable()); moveNodeQDist(this.vmpTimeT.getNodeOfVar(temporalClone), node); }); newassignment=null; } }