Skip to content

Update paper to current Adaptive and fix errors#1

Open
basnijholt wants to merge 4 commits into
masterfrom
update-paper-to-current-adaptive
Open

Update paper to current Adaptive and fix errors#1
basnijholt wants to merge 4 commits into
masterfrom
update-paper-to-current-adaptive

Conversation

@basnijholt

@basnijholt basnijholt commented Jun 10, 2026

Copy link
Copy Markdown
Member

Brings the draft up to date with the current state of adaptive and fixes a bunch of errors in the text and code listings.

Content updates

  • Bump the adaptive_repo submodule from v0.8.1 to current main, so the code examples in the paper match the pinned version. The figure notebooks only use APIs that still exist (runner.simple, curvature_loss_function, Learner2D.ip, LearnerND._get_iso, utils.load).
  • The "Possible extensions" section now reflects what has since been implemented: anisotropic triangulation as an opt-in LearnerND feature (anisotropic=True, Add anisotropic meshing to LearnerND adaptive#141) and AverageLearner1D for stochastic 1D functions. Both are described as implemented but not yet benchmarked — no performance claims without data.
  • Mention the optional Rust-accelerated triangulation backend (Add optional Rust-accelerated triangulation backend for LearnerND adaptive#493), aimed at reducing $t_\textrm{suggest}$ for LearnerND.
  • Code examples updated to the current API: Runner(learner, loss_goal=0.01) instead of a hand-written goal function, ask() returning loss improvements, and concurrent.futures/loky added to the executor list.

Fixes

  • Pseudocode bugs: the main while condition was inverted, the popped loss variable shadowed the loss() function (now max_loss), queue.remove(old_subdomain) used the wrong variable, a for was missing its colon, and the parallel version's initial queue.insert referenced an undefined variable.
  • Broken Python in the examples: indentation in the manual driving loop, misplaced bracket in the BalancingLearner list comprehension, adaptive.LearnerND vs. the imported LearnerND.
  • An isosurface is the 3D analogue of an isoline, not 2D.
  • The OED section claimed MCMC is used because Bayesian statistics provides closed-form solutions — it's the opposite. Also resolves the "references missing" TODO by citing Chaloner & Verdinelli (1995) and Ryan et al. (2015).
  • Assorted grammar fixes.

Front matter

  • Filled in the author list, acknowledgements, and contribution statement — please check these. In particular: the papercode bib entry lists three paper authors (Bas, Joseph, Anton) while the Zenodo record lists four (incl. Jorn), so the author list needs a decision; the acknowledgements don't mention funding yet; and Jorn's affiliation is unverified.
  • The revtex template now only emits \email for authors that have one.

Comment thread paper.md Outdated
while queue.max_priority() < target_loss:
loss, subdomain = queue.pop()
while queue.max_priority() > target_loss:
_, subdomain = queue.pop()

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This change is ok in source, but not ok in the manuscript

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I actually just changed it to max_loss

- Fill in author list (replacing the 'Tinkerer' placeholder) and draft
  acknowledgements and author-contribution statements
- Add missing MCMC/Bayesian OED references (Chaloner & Verdinelli 1995,
  Ryan et al. 2015) and fix the inverted claim about closed-form solutions
- Fix bugs in the pseudocode: inverted while condition, shadowed 'loss'
  variable, wrong loop variable in queue.remove, missing colon, and a
  wrong variable in the initial queue.insert of the parallel version
- Fix broken Python in the API examples: indentation, misplaced bracket
  in the BalancingLearner list comprehension, undefined names
- Update examples to the current Adaptive API: Runner(loss_goal=...),
  ask() returning loss improvements, peak() naming
- Update 'Possible extensions': anisotropic meshing is now implemented
  in LearnerND (anisotropic=True) and AverageLearner1D exists; mention
  the optional Rust-accelerated triangulation backend
- Mention concurrent.futures and loky among supported executors
- Fix isoline/isosurface dimension mix-up and various grammar issues
- Only emit \email in the revtex template when an author has one
The examples in the paper now use the current API (loss_goal etc.), so
pin the submodule to a version that actually has it instead of v0.8.1.
The figure notebooks only use APIs that still exist (runner.simple,
curvature_loss_function, Learner2D.ip, LearnerND._get_iso, utils.load).

Also rephrase the anisotropic-meshing and Rust-triangulation mentions:
we have no benchmarks for either in this paper, so describe them as
implemented/aimed-at rather than claiming improvement.
@basnijholt basnijholt force-pushed the update-paper-to-current-adaptive branch from f20ba33 to dc710f9 Compare June 10, 2026 20:43
Counting line segments says nothing about how close the estimated
isoline is to the true one. Compute the mean and Hausdorff distance
to the exact isoline y = cbrt(level - x^2) instead, in the notebook
and in the figure caption: adaptive sampling is a factor 6 (mean)
and 2 (Hausdorff) more accurate than homogeneous sampling at equal
point count.

Numbers computed with the adaptive version pinned in adaptive_repo;
the committed isoline.pdf still needs regenerating in the Docker
environment (homogeneous triangulation differs slightly: 45 vs 43
segments).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants