[r-t] 23-spliced

Richard Smith richard at ex-parrot.com
Wed Jan 5 14:57:25 UTC 2005

Alexander Holroyd wrote:

> Can you arrange to have Each Lead Different?

Sure.  I've got several like this.  Here's an example:

  m0 = &-3-6.5-5.36.2-2.3.2-2.5;
  m1 = &5-5.6-56-6-4-5.4-2.3;
  m2 = &5-5.6-2-3-2-5-4-5;
  m3 = &-3-6-2-36-34-3-56-3;
  m4 = &-5-6-2-6-4-3.6-56.3;
  m5 = &-5-4-56-3-2-5-56-5;
  m6 = &-5-4-5-3-2-5-2-3;
  m7 = &-5-6-5-36-4-3-2-7;  // [Ospringe]
  m8 = &3-56.4-5-6-4-3.2-4.7;
  m9 = &-5-4-5-6-4-5-6-7;
  m10 = &-5-4-56-6-4-5-2-5;  // [Heydour]
  m11 = &-5-6-5-6-2-5-56-5;
  m12 = &-5-4-2-6-2-3-34-3;  // [Rotherfield]
  m13 = &-34-4-2-3-2-3-2-3;  // [Westminster]
  m14 = &-34-4-56-6-2-5-6-5;
  m15 = &-5-4-5-6-2-3-6-1;
  m16 = &-5-6-5-3-4-3-2-1;
  m17 = &-3-6-2-6-34-3-2-7;
  m18 = &-5-4-56-3-4-3-6-7;  // [Digbeth]
  m19 = &-5-6-2-6-4-3-2-3;  // [Tyburn]
  m20 = &-5-4-5-6-2-5-2-1;  // [Aspenden]
  m21 = &-5-4-56-3-4-5-36-3;  // [Catesby]
  m22 = &-5-4.56-5.6.34-34.5-2-1;

> And then how about maximising the music?

I'm not sure how to do this, short of finding N different
compositions and looking for the most musical.  (And perhaps
attempting to rotate this.)

> Also, how about a composition with 2nds and 8ths place methods and 14 and
> 1234 calls (not tenors together)?

Yeah.  Do you fancy giving me a composition to work from?
-- I'm feeling lazy ;-).

> Can you give a bit more detail about your algorithm?

I used the Metropolis algorithm (as always).  I started with
just the 322 lead heads and ends from Phil's composition.
(Initially I seeded it with Yorkshire, but for later runs I
decided to just start with the bare lead heads and ends.)

I then chose a course at random, and altered the current
method, either by adding changes or by removing them.  When
growing a method, I would alternately add a block of three
changes and then a single change so you would never get only
part of the a partial dodging position.  Changes were
removed in whole blocks.  Each of the three-change blocks
either had the form A-B (a wrong place block) or -C- (a
right place block).  Right place blocks were selected with
probability 0.4.  (Naively you would expect the probability
of an entirely right-place method being the fourth power of
this value.  In practice, wrong-place blocks tend to be more
false, thus favouring right-place blocks.)

I also added restrictions to prevent sevenths above the
treble, more than two consecutive blows in one place,
changes with more than two places made (though I removed
this for the "named methods only" composition), and
cross-sections with no internal places.  Changes were chosen
at random with changes including an external place being
twice as likely to be selected as others.  This was because
I found that 34 and 56 were over-represented (for my taste).
In retrospect, this probably left 36 under-represented.

Whenever a method grew to 15 changes long, I exhaustively
searched for a choice of half-lead change that would allow
the separate half-leads to be joined up.

Each choice of method (or partial method) was scored as

  (# rows) + 12/7 (# half-leads) - 500 (falseness)

Thus, the maximum score was 23*7*32 + 12*23 = 5428.  A row
that appeared twice would score -1000 (there are two false
rows); a row that appeared four times would score -3000 (six
pairs of mutually false rows).  (There isn't much logic to
exact values of the coefficents in this formula -- I just
fiddled with them until they worked.)

I would repeated perturb the system (either by growing it,
or shrinking it) and calculate the change in the score after
each perturbation.  Call this change delta.  For each
perturbation there would be a parameter beta (sometimes
called the thermodynamic temperature in the literature).  I
would accept each perturbation with probabilty

  exp(delta * beta)

Thus, if delta was positive, it would be accepted
unconditionally.  If delta was negative, depending on beta,
it might be accepted.  During the test run, I would
gradually increase beta from 0.0025 to 12.16.  This would be
done exponentially in 3,300,000 steps.  (I.e. 3.3 million
perturbations were attempted in each run.)  (Again, these
figures were arrived at empirically.)

During the later (and more successful) runs, I experimented
with a third sort of perturbation -- a combined
remove-block, add-block operation.  As this typically had a
lower average score, it allowed the algorithm to continue to
higher values of beta.  Conversely, I found that allowing
this at lower values of beta seemed to be preventing the
system from finding a low energy (high score) path.  I don't
really understand this -- maybe it just meant that my
thermodynamic profile was too wide.  Anyhow, I solved it
by only allowing this combined perturbation once beta
reached a threshhold value of 0.1.

I think that's basically all there is to it.


More information about the ringing-theory mailing list