Skip to content

Commit

Permalink
Update test_thermodynamic_integration (#1385)
Browse files Browse the repository at this point in the history
* Lowered samples, removed comparison of two different amount of chains

* Removed even argument, due to scipy wanting to go for "simpson" and depracating "even"

* Removed warning for `test_thermodynamic_integration`

---------

Co-authored-by: Jonas Arruda <69197639+arrjon@users.noreply.github.com>
Co-authored-by: Dilan Pathirana <59329744+dilpath@users.noreply.github.com>
  • Loading branch information
3 people committed May 16, 2024
1 parent d5fde03 commit 7fe40ba
Show file tree
Hide file tree
Showing 3 changed files with 43 additions and 35 deletions.
8 changes: 8 additions & 0 deletions pypesto/sample/metropolis.py
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,14 @@ def _perform_step(
# compute log prior
lprior_new = -self.neglogprior(x_new)

# if lpost_new is -inf, x_new will not be accepted
if lpost_new == -np.inf:
# update proposal
self._update_proposal(
x, lpost, -np.inf, len(self.trace_neglogpost) + 1
)
return x, lpost, lprior

if not self.temper_lpost:
# extract current log likelihood value
llh = lpost - lprior
Expand Down
1 change: 0 additions & 1 deletion pypesto/sample/parallel_tempering.py
Original file line number Diff line number Diff line change
Expand Up @@ -260,7 +260,6 @@ def compute_log_evidence(
# integrate from low to high temperature
y=mean_loglike_per_beta,
x=temps,
even="last",
)
else:
raise ValueError(
Expand Down
69 changes: 35 additions & 34 deletions test/sample/test_sample.py
Original file line number Diff line number Diff line change
Expand Up @@ -796,42 +796,43 @@ def test_thermodynamic_integration():
problem = gaussian_problem()

# approximation should be better for more chains
for n_chains, tol in zip([10, 20], [1, 1e-1]):
sampler = sample.ParallelTemperingSampler(
internal_sampler=sample.AdaptiveMetropolisSampler(),
options={"show_progress": False, "beta_init": "beta_decay"},
n_chains=n_chains,
)
n_chains = 10
tol = 1
sampler = sample.ParallelTemperingSampler(
internal_sampler=sample.AdaptiveMetropolisSampler(),
options={"show_progress": False, "beta_init": "beta_decay"},
n_chains=n_chains,
)

result = optimize.minimize(
problem,
progress_bar=False,
)
result = optimize.minimize(
problem,
progress_bar=False,
)

result = sample.sample(
problem,
n_samples=10000,
result=result,
sampler=sampler,
)
result = sample.sample(
problem,
n_samples=2000,
result=result,
sampler=sampler,
)

# compute the log evidence using trapezoid and simpson rule
log_evidence = sampler.compute_log_evidence(result, method="trapezoid")
log_evidence_not_all = sampler.compute_log_evidence(
result, method="trapezoid", use_all_chains=False
)
log_evidence_simps = sampler.compute_log_evidence(
result, method="simpson"
)
# compute the log evidence using trapezoid and simpson rule
log_evidence = sampler.compute_log_evidence(result, method="trapezoid")
log_evidence_not_all = sampler.compute_log_evidence(
result, method="trapezoid", use_all_chains=False
)
log_evidence_simps = sampler.compute_log_evidence(result, method="simpson")

# compute evidence
evidence = quad(
lambda x: 1 / (problem.ub - problem.lb) * np.exp(gaussian_llh(x)),
a=problem.lb,
b=problem.ub,
)
# compute evidence
evidence = quad(
lambda x: 1
/ (problem.ub[0] - problem.lb[0])
* np.exp(gaussian_llh(x)),
a=problem.lb[0],
b=problem.ub[0],
)

# compare to known value
assert np.isclose(log_evidence, np.log(evidence[0]), atol=tol)
assert np.isclose(log_evidence_not_all, np.log(evidence[0]), atol=tol)
assert np.isclose(log_evidence_simps, np.log(evidence[0]), atol=tol)
# compare to known value
assert np.isclose(log_evidence, np.log(evidence[0]), atol=tol)
assert np.isclose(log_evidence_not_all, np.log(evidence[0]), atol=tol)
assert np.isclose(log_evidence_simps, np.log(evidence[0]), atol=tol)

0 comments on commit 7fe40ba

Please sign in to comment.