[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 

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.

     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...


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