@Override public boolean isValidConfiguration() { boolean isValid = this.variables.getListOfDynamicVariables() .stream().allMatch(var -> var.isNormal()); if(!isValid) setErrorMessage("Invalid configuration: all the variables must be real"); return isValid; }
@Override public boolean isValidConfiguration() { boolean isValid = this.variables.getListOfDynamicVariables() .stream().allMatch(var -> var.isNormal()); if(!isValid) setErrorMessage("Invalid configuration: all the variables must be real"); return isValid; }
/** * 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; }
@Override public boolean isValidConfiguration() { boolean isValid = true; long numReal = variables.getListOfDynamicVariables() .stream() .filter( v -> v.getStateSpaceTypeEnum().equals(StateSpaceTypeEnum.REAL)) .count(); long numFinite = variables.getListOfDynamicVariables() .stream() .filter( v -> v.getStateSpaceTypeEnum().equals(StateSpaceTypeEnum.FINITE_SET)) .count(); if(numFinite != 1 || numReal != variables.getNumberOfVars()-1) { isValid = false; setErrorMessage("Invalid configuration: wrong number types of variables domains. " + "It should contain 1 discrete variable and the rest shoud be real"); } return isValid; }
public DynamicClassifier(Attributes attributes) { super(attributes); classVar = variables.getListOfDynamicVariables().get(variables.getNumberOfVars()-1); dynamicInferenceAlgoPredict = new FactoredFrontierForDBN(getInferenceAlgoPredict()); InferenceEngineForDBN.setInferenceAlgorithmForDBN(dynamicInferenceAlgoPredict); }
/** * 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()); }
/** * Creates a new temporal data stream. * @param sampler1 a {@link DynamicBayesianNetworkSampler} object. * @param nSequences1 an {@code int} that represents the number of sequences in the data stream to be sampled. * @param sequenceLength1 an {@code int} that represents the length of each sequence. */ TemporalDataStream(DynamicBayesianNetworkSampler sampler1, int nSequences1, int sequenceLength1){ this.sampler=sampler1; this.nSequences = nSequences1; this.sequenceLength = sequenceLength1; List<Attribute> list = new ArrayList<>(); list.add(new Attribute(0,Attributes.SEQUENCE_ID_ATT_NAME, new RealStateSpace())); list.add(new Attribute(1,Attributes.TIME_ID_ATT_NAME, new RealStateSpace())); list.addAll(this.sampler.network.getDynamicVariables().getListOfDynamicVariables().stream() .filter(var -> !sampler1.getLatentVars().contains(var)) .map(var -> new Attribute(var.getVarID() + 2, var.getName(), var.getStateSpaceType())).collect(Collectors.toList())); this.atts= new Attributes(list); }
List<Variable> observedVars = this.variables.getListOfDynamicVariables() .stream() .filter(w -> !binaryHiddenVars.contains(w))
dynamicVariables.getListOfDynamicVariables().stream() .filter(var -> !var.equals(MAPvariable)) .forEach(dynVar ->
@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)); } } } }
.getListOfDynamicVariables() .stream() .forEach(var -> { this.model.getDynamicVariables().getListOfDynamicVariables().stream() .filter(var -> { boolean notContainInterfaceVar = true;
@Override protected void buildDAG() { //Obtain the predictive attributes List<Variable> attrVars = variables.getListOfDynamicVariables().stream() .filter(v -> !v.equals(classVar)).collect(Collectors.toList()); //Create the hidden variabels hiddenMultinomial = variables.newMultinomialDynamicVariable("M", numStatesHidden); contHiddenList = new ArrayList<Variable>(); for(int i=0; i<numContinuousHidden; i++) { contHiddenList.add(variables.newGaussianDynamicVariable("Z"+Integer.toString(i))); } dynamicDAG = new DynamicDAG(variables); //arcs from the class to the hidden variables dynamicDAG.getParentSetTimeT(hiddenMultinomial).addParent(classVar); contHiddenList.stream().forEach(z -> dynamicDAG.getParentSetTimeT(z).addParent(classVar)); //arcs from the hidden vars to each attribute attrVars.stream().forEach(x->dynamicDAG.getParentSetTimeT(x).addParent(hiddenMultinomial)); for (Variable z : contHiddenList) { attrVars.stream().forEach(x->dynamicDAG.getParentSetTimeT(x).addParent(z)); } //Add dynamic links on class and continuous layer dynamicDAG.getParentSetTimeT(classVar).addParent(classVar.getInterfaceVariable()); for (Variable variable : contHiddenList) { dynamicDAG.getParentSetTimeT(variable).addParent(variable.getInterfaceVariable()); } }
List<Variable> observedVars = this.variables.getListOfDynamicVariables() .stream() .filter(v -> !v.equals(discreteHiddenVar))
/** * 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; }
List<Variable> attrVars = this.variables.getListOfDynamicVariables() .stream() .filter(v -> !v.equals(discreteHiddenVar))
/** * Replicates the present data in the past time. * @param dataPresent a {@link HashMapAssignment} object that represents the present data. * @return a {@link HashMapAssignment} object that represents the past data. */ private HashMapAssignment replicateOnPast(HashMapAssignment dataPresent){ HashMapAssignment dataPast = new HashMapAssignment(network.getNumberOfVars()); for (Variable var : network.getDynamicVariables().getListOfDynamicVariables()) { dataPast.setValue(network.getDynamicVariables().getInterfaceVariable(var), dataPresent.getValue(var)); } return dataPast; }
/** * 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(); } } } } }
/** * 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; }
/** * 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); } } } }