Deal Filtering

DealPump will produce 20,000 random deals per second (on a 200 MHz machine.) "Why would I want to do this?" you ask? With Dealpump's advanced and easy to use deal filter you can quickly ...
  • estimate how frequently certain situations occur.
  • produce a large number of hands (to the screen or a log file) taylored to a particular bidding or play problem, for practice or further analysis.
  • build intuition about bridge hands by looking at a lot of them. (When I was learning I spent hours manually dealing practice hands.)
  • show partner that the "convention (or system) du jour" is impossible - or, perfect!
  • and with imported OKbridge or PBN deals you can search databases (e.g. GoldWay matches) for specific situations and see how the pro's dealt with them.

Dealpump uses a consistent, generalized and natural notation to specify desired hand characteristics, replacing the complex and restrictive hand filter forms and tables found in other "deal mining" applications. For example, to produce deals where the south hand has 12 or more points and north has six or more you would enter:

    s.hcp >= 12;
  n.hcp >= 6;

in DealPump's filter editor, and that's it! Dealpump will pass only those hands that meet these constraints and skip over the rest. Here's a table discribing what goes on in a filter expression:

The Anatomy of a Filter Expression
ns.hs.loser = 4; The ns.hs.loser part of this expression is called a hand attribute. Generally the first part of an attribute (shown in red) names the seats to be examined, north and south in this case. For a deal to succeed the attribute must be satisfied in only one (not all) of these hand positions.
ns.hs.loser = 4; The second part of an attribute specifies which suits to use in the test. If this field is omitted all suits are included. Generally the suit part is accumulative, i.e. whatever attribute is being measured it is summed over these suits. In the example case it is heart losers plus spade losers. The length, cards and suit attributes produce a separate result for each suit called out, any of which can satisfy the constraint - thus s.hs.length = 6; succeeds whenever there is a six card major in the south hand.
ns.hs.loser = 4; The last part of an attribute is the actual metric to be gathered on the deal. In the example the attribute will produce two values - the number of major suit losers in the north hand and in the south. Only one of these has to equal four for this filter expression to succeed. Note that attributes can be combined with addition and subtraction, for example, the expression s.c.length - s.d.length > 0; ensures that south's clubs are longer than diamonds.
ns.hs.loser = 4; Attributes are extracted from the current hand and compared with constraints via a relational operator, "equals" (=) in this case. The usual relational operations are provided: =, <, >, <=, >= and <>.
ns.hs.loser = 4; To the right of the relational operator is always a constraint value or values that the attribute is compared with. There are many forms a constraint can take depending on the type of attribute. Also, multiple constraints can be specified, e.g. ns.hcp = 15:17,20:21; which seeks a 15-17 or 20-21 point hand in the north or south.
ns.hs.loser = 4; The trailing semicolon signifies the end of the expression and that the expression must succeed for this deal to pass the filter. Expressions may also end in a period. A successful period terminated expression causes the deal to be immediately passed with no further tests. A filter must contain at least one semicolon-terminated expression otherwise any deal will pass the filter.

Here are some more examples. Include this line to add a distribution constraint to generate balanced hands in the south:

  s.shape = 4432,4333,5332;

Attributes can be combined in useful ways. Here is a filter that produces opening strength hands with at least four diamonds and longer clubs. Note in particular the compound attribute (yellow) in the third line.

  s.hcp > 11;
  s.d.length >= 4;
 
s.c.length - s.d.length > 0;

The Dealpump filter includes over 30 hand attributes, including hcp, suit length, shape, distribution, controls, quick tricks, losers, specific cards, opening bid/response/overcall, etc. Additionally, in random deal mode, specific cards can be preset (forced) into a particular hand (or hands) and the remaining cards dealt randomly. The dealer and vulnerability can also be preset.