The Two-Six Dream

by Matthew Kidd

♠A8
T653
8432
♣QT8

It’s September 9, 2013 at the Soledad Club pairs game and you’re on lead with this uninspiring collection after the brief auction 2N (20-21 hcp) 3N. What’s your choice?

Clubs look bad. Of the equally unpromising red suits, surely the major suit is a better bet. Maybe you quickly settled on the 3. This was my choice too but only reluctantly and after giving considerable thought to the ♠A. Sometimes you just have to hit partner’s length. Moreover, I had recently read Winning Notrump Leads (2011) by David Bird and Taf Anthias. One of the big themes in the book is how often you need to set up a 5-3 major suit fit rather than a 4-4 major suit fit to set 3N. If you have the five card suit and a promising entry this is easy enough to see. But often you have the three card major and just have to hope partner has five. It works out more often than you might think.

At IMPs I would have led the ♠A without worry. But this was matchpoints. Leading the ace might surrender in overtrick. And the Bird and Anthias book demonstrated that shooting for the 2-6 or 2-5 fit was less likely to succeed than shooting for the 3-5 fit. This is partly because the defensive communication in the suit gets cut earlier and partly because partner is less likely to have six cards and even when he has five, the declaring side still has six cards, instead of the five it would if the defense had a 5-3 or 6-2 fit, and thus more potential to stop the suit. And yet the reduced communication in the spades seemed unimportant here because partner rates to have any quick side suit entry. Maybe that was enough to make the ♠A the percentage lead.

It was over quickly after I tabled 3. This was the hand (#21, rotated to put West on lead):

Declarer knocked out the A and soon came to nine tricks (and could have made an overtrick on better play). But after the ♠A and another spade, declarer is quickly down two.

I was curious how often the ♠A was led. The contract was made nine times. It was set four times, including once by Maritha Pottenger who also sat in my seat. Hmm… very interesting—I had seen her reading Winning Notrump Leads just a few months ago.

Running a simulation

Still one hand proves nothing. I wanted to run a simulation. Bird and Anthias didn’t create their approach de novo. As they note in their acknowledgement section, they used Thomas Andrews’ Deal program and Bo Haglund’s DDS double dummy solver, both open source, along with custom code to generate hands which are consistent with the auctions examined and to tally the results of the simulation. DDS is a wonderfully efficient double dummy solver but it is released as Windows Dynamic-link Library (DLL), meaning it is a piece of code meant to be used by other programs rather than used directly. I decided to write an interface to it called Lead Solver that could run a set of deals through DDS and calculate the “Beats Contract” and “Average Tricks” statistics as shown in their books. The Lead Solver program churns through about 36 deals / second on my Windows 7 era quad-core laptop, fast enough to allow simulations of even 10,000 hands to run in a few minutes.

If you have Deal and Lead Solver setup on your computer the simulation pipeline from the DOS command line is as simple as:

deal -i 2n-3n.tcl -i format/pbn 10000 > 2n-3n-10000-hands.pbn
leadsolver 3N 2n-3n-10000-hands.pbn results.txt

The output in the results.txt file looks like the following where I’ve trimmed the end of the rows for brevity because the defense never collected more than 9 tricks.

Double dummy analysis completed for 10000 deals in 4 m 53 s (0.03 sec/deal ave)

                         Frequency of Tricks Taken
Ld   Avg  %Set       0    1    2    3    4    5    6    7    8    9    …
SA  3.00  15.53* [   0 1063 3284 2745 1355  807  569  157   19    1    … ]
H6  2.98  10.06  [ 151  863 2596 3004 2380  834  126   38    7    1    … ]
H3  2.98  10.06  [ 151  863 2596 3005 2379  834  126   38    7    1    … ]
D4  2.92   8.61  [ 134  844 2847 3117 2197  702  122   31    5    1    … ]
D8  2.89   8.26  [ 142  875 2888 3105 2164  676  114   30    5    1    … ]
HT  2.88   8.58  [ 189  978 2820 2959 2196  707  109   35    6    1    … ]
S8  2.64   3.92  [ 190  934 3610 3433 1441  274   66   42    9    1    … ]
C8  2.42   3.69  [ 274 1883 3322 2924 1228  298   48   21    2    0    … ]
CT  2.41   3.97  [ 281 1888 3416 2804 1214  315   58   22    2    0    … ]
CQ  2.33   3.30  [ 301 1960 3703 2636 1070  258   52   18    2    0    … ]

First notice that for setting the contract, the ♠A lead is a huge winner, 50% better than a low heart. In part this is due to layouts like the actual one above. The ace also offers the opportunity to make a judicious switch at trick two. But at matchpoints where the average number of tricks taken matters, it is an extremely close race between the ♠A and a low heart. This is why I ended up running a simulation of 10,000 hands, twice as many as Bird and Anthias usually ran. A second run on a different set of 10,000 hands in 3.00 and 2.97 average tricks for the ♠A and low heart leads respectively, quite consistent with the first run.

There isn’t much chance of setting the contract. That’s because 2N-3N is much wider range auction than say 1N-2N-3N where the declaring side is almost certainly in the 24-26 HCP range. The 3N bidder can have extras though not enough for a slam try.

I lied a bit about the simplicity of the pipeline. The file 2n-3n.tcl has to be created by you. It defines the conditions that the randomly dealt hands must meet in order to be accepted into the set of hands used to run the simulation. It is a short Tcl program that looks like this.

west is "A8 T653 8432 QT8" main { set hs [hcp south] reject unless {$hs>=20 && $hs<=21} # Note balanced excludes 5 cards suits in the majors. reject unless [balanced south] set hn [hcp north] reject unless {$hn>=5 && $hn<=10} # Responder would make a Jacoby Transfer or use Stayman. reject if { [hearts north] >= 4 || [spades north] >= 4 } # Assume responder trots out some gadget with 10+ cards in the minor suits. reject if { [diamonds north] + [clubs north] >= 10 } # Assume responder makes a quantitative 4N bid one HCP light with # a 5+ card minor. reject if { $hn==10 && ([diamonds north] >= 5 || [clubs north] >= 5) }; accept }

Even if you haven’t done much (or any) programming, the code is pretty easy to understand. Read && and || as “and” and “or” respectively. The code is processed from top to bottom. A randomly dealt hand is rejected if one of the rejection criterion is encountered before the final accept statement. Lines that start with a pound sign, colored green here, are comments that are ignored by the computer.

The code fixes the West hand. Then it requires that the opening hand (South) be a balanced 20-21 HCP. The balanced command in Deal returns true if the hand is 4-3-3-3, 4-4-3-2, or 5-3-3-2 without a 5-card major.

Finally the code limits the North hand to 3N bids by rejecting cases where North would pass, bid Stayman, transfer in a major, make a quantitative 4N bid, or trot out a special bid when holding a lot of minor suit cards. Here North is assumed to make a slam try with 11+ HCP on all hands and also on only 10 HCP when holding a five card or longer minor (the code doesn’t have to reject 10 HCP hands with a 5+ card majors because those hands would transfer and that scenario has been rejected earlier in the code).

It would be nice if you didn’t have to write the Tcl code. But that would require finding an open source bidding engine and I haven’t seen one. Even then, there is always some little thing the analyst wants to tweak. In time you come to appreciate the flexibility of the Deal program supporting Tcl. And in any case, writing Tcl is much more enjoyable than writing C++ to interface with DDS.

Simulation variations

Since the results of leading the ♠A and the low heart are so close at matchpoints, let’s vary North’s style a bit to see how this affects the results. First we’ll assume North has read Kit Woolsey’s Matchpoints and is willing to forgo finding a 4-4 major suit fit when 4-4-3-2 or 4-3-3-3 with 9+ HCP on the theory that with the extra values, notrump and a major suit contract are likely to take the same number of tricks. This will increase the average number of major suit cards in responder’s hand and therefore reduce the success rate of major suit leads. But how will it affect the relative success of the ♠A versus the low heart?

west is "A8 T653 8432 QT8" main { set hs [hcp south] reject unless {$hs>=20 && $hs<=21} # Note balanced excluded 5 cards suits in the majors. reject unless [balanced south] set hn [hcp north] reject unless {$hn>=5 && $hn<=10} Responder would make a Jacoby Transfer. reject if { [hearts north] >= 5 || [spades north] >= 5 } # Assume responder doesn't look for a 4-4 major suit fit with 9+ # HCP and a balanced hand (Woolsey style try for a matchpoint top). accept if { [balanced north] && $hn >= 9 } # Otherwise responder will use Stayman. reject if { [hearts north] == 4 || [spades north] == 4 } # Assume responder trots out some gadget with 10+ cards in the minor suits. reject if { [diamonds north] + [clubs north] >= 10 } # Assume responder makes a quantitative 4N bid one HCP light with # a 5+ card minor. reject if { $hn==10 && ([diamonds north] >= 5 || [clubs north] >= 5) } accept }

Here are the results:

Double dummy analysis completed for 10000 deals in 4 m 53 s (0.03 sec/deal ave)

                         Frequency of Tricks Taken
Ld   Avg  %Set       0    1    2    3    4    5    6    7    8    …
H6  2.69   7.10  [ 101 1246 3512 2746 1685  590   94   22    4    … ]
H3  2.69   7.10  [ 101 1246 3512 2747 1684  590   94   22    4    … ]
SA  2.68  10.77* [   0 1513 4016 2395  999  567  390  107   13    … ]
D4  2.67   6.08  [  85 1202 3645 2831 1629  501   83   22    2    … ]
D8  2.64   5.79  [  96 1251 3664 2810 1600  475   80   22    2    … ]
HT  2.60   6.02  [ 132 1416 3647 2654 1549  499   78   22    3    … ]
S8  2.39   2.46  [ 182 1489 4184 2875 1024  167   49   22    8    … ]
CT  2.23   2.88  [ 203 2445 3723 2420  921  234   37   14    3    … ]
C8  2.23   2.60  [ 200 2461 3627 2569  883  208   35   14    3    … ]
CQ  2.17   2.49  [ 211 2531 3939 2263  807  202   33   12    2    … ]

Leading the ♠A is still the best chance of setting the contract but the low heart has edged ahead of the ♠A at matchpoints though statistically it is a dead heat. Overall defensive chances have dropped considerably.

So far we have assumed the 2N opener does not have a five card major. Let’s see what happens if we change that while also adding Puppet Stayman to the N-S card so they can find their 5-3 major suit fits. We will keep the Kit Woolsey style matchpoint approach but since opener can now have a five card major, let’s assume responder only forgoes looking for a major suit fit with 3-3 or shorter in the majors suits with 9+ HCP.

west is "A8 T653 8432 QT8" # Balanced 5-3-3-2 shapes with a five card major shapecond balanced5M { ($s==5 && ($h * $d * $c == 18)) || ($h==5 && ($s * $d * $c == 18)) } main { set hs [hcp south] reject unless {$hs>=20 && $hs<=21} # Note balanced excluded 5 cards suits in the majors # Allow South to open 2N on all 5-3-3-2 shapes. reject unless { [balanced south] || [balanced5M south] } set hn [hcp north] reject unless {$hn>=5 && $hn<=10} # Responder would make a Puppet Stayman bid or a Jacoby Transfer # with a four card or longer major. reject if { [hearts north] >= 4 || [spades north] >= 4 } # Responder will make a Puppet Stayman bid with a three card major and # not enough HCP to try for a matchpoint top in 3N. reject if { $hn<9 && ([hearts north] == 3 || [spades north] == 3) } # Assume responder trots out some gadget with 10+ cards in the minor suits. reject if { [diamonds north] + [clubs north] >= 10 } # Assume responder makes a quantitative 4N bid one HCP light with # a 5+ card minor. reject if { $hn==10 && ([diamonds north] >= 5 || [clubs north] >= 5) } accept }

Here are the results:

Double dummy analysis completed for 10000 deals in 2 m 50 s (0.02 sec/deal ave)

                         Frequency of Tricks Taken
Ld   Avg  %Set       0    1    2    3    4    5    6    7    8    …
SA  2.26   6.70* [   0 2425 4857 1709  339  226  286  140   18    … ]
H6  2.24   3.65  [ 273 2064 4202 2313  783  304   47    7    7    … ]
H3  2.24   3.65  [ 273 2064 4202 2314  782  304   47    7    7    … ]
D4  2.18   1.72  [ 263 1995 4566 2291  713  131   31    6    4    … ]
D8  2.16   1.60  [ 285 2022 4564 2269  700  119   30    7    4    … ]
HT  2.15   3.05  [ 391 2244 4199 2172  689  252   40    7    6    … ]
S8  1.99   1.10  [ 452 2121 5047 2011  259   67   23    8   12    … ]
C8  1.79   0.79  [ 532 3618 3704 1786  281   58   15    3    3    … ]
CT  1.79   0.86  [ 538 3606 3792 1651  327   61   19    3    3    … ]
CQ  1.74   0.67  [ 562 3697 3931 1472  271   45   16    3    3    … ]

The ♠A edges back into first place. Observe that the defenders chances have dropped considerably. This is because responder’s hand has an average of 0.83 HCP more than in the preceding simulation which in turn is because responder will choose a Puppet Stayman bid instead of 3N with a three card major to check for an eight card fit. Responder will only bypass Puppet Stayman for 3N holding a three card major when he has a good hand.

The new code defines a shape condition called balanced5M. This checks for a 5-3-3-2 shape where the five card suit is a major. This is necessary because the balanced shape condition included with the Deal program excludes 5-3-3-2 shape with a five card major.

This section was revised May 2016 due to an earlier bug in the code which prevented five card majors from appearing in opener’s hand. Specifically, the code [balanced south] || [balanced5M south] had been incorrectly coded as [balanced south || balanced5M south].

Conclusion

The choice between the ♠A and low heart lead is very close in all simulations. The different simulation criterion have a significant impact on the defender’s chances but almost no difference on the relative merits of these two leads. In my experience this seeming indifference to simulation specifics is common. In other words, the practical answer to the simulation, i.e. which card to lead, is quite robust.

Adding statistical calculation to the Tcl program

How did I figure out that responder is 0.83 HCP better on average in the Puppet Stayman scenario? I could have written a program to tally up the HCP in the north hand from the PBN output generated by the Deal program and then take an average. But there is no need to do that because the Deal program provides basic statistical functionality. I just modified the previous code where the additions and modifications are shown in blue.

west is "A8 T653 8432 QT8" # Balanced 5-3-3-2 shapes with a five card major shapecond balanced5M { ($s==5 && ($h * $d * $c == 18)) || ($h==5 && ($s * $d * $c == 18)) } sdev northHCP main { set hs [hcp south] reject unless {$hs>=20 && $hs<=21} # Note balanced excluded 5 cards suits in the majors # Allow South to open 2N on all 5-3-3-2 shapes. reject unless { [balanced south] || [balanced5M south] } set hn [hcp north] reject unless {$hn>=5 && $hn<=10} # Responder would make a Puppet Stayman bid or a Jacoby Transfer # with a four card or longer major. reject if { [hearts north] >= 4 || [spades north] >= 4 } # Responder will make a Puppet Stayman bid with a three card major and # not enough HCP to try for a matchpoint top in 3N. reject if { $hn<9 && ([hearts north] == 3 || [spades north] == 3) } # Assume responder trots out some gadget with 10+ cards in the minor suits. reject if { [diamonds north] + [clubs north] >= 10 } # Assume responder makes a quantitative 4N bid one HCP light with # a 5+ card minor. reject if { $hn==10 && ([diamonds north] >= 5 || [clubs north] >= 5) } northHCP add $hn accept } deal_finished { puts stderr "Total Hands = [northHCP count]"; puts stderr "North HCP Average = [northHCP average]" }

Note that the final statistics are reported to stderr in the deal_finished subroutine. This prevents them from being included in the PBN output when Deal is used with the -i format/pbn switch as above.

Download the Tcl programs

If you want to investigate further, you can download a zip file of the Tcl programs used for this analysis. Get Lead Solver too. Happy hacking.

Note: In the Tcl files in the zip file, the leader’s hand is defined in the file west.tcl instead of in Tcl files for the N-S bidding scenarios. This more general approach requires that both Tcl files be fed to the Deal program. Thus the pipeline looks like:

deal -i west.tcl -i 2n-3n.tcl -i format/pbn 10000 > 2n-3n-10000-hands.pbn
leadsolver 3N 2n-3n-10000-hands.pbn results.txt

For the curious, the output formatting is also done with a Tcl file (pbn in the format folder) which lacks the .tcl file extension and which is included with the Deal program.