private boolean testConvergence() { boolean convergence = false; //Compute lower-bound double newelbo = computeELBO(); double percentage = 100 * Math.abs(newelbo - local_elbo) / Math.abs(local_elbo); if (percentage < this.vmp.getThreshold() || local_iter > this.vmp.getMaxIter()) { convergence = true; } if ((!convergence && (newelbo / this.vmp.getNodes().size() < (local_elbo / this.vmp.getNodes().size() - 0.01)) && local_iter > -1) || Double.isNaN(local_elbo)) { throw new IllegalStateException("The elbo is not monotonically increasing at iter " + local_iter + ": " + percentage + ", " + local_elbo + ", " + newelbo); } local_elbo = newelbo; return convergence; }
private boolean testConvergence() { boolean convergence = false; //Compute lower-bound //double newelbo = this.vmp.getNodes().parallelStream().filter(node -> node.isActive()).mapToDouble(node -> this.vmp.computeELBO(node)).sum(); double newelbo = computeELBO(); double percentage = 100 * Math.abs(newelbo - local_elbo) / Math.abs(local_elbo); if (percentage < this.vmp.getThreshold() || local_iter > this.vmp.getMaxIter()) { convergence = true; } if ((!convergence && (newelbo / this.vmp.getNodes().size() < (local_elbo / this.vmp.getNodes().size() - 0.01)) && local_iter > -1) || Double.isNaN(local_elbo)) { throw new IllegalStateException("The elbo is not monotonically increasing at iter " + local_iter + ": " + percentage + ", " + local_elbo + ", " + newelbo); } local_elbo = newelbo; //System.out.println("ELBO: " + local_elbo); return convergence; }
VMP vmp = new VMP(); vmp.setMaxIter(this.svb.getPlateuStructure().getVMP().getMaxIter()); vmp.setThreshold(this.svb.getPlateuStructure().getVMP().getThreshold()); vmp.setTestELBO(this.svb.getPlateuStructure().getVMP().isOutput()); this.svb.getPlateuStructure().setVmp(vmp);
VMP vmp = new VMP(); vmp.setMaxIter(this.svb.getPlateuStructure().getVMP().getMaxIter()); vmp.setThreshold(this.svb.getPlateuStructure().getVMP().getThreshold()); vmp.setTestELBO(this.svb.getPlateuStructure().getVMP().isOutput()); this.svb.getPlateuStructure().setVmp(vmp);
if (!Double.isNaN(elbo) && percentageIncrease<this.plateuStructure.getVMP().getThreshold()){ convergence=true;
if (!Double.isNaN(elbo) && percentageIncrease<this.plateuStructure.getVMP().getThreshold()){ convergence=true;