[r-t] 147 TDMM
Richard Smith
richard at ex-parrot.com
Tue Sep 28 03:19:50 UTC 2010
I've spent quite a lot of the last month looking at spliced
extents of treble dodging minor.
Thanks to a cunning algorithm (which I shall describe in a
moment) designed by Ander which we've been fine-tuning it
turns out to be possible to do exhaustive searches over
search spaces that I had previously thought were impossibly
large.
As a demonstration, I have just done a search for all true
extents of minor using just methods from the standard 147
treble dodging minor methods rung with 4ths place lead-end
bobs. I will do some further verification of this result
over the next few days, but I believe the number of extents
of this form is
5,862,727,200,079,423,275,554
To put this number into perspective, if I were to produce a
booklet listing these in a similar format to that used in
the CC's spliced minor collection, then the resulting
booklet would be about 5 light-years thick.
THE ALGORITHM
There are five main stages to the search algorithm.
First we remove lead splices and lead-end variants from the
list of methods. So, for example, we only want to include
one of Beverley, Surfleet, Berwick and Hexham. This reduces
the list of methods from 147 to 75.
The second stage is to associate each lead end or lead head
row with a method. Start with a list of the 60 in-course
rows with the treble leading -- these will all appear as a
l.e. or a l.h., and we need to choose a method for each one,
and doing so will join a l.h. to the subsequent l.e.
Suppose some l.e./l.h. rows already have methods chosen. Of
the remaining rows, we call a method 'possible' if
(i) the l.e. that would be reached by ringing a lead of
the method starting at the given l.h. row is not
associated with a method; and
(ii) the lead would be true against all other chosen
leads.
Take the row that has the fewest possible methods and, in
sequence, try each of its possible methods, recursing.
This gives an exhaustive tree search. The result of this is
a 'plan' -- a list of which method is rung from each lead,
but with no information on how to join the leads up.
Stage two can be speeded up significantly by implementing a
form of rotational pruning. Put the methods in some
arbitrary order. Any method (other than the first one
chosen) must not be before the first one chosen in the
ordering. This will remove some but not all rotations and
reflections. If you want an accurate count, it's a good
idea to check whether a plan is in its canonical rotation
and only output it if it is.
The third stage is to do an exhaustive search of ways to
join the 30 leads in each plan using 12, 14 or 16 lead end
changes. An normal tree search for compositions will do
this fine. There's no need to check for truth beyond
checking for repetition of lead heads and lead ends as this
was dealt with in stage two. For each plan you then have a
list of compositions that produce the extent.
Fourth, we remove compositions that include 16 lead ends in
London (3-3.4) or Hills (3-34.6) backworks. This is a
little subtle for plans that include one of these backworks
and another one -- as 16 lead ends are fine as long as they
only occur in the non-London, non-Hills backworks.
A further subtlety arises if rotational pruning was done in
stage two. Because there is no clear distinction between
rotation and reflection of a plan (because we don't yet know
which rows will become a l.h. and which a l.e.), pruning
removes both rotations and reflections. However, going from
Carlisle-over to London-over with a 16 l.e. is fine; but
going the other way is not.
This gives the complete set of extents.
Fifth, and assuming we want to count them, for each plan,
the number of extents is the product of three terms: the
number of distinct rotations / reflections (assuming
rotational pruning); the number of lead splices (N^n where N
is the number of methods in the lead splice set -- 2 or 4
for everything in the 147 -- and n the number of leads of
it); and the number of compositions for each plan. Adding
the values for each plan gives the overall total.
For the 147, the five stages took: 4s, 4h 1m, 1h 7m, 16m 44,
and 1m 18s. So the total search time was just under 6h.
I've only made an effort to optimise stages two and three
(stage five in particular is woefully suboptimal), but given
that's where most of the time is spent, that seems
reasonable. I reckon that without too much work the search
could be reduced to under 4h -- maybe even under 3h.
THE EXTENTS
Because the search first finds plans, and the number of
plans (modulo rotation) is a fairly managable 4614, it's
fairly easy to get a good idea of what's there. And a quick
scan through the list of plans shows that there are some
interesting plans that are new (at least to me). I'll give
a breakdown of what's there in a later email.
RAS
More information about the ringing-theory
mailing list