What a sample grid decides
Worth reading first: The rung was not the instrument · Where the model stops · How far a primordium reaches.
The placement rule computes an energy at every one of 384 azimuths around the stem and puts the next organ at the smallest. That number has been in this site’s code since its first commit, has never been swept, and turned out in the previous essay to decide which rungs of the ladder an instrument can read.
Finding that a constant is doing work raises an immediate question about everything already published, and this essay is the answer to it. The short version: the two rises the collection argues from do not move, and the one published as having no answer answers differently — which is exactly the distribution of consequences that ought to follow.
What a sample grid is
The rule is a statement about a continuous quantity: the next organ goes where the repulsion from the existing ones is least. A computer cannot minimise over a circle, so it evaluates at a finite set of azimuths and takes the smallest.
That is an approximation with a size — the grid step, 360/384 = 0.94° — and the question is always whether the answer depends on it. Usually it does not, because the energy near a minimum is smooth and locally quadratic, so an error of half a grid step in position costs a fraction of a grid step squared in energy and the organ ends up within a fraction of a degree of where the continuous rule would put it.
Where it stops being harmless is when two minima are close in energy. Then the grid decides which one wins — not by rounding the answer but by choosing it — and the choice is repeatable, because the grid is the same on every run. Every stem gets the same wrong answer, and a repeatable wrong answer is invisible to every check that looks for scatter.
The three outcomes, and each is a different thing
At a rise of 0.013 and at 0.005, nothing changes. Five stems apiece at each grid, all ten returning the counted pair. Not “the same within noise” — the same answer, on the same seeds, at both grids. Every argument in this collection that uses a fixed-rise stem uses one of these two rises, so nothing already written depends on the sample count.
That is the result that mattered most and it was not guaranteed. Had it come out the other way, this phase’s finding would have required re-reading four phases of essays.
At the fine rung, 0.0019, the coarse grid fails and the fine one works. That is the previous essay: the rungs the site has published are inside the grid’s competence and the fine one is outside it.
And at 0.008 the answer changes. The counter says 5/8. At 384 samples two runs report 5/8 and three refuse. At 1,152, two runs report 8/13 — contradicting the counter — and three refuse. Same stems, same seeds, same everything else.
Why the fork moving is the right result
A first reading of “the answer depends on the grid at 0.008” is that the model is unreliable there. The better reading is that the stem is, and the two are distinguishable.
At 0.008 the pattern is inside a transition. Two lattices are nearly degenerate in energy, the rule is choosing between minima separated by less than the difference a grid step makes, and which it picks is decided by which minimum a sample point happens to land nearer. The previous phase established the degeneracy independently, from the hop lengths — a fact about the lattice, with no rule and no grid in it — and predicted that the readings there would be unstable.
So the grid sweep is a confirmation of that prediction rather than a discovery about the code. A stem with no answer is a stem whose answer depends on irrelevant details, and here is an irrelevant detail it depends on.
The distinction is testable rather than rhetorical, and the test is the one above: a rise where the object has an answer gives the same answer at both grids. Two of three do. If all three had moved, the reading would have been that the model is grid-dependent everywhere and the collection’s numbers are estimates of the grid rather than of the rule.
What a resolution parameter is
The four cases below have a shared shape and it is sharper than “a program parameter”. Each is a resolution: a number that says how finely something is discretised, where the thing being discretised is continuous in the model.
The azimuth grid discretises the circle. The window discretises the neighbourhood. The cut-off discretises the interaction. And in every case the failure mode is the same and is worth stating once:
A resolution parameter fails by deciding rather than by rounding. If the quantity being resolved has one answer, a coarse resolution gives that answer imprecisely, and the imprecision shows up as scatter that shrinks when the resolution improves. If it has two nearly-equal answers, a coarse resolution picks one — the same one every time, because the discretisation is the same every time — and there is no scatter at all. The output is confident, stable, reproducible and wrong.
That is why these are hard to find with the tools this fleet has. Every check here looks for something that varies when it should not, or that fails to vary when it should. A repeatable wrong answer varies in neither direction.
And it says what the diagnostic is: look for near-degeneracies. Wherever the model has two solutions close in whatever it is minimising, the resolution parameters are load-bearing and should be swept. Wherever it does not, they are not. That is a much smaller job than sweeping everything, and it is checkable in advance — the hop-length table says where the degeneracies are without running the model at all.
The class of defect
This site has now recorded four cases of a program parameter behaving like a model parameter, and they are worth listing together because the family resemblance is the useful part.
A recency cut-off that manufactured a lattice. The rule summed over the most recent k nodes, which is a property of the loop rather than of any plant, and at one interaction exponent the model had no lattice at all until the loop was cut — and then had a clean 8/13.
A window that was not binding. reach and maxWindow were one number, the
first was doing all the work, and raising the second from 120 to 480 changed
nothing and read as convergence.
A truncation that made a pattern. A hard edge on the interaction range produced a fragility that was attributed to the range and belonged to the edge.
And a sample grid that set which rungs are readable. This phase.
All four passed every gate in the fleet, and it is worth being clear why: a gate asks whether a computation is correct, and every one of these computations was correct. What was wrong was the mapping from a number in the code to a quantity in the world, and that mapping is not a computation.
The check that finds them is the same in every case — change the parameter and see whether the result moves — and it costs one sweep. The reason it is not run on everything is that a model has dozens of such numbers and sweeping all of them is a phase’s work. What this essay adds to the site’s practice is a priority: sweep the parameters that set a resolution, because those are the ones whose failure is a repeatable wrong answer rather than scatter.
The sweep that should have been run first
There is a version of this essay that would have been better, and it is worth saying what it is rather than presenting the work as though it had been done optimally.
The sweep here has two points — 384 and 1,152 — chosen because the second is three times the first and works. A proper convergence study would take four or five, check that the answer stops changing rather than that it changes once, and report the resolution at which it settles. That is the standard thing to do with a discretisation and it was not done, for the ordinary reason: each point costs a full ensemble at every rise, and the two-point version answered the question the phase was asking.
What the two points do establish is the part that matters for what is already published: the readings at 0.013 and 0.005 are the same at both, so those are not near a boundary in the sample count. What they do not establish is that 1,152 is enough at 0.0019 — only that it is enough to read that rung, which is a weaker claim. A rung finer still, 21/34, would need its own check and this phase has not made it.
So the honest statement of the result is: the collection’s fixed-rise numbers are unchanged under a threefold change in the sample grid, and the fine rung is readable at 1,152, and nobody has established where that stops. The first of those is what the essay was for and the third is what a later phase will have to do if it wants another rung.
Why 384 stays the default
The finer grid is used where it buys a rung and nowhere else, and the reason is cost. Every node’s placement is a loop over the sample count, so tripling it triples the most expensive part of every noisy run on this site — and the noisy runs are the collection’s most expensive figures.
Against that, the measurement above says the default is safe where it is used. Two published rises, five stems each, identical readings at both grids. The fork is not safe and was never presented as safe.
So the rule is: the grid is a setting of the reading, not a constant of the model. At the rises the site argues from, 384 is enough and is checked to be enough. At the fine rung it is not, and the essay that reads the fine rung says so and pays for 1,152. Recording which is which is the whole of the practice.
What this says about the model, which is not nothing
There is a reading of all of this that is too comfortable, and it is worth closing it off. “The grid only matters where the object is degenerate” can be heard as “the grid never matters in practice”, and it should not be.
A real plant is at a rise that changes continuously as it grows, so it passes through every degeneracy on its way down the ladder. The transitions are where the pattern’s parastichy pair changes, and a transition is by definition a place where two lattices are competing. So the arrangements that a grid resolves badly are exactly the arrangements a growing shoot spends part of its life in.
That does not make the site’s transition results wrong — those are read from the position counter, which sees coordinates and has no grid of its own, and from the static ladder, which is arithmetic. But it does mean that any claim about what the rule does at a transition carries a grid dependence that has not been measured, and the site has one such claim: that a grown pattern tracks the static ladder at every rate, with no lag. That was measured at 384 samples, near transitions, on the quantity most sensitive to which of two competing lattices the rule picks.
It is on the list for a later phase rather than repaired here, and it is on the list because of this essay rather than in spite of it. The value of finding a resolution parameter is not the parameter; it is the list of results that turn out to have been measured through it.
What links here
Computed from the collection, not written here: the essays that point at this one.
Shares its objects with
Essays that name at least two of the same things, and that neither author linked.
- Two readings from one stem — both name artefact, discretisation, divergence angle, ensemble, equilibrium, identifiability, measurement, rise
- A comb is evidence of a rule — both name divergence angle, equilibrium, falsifiability, measurement, model scope, parastichy pair, the placement rule
- A disturbance with a memory — both name artefact, divergence angle, ensemble, honest limits, measurement, parastichy pair, the placement rule
- A harmonic is a step taken twice — both name artefact, discretisation, divergence angle, equilibrium, measurement, parastichy pair, the placement rule
- A shoot too fast to remember — both name divergence angle, ensemble, equilibrium, measurement, the placement rule, rise, transient
- The memory was the rise — both name divergence angle, ensemble, equilibrium, measurement, the placement rule, rise, transient
Named objects
A flat tag is an object no other essay names yet.
ArtefactDiscretisationDivergence angleEnsembleEquilibriumFalsifiabilityHonest limitsIdentifiabilityMeasurementModel scopeParastichy pairThe placement ruleRepulsionRiseTransient