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