/** * {@inheritDoc} */ @Override public void setModel(DynamicBayesianNetwork model_) { model = model_; ef_model = new EF_DynamicBayesianNetwork(this.model); this.vmpTime0.setEFModel(ef_model.getBayesianNetworkTime0()); nodesTimeT = this.ef_model.getBayesianNetworkTimeT().getDistributionList() .stream() .map(dist -> new Node(dist)) .collect(Collectors.toList()); nodesClone = this.ef_model.getBayesianNetworkTime0().getDistributionList() .stream() .map(dist -> { Variable temporalClone = this.model.getDynamicVariables().getInterfaceVariable(dist.getVariable()); EF_UnivariateDistribution uni = temporalClone.getDistributionType().newUnivariateDistribution().toEFUnivariateDistribution(); Node node = new Node(uni); node.setActive(false); return node; }) .collect(Collectors.toList()); List<Node> allNodes = new ArrayList(); allNodes.addAll(nodesTimeT); allNodes.addAll(nodesClone); this.vmpTimeT.setNodes(allNodes); this.vmpTimeT.updateChildrenAndParents(); }
.map(dist -> { Variable temporalClone = this.dbnModel.getDynamicVariables().getInterfaceVariable(dist.getVariable()); EF_UnivariateDistribution uni = temporalClone.getDistributionType().newUnivariateDistribution().toEFUnivariateDistribution(); Node node = new Node(uni); node.setActive(false);
@Override public void flatMap(Batch<DataPosteriorAssignment> data, Collector<DataPosteriorAssignment> out) { for (int i = 0; i < data.getElements().size(); i++) { for (Variable latentVariable : latentInterfaceVariables) { DataPosteriorAssignment dataPosteriorAssignment = data.getElements().get(i); if (!dataPosteriorAssignment.isObserved(latentVariable)){ UnivariateDistribution dist = dataPosteriorAssignment.getPosterior().getPosterior(latentVariable); Variable interfaceVariable = this.svb.getDAG().getVariables().getVariableByName(latentVariable.getName() + DynamicVariables.INTERFACE_SUFFIX); this.svb.getPlateuStructure().getNodeOfVar(latentVariable, i).setPDist(dist.toEFUnivariateDistribution().deepCopy(interfaceVariable)); this.svb.getPlateuStructure().getNodeOfVar(latentVariable, i).setAssignment(null); } } } DataOnMemory<DataInstance> dataBatch = new DataOnMemoryListContainer<DataInstance>( attributes, data.getElements().stream() .map(d -> new DataInstanceFromAssignment(d.getPosterior().getId(), d.getAssignment(), attributes, variables)) .collect(Collectors.toList()) ); List<DataPosteriorAssignment> posteriorAssignments = svb.computePosteriorAssignment(dataBatch, latentVariables); for (DataPosteriorAssignment posterior: posteriorAssignments){ out.collect(posterior); } }
UnivariateDistribution dist = dataPosteriorAssignment.getPosterior().getPosterior(latentVariable); Variable interfaceVariable = this.svb.getDAG().getVariables().getVariableByName(latentVariable.getName() + DynamicVariables.INTERFACE_SUFFIX); this.svb.getPlateuStructure().getNodeOfVar(latentVariable, i).setPDist(dist.toEFUnivariateDistribution().deepCopy(interfaceVariable)); this.svb.getPlateuStructure().getNodeOfVar(latentVariable, i).setAssignment(null);