Where the angle comes from

What a sample grid decides

The rule takes its minimum over 384 sampled azimuths, and that number has been a constant since this site's first commit. Tripling it changes nothing at the two rises the collection argues from — five runs of five, identical readings — and changes which answer appears at the one rise published as having no answer. A parameter of the program, measured rather than assumed.

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 the finer grid does to the rises already publishedThe two rises this site has argued from and the one it published as having no answer, each read at both azimuth grids, five stems apiece. A filled mark agrees with the position counter, a half mark contradicts it, an open mark is a refusal. At 0.013 and 0.005 the readings are identical at both grids, so nothing already written depends on the sample count. At 0.008 they are not: 384 azimuths gives 5/8, 5/8 and 1152 gives 8/13, 8/13, against a counter that says 5/8. That rise was chosen in the previous phase because the three shortest lattice offsets there are within a fifth of each other, and a stem with no answer answering differently on a different grid is the object behaving as it was said to.risefive stemsthe position counter0.0133845/85/85/85/85/85/80.01311525/85/85/85/85/85/80.0053848/138/138/138/138/138/130.00511528/138/138/138/138/138/130.0083845/85/85/80.00811528/138/135/8the previous phase's settingsgenerated from a stated rule, not drawn to look right
Fig. 1 The check. Three rises, five seeded stems each, read at both sample counts with everything else at the previous phase’s settings — a window of 30, a seed of 8 nodes, 900 internodes. At 0.013 and 0.005 the readings are identical and agree with the position counter on every run. At 0.008 they are not identical, and 0.008 is the rise the previous phase chose because the object has no unambiguous answer there.

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 rule, 26 steps in, at a growth of 0.40The next primordium goes where the repulsion is least — the marked minimum at 216°. Nothing in the rule refers to any particular angle.05e+51e+61.5e+60100200300angle around the boundary (°)repulsion from what is theregrowth 0.40 · 14 elements in playthe minimum is where the next one goes
Fig. 2 The energy landscape the rule minimises over, at one node. The minimum is broad and there is a second one; how far apart in energy the two are decides whether the grid step matters. Everything in this essay is about arrangements where they are close.

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.

The angles against the positions, rise by risefive rises, five seeded stems each. A filled mark is a run whose angle readout returned the pair the position counter finds in the same stem; an open mark is a refusal. At 0.032 the counter says 3/5 and the angles agree on 0 of 5, refusing 5. At 0.013 the counter says 5/8 and the angles agree on 5 of 5. At 0.01 the counter says 5/8 and the angles agree on 5 of 5. At 0.005 the counter says 8/13 and the angles agree on 5 of 5. At 0.008 the counter says 5/8 and the angles agree on 2 of 5, refusing 3. The two instruments share no code path: one is given a list of angles, the other a list of coordinates.risefive stems, read from the angles alonethe position counter0.032refusedrefusedrefusedrefusedrefused3 and 50.0135/85/85/85/85/85 and 80.015/85/85/85/85/85 and 80.0058/138/138/138/138/138 and 130.008refusedrefused5/8refused5/85 and 8seeded at 137.3°, 900 nodes per stemfilled where the two instruments agree
Fig. 3 The fork in its place among the rises, read at the site’s own settings — it is the bottom row, and it is the only one where the angles and the positions do not line up. The previous phase chose this rise deliberately: the three shortest lattice offsets there are 8 at 0.0889, 5 at 0.0953 and 13 at 0.1069 of a circumference, all within a fifth of each other, so the arrangement has no unambiguous second family. It was published as the case where two instruments disagree because the object does not decide.

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.

Which offsets give short hops, at a rise of 0.008The two lowest points are at 5 and 8, and those are the parastichy numbers. Offset 1 is high because a hop of one node is at least the rise, which is what makes a stem easier to count than a disc.00.2000.400102030index offsetmedian hop between node i and node i+m58300 nodes, 34 offsets triedshortest at 5 and 8
Fig. 4 The independent evidence that the fork is a property of the lattice. Three offsets within a fifth of each other in length, computed from a divergence angle and a rise with no model anywhere in the calculation. Anything that has to choose between them is choosing between near-equals, and what tips the choice will be whatever is smallest — a grid step, a disturbance, the order of a loop.

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.

The same rule at p = 1, cut off at two distancesThe top 220 nodes of two stems grown by an identical rule whose energy does not converge. Allowed to see 3/√h neighbours it produces 8/13 at 137.62° with 0.58° of scatter — a lattice no test on this site would question. Allowed 12/√h it produces 44° of scatter and no pattern. The truncation was doing the work.cut at 3/√h8/13 at 137.62°0.58° of scattercut at 12/√hno divergence angle43.86° of scatterexponent 1 · identical but for the neighbourhood0.58° against 43.9°
Fig. 5 The clearest of the four, from the interaction-range thread. A pattern that exists only because the sum was cut off — the cut is a fact about the program and the pattern was read as a fact about the model. What makes these hard is that the output is a perfectly good lattice, and a lattice is what the model is supposed to produce.
A sixfold neighbourhood, and nothing to diluteThe prediction was that a rule with fewer neighbours would convert a jostle into divergence scatter more efficiently. Across a sixfold widening the ratio sits between 0.86 and 0.89, and the one point that differs is the narrowest, at 0.80 — smaller, where the prediction wanted larger. The row underneath is why: past four spacings the rule builds the identical lattice, internode for internode, so there is no neighbourhood left to widen.00.50012346912how far the rule looks, in units of the local spacingscatter a jostle adds, over the scatter the same displacement adds after the choiceequal damage0.80 — the wrong wayinternodes that differ between one neighbourhood and the next422→3113→4none4→6none6→9none9→123 runs per point · window 32–190 nodeseach disagreement is one grid sample
Fig. 6 The second of the four, and the one whose symptom was reassurance. A parameter swept over a factor of four with the answer unchanged looks like robustness and is indistinguishable from a parameter that is not binding. The check that separates them is whether the parameter is the one setting the behaviour, which requires knowing what does.

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.

Two runs of the same rule from unrelated starting anglesBoth settle at 137.0°, within 0.5° of the golden angle, from seeds 166° apart.1201301401500255075100stepdivergence angle produced at that step (°)golden anglegrowth 0.40settled spread 0.00°
Fig. 7 The model settling onto its attractor, which is where the site’s central results come from and which is entirely unaffected by any of this. The angle a rule converges to is a property of a broad minimum; the questions that turn out to be grid-sensitive are the ones about choices between near-degenerate lattices, which is a different and much narrower class.
What the model settles on, against how fast the meristem growsA broad golden branch, a transition, and then the two-whorl regime at exactly half a turn. 8 of 27 converged settings land within 4° of the golden angle; 15 land more than 20° away.1001251501750.50011.50growth parameter Gangle the model settles on (°)goldentwo-whorlfilled: converged · hollow: still wanderingone rule, one knob
Fig. 8 And the site’s central figure, for the same reason. The branch structure is robust to everything that has been swept at it, because it is about which attractor a rule falls into over a wide range of one parameter rather than about resolving between two attractors that are nearly the same.
The landscape the rule chooses over, at a cut-off of 3 spacingsOne height of an ideal lattice, swept around the circle. The exponential cut-off hands the rule a smooth landscape; the hard one hands it a landscape with steps, because a neighbour enters the sum as the candidate slides past it. Halving the sample resolution multiplies the largest jump between neighbouring points by 2.00 on the smooth curve and by 1.04 on the hard one — which is the definition of the difference, since a smooth function's steepest step is bounded by its derivative and a discontinuity's is not. An argmin taken over steps is pinned to the steps.00.2500.5000.750100.2000.4000.6000.8001candidate azimuth, in turnsenergy the rule minimises, scaled to its own rangeexponentialhard — a step, not a sloperise 0.02 · p = 1two cut-offs, one lattice
Fig. 9 A third instance of the same lesson from the cut-off thread: a hard edge puts steps in a quantity that should be smooth, and the steps are at the positions the edge falls between organs. Every one of these is a discretisation showing through, and every one was found by varying the thing that was discretised.
The 13/21 rung, at two azimuth gridsFive stems at each of five disturbances, all at a rise of 0.0019, read through a lag window of 45 from a seed of 40 nodes. A filled mark is a stem that returned 13/21, which is what the position counter finds in it; an open mark is a refusal. The only difference between the two rows is how many azimuths the placement rule samples when it takes its minimum: 384, which every run on this site has used since the foundation phase, against 1152. At the coarse grid the rule locks onto its own sample points and the readout refuses 22 of 25 stems; at the fine one it reads all 25. The ceiling was a parameter of the program.disturbance0.080.10.130.150.18384 azimuthsstep 0.94°1 of 25 read 13/21scatter 44.9°1152 azimuthsstep 0.31°25 of 25 read 13/21scatter 0.4°rise 0.0019 · seed 40 nodesgenerated from a stated rule, not drawn to look right
Fig. 10 The measurement that started this, kept here for the comparison. The grid decides everything at the fine rung and nothing two rungs coarser, and the reason is the same in both directions: how close together the competing minima are.
Every rung has a window it can be read inFor each rung of the ladder, the range of lag windows in which the pair can be read: at least three times the smaller parastichy number, so the main comb has three teeth inside the window, and less than three times the larger, so the larger number cannot itself be a candidate spacing. The band is [15, 24) at 5/8, [24, 39) at 8/13, [39, 63) at 13/21. It is non-empty at every rung, because it is empty only when the larger number is no larger than the smaller. The line at 30 is the window the previous phase used everywhere: it sits inside the 8/13 band and outside the 13/21 one, which is what was mistaken for a ceiling.runglag window, in internodes0153045605/8rise 0.0131524read at 218/13rise 0.0052439read at 3013/21rise 0.00193963read at 45the default window: 30three teeth in, the larger number outgenerated from a stated rule, not drawn to look right
Fig. 11 The other half of the repair, from the previous essay: the lag window a reading needs is set by the rung, and a single default can only ever be right for one or two of them. Between them the two essays turn three constants into three functions of the rise.

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