If you want more than one simulation, you could use the invalidation promise:
https://observablehq.com/@observablehq/invalidation
Then you would add this to each cell that creates a simulation:
invalidation.then(() => sim.stop());
(Another option would be for the AA.Simulation constructor to take an invalidation promise and have it call stop automatically when the promise resolves.)
Great, thanks - I didn't know about the invalidation promise.
I think it will be cleanest to use invalidation.then(() => sim.stop()); in every cell that creates a simulation (even if just one simulation in the notebook) and not bother with .single at all in Observable.