To test if Precision is better than 2/1, or if multi-Landy is better than Lionel, one could
- specify the two systems to be compared, say BWS with ML and BWS with Lionel
- deal a bunch of random hands.
- bid the hands in a team match between two teams, one that plays system A at both tables and one that plays B at both tables
- DD solve those of the boards where the contract is different at the two tables
- score the match
The biggest challenge is to implement the bidding systems. I envision systems being build of components: a component defines the meaning of calls in a situation. A situation would be described by what information has already been provided by the four players, the last bid, whether it was undoubled/doubled/redoubled, our side or their side, and how many subsequent passes can take place before the auction dies out. Also: which calls are already defined by high-priority components, and what hands are ruled out because a higher-priority component caters to them.
class BiddingSystemComponent {
biddingTree make Tree (Situation)
}
For example:
class Stayman implements BiddingSystemComponent {
biddingTree make Tree (Situation) {
if(lastbid != NT | isdoubled | isTheirContract | level>2) return "componentDoesNotApply"
return biddingTree (
strength in constructive_range:
FALSE: hearts in 3:4 and spades in 3:4 and diamonds in 4:5:
FALSE: return "doesNotCoverThisHand"
TRUE: return (chepestBid(clubs),"Stayman")
TRUE: hearts==4 | spades==4
TRUE: return "doesNotCoverThisHand"
FALSE: return (chepestBid(clubs),"Stayman")
)
}
}
class StaymanResponse implements BiddingSystemComponent {
biddingTree make Tree (Situation) {
if(lastbid.annotation != "Stayman != NT | isdoubled | isTheirContract) return "componentDoesNotApply"
return biddingTree (
hearts >= 4:
FALSE: spade >= 4:
FALSE: return ( cheapestBid(diamonds), "StaymanRsp:NoMajor" )
TRUE: return ( cheapestBid(spades), "StaymanRsp:Spades" )
TRUE: return ( cheapestBid(hearts), "StaymanRsp:Hearts" )
)
}
}
Does this sound like a reasonable approach? Or should it be done in a different way? Is it doable?

Help

