/** * {@inheritDoc} */ @Override public void addDynamicEvidence(DynamicAssignment assignment_) { if (this.sequenceID != -1 && this.sequenceID != assignment_.getSequenceID()) throw new IllegalArgumentException("The sequence ID does not match. If you want to change the sequence, invoke reset method"); if (this.timeID >= assignment_.getTimeID()) throw new IllegalArgumentException("The provided assignment is not posterior to the previous provided assignment."); this.assignment = assignment_; }
return; long sequenceID = evidence.get(0).getSequenceID(); for(DynamicAssignment dynAssig : evidence) { if (dynAssig.getSequenceID()!=sequenceID) { System.out.println("Error: Different sequence IDs in the evidence"); System.exit(-15); if (dynAssig.getTimeID()>=nTimeSteps || dynAssig.getTimeID()<0) { System.out.println("Error: Evidence time ID out of the range"); System.exit(-20); if (!Double.isNaN(dynAssig.getValue(MAPvariable))) { System.out.println("Error: MAP variable should not be in the evidence"); System.exit(-30); int time = (int) dynamicAssignment.getTimeID(); Set<Variable> dynAssigVariables = dynamicAssignment.getVariables(); for (Variable dynVariable : dynAssigVariables) { Variable staticVariable = unfoldedStaticModel.getVariables().getVariableByName(dynVariable.getName() + "_t" + Integer.toString(time)); double varValue = dynamicAssignment.getValue(dynVariable); staticEvidence.setValue(staticVariable, varValue);
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(); });
public static void main(String[] args) throws Exception{ Stopwatch watch = Stopwatch.createStarted(); DynamicBayesianNetworkGenerator dbnGenerator = new DynamicBayesianNetworkGenerator(); dbnGenerator.setNumberOfContinuousVars(0); dbnGenerator.setNumberOfDiscreteVars(3); dbnGenerator.setNumberOfStates(2); DynamicBayesianNetwork network = DynamicBayesianNetworkGenerator.generateDynamicNaiveBayes(new Random(0), 2, true); DynamicBayesianNetworkSampler sampler = new DynamicBayesianNetworkSampler(network); sampler.setSeed(0); DataStream<DynamicDataInstance> dataStream = sampler.sampleToDataBase(3,2); DataStreamWriter.writeDataToFile(dataStream, "./datasets/simulated/dnb-samples.arff"); System.out.println(watch.stop()); for (DynamicAssignment dynamicdataassignment : sampler.sampleToDataBase(3, 2)){ System.out.println("\n Sequence ID" + dynamicdataassignment.getSequenceID()); System.out.println("\n Time ID" + dynamicdataassignment.getTimeID()); System.out.println(dynamicdataassignment.outputString()); } } }
/** * 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()); }
/** * {@inheritDoc} */ @Override public long getTimeIDOfLastEvidence() { return this.assignment.getTimeID(); }
int time = (int) dynamicAssignment.getTimeID(); Set<Variable> dynAssigVariables = dynamicAssignment.getVariables(); for (Variable dynVariable : dynAssigVariables) { Variable staticVariable = unfoldedStaticModel.getVariables().getVariableByName(dynVariable.getName() + "_t" + Integer.toString(time)); double varValue = dynamicAssignment.getValue(dynVariable); staticEvidence.setValue(staticVariable, varValue);
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; }
/** * {@inheritDoc} */ @Override public long getTimeIDOfLastEvidence() { return this.assignment.getTimeID(); }
int time = (int) dynamicAssignment.getTimeID(); Set<Variable> dynAssigVariables = dynamicAssignment.getVariables(); for (Variable dynVariable : dynAssigVariables) { Variable staticVariable = unfoldedStaticModel.getVariables().getVariableByName(dynVariable.getName() + "_t" + Integer.toString(time)); double varValue = dynamicAssignment.getValue(dynVariable); staticEvidence.setValue(staticVariable, varValue);
/** * {@inheritDoc} */ @Override public void addDynamicEvidence(DynamicAssignment assignment_) { if (this.sequenceID!= -1 && this.sequenceID != assignment_.getSequenceID()) throw new IllegalArgumentException("The sequence ID does not match. If you want to change the sequence, invoke reset method"); if (this.timeID>= assignment_.getTimeID()) throw new IllegalArgumentException("The provided assignment is not posterior to the previous provided assignment."); this.assignment = 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()); }
/** * {@inheritDoc} */ @Override public long getTimeIDOfLastEvidence(){ return this.assignment.getTimeID(); }
/** * {@inheritDoc} */ @Override public void addDynamicEvidence(DynamicAssignment assignment_) { if (this.sequenceID!= -1 && this.sequenceID != assignment_.getSequenceID()) throw new IllegalArgumentException("The sequence ID does not match. If you want to change the sequence, invoke reset method"); if (this.timeID>= assignment_.getTimeID()) throw new IllegalArgumentException("The provided assignment is not posterior to the previous provided assignment."); this.assignment = assignment_; }
/** * 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(); } } } } }
public void runInference() { if (this.timeID==-1 && assignment.getTimeID()>0) { this.infAlgTime0.setModel(this.bnTime0); this.infAlgTime0.setEvidence(null); if (assignment.getTimeID()==0) { this.infAlgTime0.setModel(this.bnTime0); this.infAlgTime0.setEvidence(updateDynamicAssignmentTime0(this.assignment)); if ((this.assignment.getTimeID() - this.timeID)>1) this.moveWindow((int)(this.assignment.getTimeID() - this.timeID - 1)); this.timeID=this.assignment.getTimeID(); this.infAlgTimeT.setModel(this.bnTimeT); this.infAlgTimeT.setEvidence(updateDynamicAssignmentTimeT(this.assignment));
.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);
public void runInference(){ if (this.timeID==-1 && assignment.getTimeID()>0) { this.vmpTime0.setEvidence(null); this.vmpTime0.runInference(); if (assignment.getTimeID()==0) { if ((this.assignment.getTimeID() - this.timeID)>1) this.moveWindow((int)(this.assignment.getTimeID() - this.timeID - 1)); this.timeID=this.assignment.getTimeID(); this.vmpTimeT.setEvidence(this.assignment); this.vmpTimeT.runInference();
/** * 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)); } }
/** * {@inheritDoc} */ @Override public void runInference() { try { domainObject.uncompile(); if (assignment.getTimeID()==0) { this.setAssignmentToHuginModel(this.assignment, 0); this.timeID = 0; } else{ this.timeID = this.getTimeIDOfLastEvidence(); this.setAssignmentToHuginModel(this.assignment, 1); } domainObject.triangulateDBN(Domain.H_TM_TOTAL_WEIGHT); domainObject.compile(); } catch (ExceptionHugin exceptionHugin) { exceptionHugin.printStackTrace(); } }