[r-t] A new Spliced Surprise Major canon
Mark Davies
mark at snowtiger.net
Sat Apr 6 22:00:47 UTC 2013
Last month Rob wrote,
> For example, I think it's a slight cop out to have Deva and Venusium -
> they're practically the same method! How about Cadmium instead?
> Also, you have 2 out of 10 (or even 5) methods - Lessness, Cornwall
> and Malpas - where 4 bells are stuck on the front for a whole lead.
> Two of them with something a bit more dynamic (James College?) would
> be nice.
OK, I've been working on this. It turns out my original choice of
methods is pretty good for the 5056 seed composition and, although I did
manage to get one ATW composition with James College, Queen Camel and
Cadmium in place of Lessness, Glasgow and Venusium, it had poor musical
characteristics.
I checked out some other methods which I thought might be suitable, and
played with different combinations of the existing methods, but whilst
there was some improvement at lower numbers, generally this evaporated
at the 10-spliced level. So eventually I changed tack: I decided to
rebuild the composition from the ground up, using automated suitability
testing of every method in the rung library.
I've tried the technique of "batch composition" before, but not on
anything like the same scale as this. The idea is that, if you have a
reasonably quick machine search parameterised by a single method, then
you parse the entire rung method collection, and run the search once for
each method. Once complete, you sort the output, and from that can
identify the method or methods which work best for your specific
application. Philip will possibly like this idea: it is more along the
lines of his "architectured" concept, in that the optimum methods are
chosen to do the job.
Since each individual search must be run hundreds of times, batch
composition is usually only effective if you have a very small search
space, and hence short runtimes. With spliced we have a
more-than-astronomic search space, but it turns out that the stochastic
tunneling algorithm, which is turning into a bit of a miracle-worker, is
capable of finding good compositions (enough to judge the suitability of
a given set of the methods) with just a few minutes run-time.
I still needed to slim the rung Surprise Major collection down from five
and a half thousand plus, to a number more tractable for my batch
process. I did this by applying the following set of pre-search filters:
1. I accepted only methods which were symmetrical, had PB leadheads, and
contained reasonably pleasant place notations (not more than one
consecutive place either vertically or horizontally).
2. To try and avoid methods with very static lines, I rejected methods
with a pair of bells trapped together for more than a four-pull dodge. I
also applied Rob's criterion, and rejected those where a set of four
bells is kept on the front for the portion of the lead with the treble
in 5678.
3. I scored the remaining methods for musical potential, and rejected
all but the top four hundred or so (everything as good or better than
Yorkshire). To do this, I assessed how many rows in the plain course
either generated 4-runs, or had the potential to do so with a rotated
coursing order, by virtue of having a coursing pair in both 56 and 78 or
12 and 34.
4. Finally, I extracted the front and back works of the remaining
musical candidates (see also my postscript below), and rejected any
whose works I had already used within existing methods of the
composition. To start with, I also rejected anything with the same
leadhead order as an existing method, but this criteria was purposefully
relaxed by the time I reached 8-spliced.
This filtering process generally left me with 200-300 methods to pump
into the batch composer. I took as my starting point a 3-spliced
composition, using Bristol, Cornwall and Venusium, since these methods
had proved the most flexible of my original set. From there, I carried
out a sequence of batch runs, each one assessing the best method to
include at the next stage of the composition. I would generally cream
off the best five or six methods identified by a run, further refine
them using longer stochastic searches, and then use the refined seed
compositions to start between four and seven parallel batch runs for the
next level. This was enough to soak up the processing and memory
capabilities of my machine, without unduly impacting on individual
search performance.
Each batch run took somewhere between 6 and 36 hours, so the whole
process has taken a good fortnight to complete, with a few false starts
and dead ends along the way. The solution I've eventually arrived at
hopefully ticks all the boxes, including those of good music, method
balance and variety. The following newly-introduced methods were
selected, in this order:
Queen Camel (g, cps) - turned out to be the pick of Rob's suggestions
Bouchavesnes (k, B) - very musical, same backwork as James College
Rook and Gaskill (f, B) - very pleasant David Hull method
Lower Beeding (h, B) - only right place method other than Cornwall
Henley (c, cps) - Lancashire start with Reverse Yorkshire frontwork
Tavus (mx, E) - only one with right-place over, wrong-place below
Hanwell (f, B) - nice little number, Acton above Lutterworth
Do those fit your criteria, Rob? I'm half expecting complaints!
Anyway, here is the finished result:
5024 10-Spliced Surprise Major
Composed by Mark B Davies
576 Bouchavesnes (O), Bristol, Cornwall, Queen Camel; 512 Tavus;
480 Lower Beeding; 448 Rook and Gaskill, Venusium; 416 Hanwell (A),
Henley. ATW, 129 COM.
23456 M B W H
--------------
42356 - QC.
54326 - CVCCAO.CRL
54263 - - V.TRHH.
46253 - - QLH.QCTT.BBR
65432 - RO.LVCQ
53624 - LLT.O
(32546) - RO.
32465 - - LBB.CC.
26354 - BHHHL.BBVV
43652 - - BT.BLQHL.
43526 - - TTOLOH.OQQLQQ.
24536 - BOLOBT.B
43265 - BHVBB.QCTB
45362 2 - A.VLQ.BRROQA.
63254 - - BHV.ACTR.A
52436 - - OAAV.OQCC.T
34625 - - A.AAHQQA.A
26543 - - OTH.CCQCACL.T
64352 - 2 VVROV.RVRHO.T.VRROQ
23456 - - R.LOTCQOT.
--------------
Contains:
72 5678/8765
19 6578
153 LB4
Music is equal to any in my original series, whilst the method balance
is superior. On the other hand it looks, to me, somewhat of a handful to
call. Avoiding calls of "Hanley" or "Henwell" would perhaps pose the
biggest obstacle! Over to you Rob...
MBD
P.S. Identification of method front- and back-works provided another
vindication of the usefulness of the Scale programming language. It
takes just a couple of lines of code to do it. Given we have a place
notation class PN, it's easy to define functions which return the places
made above or below a given position. For example:
def placesAbove(pos: Int) = PN(places.filter {_ > pos})
Next we find the position of the treble throughout the lead of the
candidate method:
val treblePositions = lead.map{_.placeOf(1)}
The front or back work can then be extracted by zipping the treble
positions with the lead place notation, and applying the PN
placesAbove() or placesBelow() function shown above:
lead.zip(treblePositions).map{ (p)=> p._1.placesAbove(p._2) }
This returns a List of partial place notations, which can be directly
compared against that of other methods, used as a hashkey to build up
groups of methods with the same work, and so on. Fabulous.
More information about the ringing-theory
mailing list