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; }
local_elbo = Double.NEGATIVE_INFINITY; local_iter = 0; while (!convergence && (local_iter++) < this.vmp.getMaxIter()) {
local_elbo = Double.NEGATIVE_INFINITY; local_iter = 0; while (!convergence && (local_iter++) < this.vmp.getMaxIter()) {
while (!convergence && (local_iter++) < this.vmp.getMaxIter()) {
while (!convergence && (local_iter++) < this.vmp.getMaxIter()) {
if (INITIALIZE && superstep==0) { 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());
if (INITIALIZE && superstep==0) { 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());