How many answers

The search that was right

This site has reported sixteen assemblies for its Gough platform and labelled the number a lower bound found by search, everywhere it appears. Tracking every path says there are twenty-eight poses and sixteen of them are real. The lower bound was tight. Nothing available to the search could have said so, and a second method that was supposed to settle it turns out to have the same defect one level up.

Assumes Twenty-eight, not forty.

The parallel field’s assembly counter works by brute force, and says so.

It starts Newton from four hundred poses spread across the workspace, keeps whichever ones converge, and reports how many distinct places they landed. For the platform at its home position it returns sixteen, and every figure and docstring that uses that number calls it a lower bound found by search.

That is the right way to report it. The question this essay is about is what happened when there was finally something to check it against.

A lower bound that happened to be tight. The site's own Gough platform at its home pose. The search starts Newton from a spread of guesses and reports what it lands on: 16 from 400, 16 from 1200, 16 from 4000. Tracking every one of the 1458 Bézout paths says there are 28 poses in the complex numbers and 16 of them are real. The search was right. Nothing available to the search could have said so.
Fig. 1 The search’s answer at three numbers of starting guesses, against the complete count. Sixteen, sixteen and sixteen; and the complete route says there are twenty-eight poses in the complex numbers, of which sixteen are real.

The bound was tight

Tracking all 1,458 Bézout paths for that platform at that pose gives 56 solutions, which is 28 poses, of which 16 are real.

The search found all sixteen. Every one of them, from four hundred starts.

assertSearchWasCompleteAndCouldNotKnow checks it properly: it takes the sixteen real poses from the complete count, converts each into the positions of the platform’s six anchors, and requires every one of them to appear among the search’s results to within 10410^{-4}. None is missing. The search was not merely close; it was exactly right.

That is a good outcome and it is also the least informative one possible.

Bézout's number, and the answer. 2 polynomial systems, each solved by tracking every one of Bézout's paths. The Bézout column is what the shape of the system permits; the solutions column is what it has. Gough, this site's: 1458 → 56; Gough, generic: 1458 → 80. The last column is how many paths were tracked per solution found.
Fig. 2 The platform in question, beside a generic one. Twenty-eight poses against forty, and sixteen of the twenty-eight are real at the pose the search was run at.
What became of Bézout's paths. Gough, this site's: 56 of 1458 paths arrived at a solution and 1402 went to infinity; Gough, generic: 80 of 1458 paths arrived at a solution and 1378 went to infinity. The surplus is not merely wasted — it is cheap: a path on its way to infinity is abandoned in a handful of steps, while every path that arrives is tracked in full.
Fig. 3 What the two systems’ paths actually do. The site’s platform ends with far fewer answers than Bézout’s number allows, and the paths that do not arrive are where the difference between a bound and a count lives.

Why being right leaves no evidence

Consider what a person running the search could have done to find out whether it was complete.

Raise the number of starts. Four hundred gives sixteen. Twelve hundred gives sixteen. Four thousand gives sixteen — from 3,946 converged runs, so it is not that the extra starts failed. Ten times the effort, the same answer.

That is what a complete search looks like. It is also, exactly, what a search looks like when the seventeenth solution has a basin of attraction too small to hit by chance. A basin can be arbitrarily small; the number of random starts needed to find it can be arbitrarily large; and a plateau at sixteen is consistent with both.

Spread the starts differently. The starting poses are drawn from a low-discrepancy sequence over a box around the workspace. A solution outside that box would never be found however many starts were used, and nothing about the results would indicate it. The complete count says there is no such solution here — but that is the complete count saying it, which is the thing being tested.

Check that each found solution is genuine. This can be done and it is done: every reported pose is fed back through the inverse problem and the six leg lengths recomputed. They match. But this tests the sixteen that were found. It says nothing whatever about a seventeenth.

There is no experiment available to a search that distinguishes “there are sixteen” from “sixteen have been found”. Completeness is not a property that a sampling method can measure, and the site had been correct to say so and correct to keep saying so.

The pleasing part is that the label was right for two years’ worth of phases and the number underneath it was right too, and neither fact was available from inside.

What the search is actually good at

Nothing above is an argument for abandoning the search, and it is worth saying what it does that neither of the other two methods does.

It returns poses, in the coordinates the mechanism is drawn in. The complete route returns quaternions and translations, which have to be converted; the search returns exactly what forward returns, which is what every figure in the parallel field already consumes.

It is a tenth of a second. The complete route is three and a half. For a figure that shows a platform in each of its assemblies — which is what the parallel field’s figures do — a thirty-five-fold difference matters, and the count is not what those figures are claiming.

It degrades gracefully. Given a pose outside the workspace it returns nothing and says so. Given a nearly singular set of leg lengths it returns the assemblies that converge. There is no threshold to tune and no bound to compute.

The complete route’s advantage is exactly one thing: it knows how many answers there are. Where a figure is about the assemblies rather than about their number, the search is the better instrument, and this phase does not change what the parallel field’s figures use.

The second method, which was supposed to settle it

The natural way to get a second opinion is a method built on a different principle. This field has one: monodromy.

Take one solution of one member of the mechanism family. Walk the parameters — the leg lengths — round a closed loop through complex values, following the solution as it moves. Arrive back at the parameters where the loop started, so the system is the one it began with, and the endpoint is a solution of it. Frequently a different solution: the loop has permuted the sheets.

Repeat with fresh loops, and the set of known solutions grows. Every path tracked lands on a solution, so nothing is wasted, and it needs no bound at all — which means it works on systems whose Bézout number is far too large to enumerate.

It has exactly one defect. It cannot tell when it has finished.

Seventy-five, eighty, seventy-eight, eighty

Run monodromy on the generic platform from four different random seeds, with everything else identical. The true count is 80.

What a search that has finished looks like. Monodromy on the Gough, generic, from 2 seeds, everything else identical. The true count is 80. Seed 7 finished at 75 after 1688 tracked paths; Seed 99 finished at 80 after 1928 tracked paths. Each line flattens before it stops, and flattening is what both outcomes look like.
Fig. 4 Two runs, differing only in the seed of the random number generator. Both climb, both flatten, and one of them flattens at the answer while the other flattens two short of it.

It returns 75, 80, 78 and 80.

Two of the four stop short. And in each failure it had spent fourteen consecutive rounds finding nothing new before giving up — which is precisely what the two successful runs also did before their last solutions appeared.

There is no signal. A monodromy run that has found 78 of 80 produces the same evidence as one that has found 80 of 80: a curve that rises, flattens, and stays flat. The stopping rule is a number of quiet rounds chosen in advance, and choosing it larger makes the method slower without making it complete.

So the method brought in to certify the search has the search’s own defect, one level up. It is a better search — it explores by a principled mechanism rather than by scattering guesses — and it is a search.

What actually settles it

The only thing here that is complete by construction is the expensive route.

Tracking every one of Bézout’s paths is not a search. The count of paths is known before any of them is followed; each one is accounted for as arrived, departed or failed; and the theorem says that every isolated solution of the target is the endpoint of one of them, with probability one over the random choices. Nothing is being looked for, so nothing can be overlooked.

assertBothRoutesAgree is written around that asymmetry. It runs the complete route and monodromy on the same system and requires the same number, and its docstring is explicit about which of the two is being checked: monodromy is incapable of knowing when it has finished, so requiring it to match a route that cannot be incomplete is what turns its number into an answer rather than a lower bound.

And there is a companion check that is stranger and, on this site, more characteristic. assertMonodromyCanStopEarly runs the same problem from several seeds and fails if every one of them reaches the true count. The claim in this essay is a negative one — that a method can stop short and look finished — and a check that only ran monodromy until it succeeded would be confirming the opposite of what is written here. If a future change to the tracker made monodromy reliable on this platform, that check fails, and the right response would be to rewrite this essay rather than the check.

Where the randomness has to be. The Burmester, five poses, solved 5 times in each of four configurations. With γ random or the start system's constants complex — either one — every run finds all 4. With both removed the tracker finds 1, from every seed. The γ-trick is one of two places to put the genericity, not the only one.
Fig. 5 The same kind of question asked of a different system: Burmester’s five-position problem, solved five times in each of four configurations of the tracker’s randomness. Three corners find all four solutions every time; the fourth finds one, and once finds none.
Every path, in the plane of one unknown. The 1458 tracked paths of the Gough, generic, projected onto the complex plane of q₁. Each curve starts at a solution of the start system and ends at a solution of the target or leaves the frame on its way to infinity. This run is γ random, start constants complex, and it found 80 solutions.
Fig. 6 The generic platform’s paths in the plane of one unknown. Nothing about this picture says whether every solution has been found; that is exactly the question the search cannot answer about itself.

A number of rounds is not a stopping criterion

Monodromy stops after a fixed number of consecutive rounds that find nothing, and that number is the only lever anybody has. It is worth seeing what it can and cannot buy.

Set it low and the method is fast and frequently short. Set it high and the method is slow and still frequently short — the runs that failed here had fourteen quiet rounds behind them, and going to twenty-eight would have caught neither, because a subgroup that is not transitive does not become transitive by being asked more times in the same way.

What would help is loops of a different kind: larger excursions in parameter space, waypoints chosen differently, more legs per loop. Those were tried. Three-leg loops were measured against two-leg ones and are worse — 3,162 tracked paths against 968 on the same seed, for the same answer — so the extra leg buys nothing and costs half as much again.

There is a genuine criterion in the literature, the trace test, which asks whether the sum of the solutions moves linearly as the parameters run along a line, and which is a real certificate of completeness rather than a heuristic. It is not implemented here. Saying so is better than implying that the quiet-round count is doing that job, because it is not doing anything of the kind: it is a timeout.

The twelve that were at infinity, coming back. Every solution of the platform's direct kinematics, plotted by how far from the origin it sits, as the six anchors are jittered. At no jitter the site's own platform has 56 solutions and the largest is at 25.8. At a jitter of 0.05 there are 80, and the extra ones arrive from far out — they were never missing, they were at infinity.
Fig. 7 Where the platform’s solutions sit, and how the count changes when its symmetry is broken. Monodromy has to find every one of these by walking to it.

Why monodromy stalls

It is worth understanding why the failure happens, because “it is a search” is a description rather than an explanation.

Monodromy grows the known set by applying permutations. Each loop through parameter space induces a permutation of the eighty solutions, and the set of solutions reachable from a starting one is its orbit under the group generated by whichever loops have been run. If that group is transitive on all eighty, enough loops will reach all eighty; if the loops run so far generate a subgroup that is not transitive, they never will, however many more of the same kind are tried.

For a generic family the full monodromy group is transitive — that is a theorem — so the failure is not that the orbit is genuinely smaller. It is that the loops actually run have generated a subgroup that happens not to be, and the fix is more loops, or different ones, or luckier ones.

Which is exactly why the failure is invisible. There is no local evidence distinguishing “the group generated so far is transitive” from “it is not, and the next loop might change that”. The run has all the information it is ever going to have, and none of it is about completeness.

There is one lever available and this library uses it. If the system has a known symmetry — a map that provably sends solutions to solutions — it can be applied directly, which is not a guess and costs one evaluation. The platform’s is the quaternion sign flip: qq and q-q are the same rotation, so every solution has a partner and the partner can be written down rather than found. Monodromy will not cross a symmetry it cannot see, so telling it about one is legitimate in a way that raising the round count is not.

On this platform it turned out not to matter, because the loops connect the ± pairs anyway. On a family where they did not, it would be the difference between finding forty and finding eighty.

The cost of certainty

It is worth putting the three methods side by side with their prices, because the ranking is not the one the descriptions suggest.

The search. Four hundred Newton solves, a tenth of a second, and no guarantee of anything.

Monodromy. Around three thousand tracked paths, thirteen to forty seconds depending on the seed, and no guarantee of anything.

The complete route. 1,458 tracked paths, three and a half seconds, and completeness with probability one.

The fastest method with a guarantee is faster than the slowest method without one. That is not what anybody expects, and the essay on the paths that leave is about why: the complete route’s surplus paths leave for infinity within a few steps and cost almost nothing, while every path monodromy tracks converges and is paid for in full.

The search is still the cheapest by two orders of magnitude, and it is still the right tool for what it is actually used for in the parallel field — showing that a platform has several assemblies and drawing them. Nothing here argues for deleting it. What has changed is that the number it reports now has something behind it.

The same shape, elsewhere on this site

It is worth listing where else this pattern sits, because once named it is visible in several places that were written without noticing it.

The defect survey. 1,176 exactly correct three-position syntheses, of which some number are usable — and the usable ones are found by sweeping each linkage and seeing which poses it reaches. A sweep at 360 steps is a sample. That number moved from 111 to 176 this phase, and not because the argument changed: a wrong derivative in the solver was making the sweep report reachable poses as unreachable. A count obtained by sampling inherited a defect in the sampler.

The Kutzbach audit. Ten closed loops, and the claim that the corrected mobility formula is right about all ten. Ten is the number that were built, not the number that exist.

Every drag figure on the site. Fifteen frames of a slider, each solved. The claim implied by a smooth slider is that the mechanism assembles throughout the range, and what is checked is fifteen points of it.

None of those is wrong, and none of them is going to be replaced by an enumeration, because for most of them no enumeration exists. What changes is the wording available to describe them: a sampled claim can now be distinguished from an enumerated one, and the site has one of each to compare.

What the site says now

The three-word change is that “a lower bound found by search” becomes, for this platform and this pose, a count — with the count coming from somewhere else and the search’s own status unchanged.

And the general lesson is worth separating from the particular one, because the particular one is a happy accident and the general one is not.

The particular: the sixteen was right.

The general: a number obtained by looking cannot report its own completeness, and neither can a cleverer way of looking. The only thing that settles a count is a method that enumerates rather than searches — and the tell for which kind a method is, is whether it knows how many things it is going to examine before it starts.

That test disqualifies the search, disqualifies monodromy, and passes the total-degree homotopy. It also, uncomfortably, disqualifies a good deal of what this site does elsewhere: a sweep at 360 crank angles has not shown that a mechanism assembles at every angle, and a survey of 6,750 actuator triples has not shown what happens at the 6,751st. Most of the time that gap is pedantic. This field exists because there is one place where it is the whole question.

There is a general observation buried in the bound was tight and nothing could have said so, and it is worth extracting because it is a fact about evidence rather than about this platform. A search that finds sixteen and a search that finds sixteen because sixteen is all there is produce identical output. The number is the same, the confidence is the same, and no amount of additional searching distinguishes them — more rounds returning nothing is exactly what both look like. So the search’s report can never be upgraded from a lower bound by running it harder, and the temptation to treat a long run of unchanged answers as certainty is a temptation to read a null result as a positive one. What settles it has to be a different kind of computation — one that accounts for every path rather than finding some — and the fact that this one agreed with the search is a pleasant outcome rather than a vindication of the method. A method that cannot fail to look complete cannot report completeness, and the only remedy is a second method with a different failure mode.

About the same objects

Not linked from either essay — found by the objects both name.

What links here

The 8 of 12 essays linking to this one that name the most of the same objects.

The objects this essay names

Each one links to every other essay that touches it.

Assembly branchDirect kinematicsGough platformHomotopy continuationLower boundMonodromyNewton–RaphsonReal solution