hard
uses the array HARD
to guide the play of most hands. The row index into HARD
is the current total score, and the column index is the value of the dealer's up card. The return value is 0, 1, or 2, indicating 'stand,' 'hit,' or 'double down.' The other two functions, soft
and pair
, play similar roles for hands containing an ace worth 11 and hands containing a pair.HARD(12:16,2:6)
is nearly all zero. This represents the situation where both you and the dealer have bad hands—your total and the dealer's expected total are each less than 17. You are tempted to hit, but you might bust, so you stand. The dealer will have to hit, and might bust. This is your best defense against the house advantage. With naïve play, which ignores the dealer's up card, you would almost certainly hit a 12 or 13. But if the dealer is also showing a low card, stand on your low total and wait to see if the dealer goes over 21.1:52
. These integers represent both the values and the suits in a 52-card deck. The suit is irrelevant in the play, but is nice to have in the display. Cards are dealt from the end of the deck, and the deck is reshuffled when there are just a few cards left.matlabpool
command starts up many workers (copies of MATLAB) on the cores or processors available in a multicore machine or a cluster. These workers are also known as labs. The random number generators on each lab are initialized to produce statistically independent streams drawn from a single overall global stream. The main program on the master MATLAB creates an array B
, and then the parfor
loop runs a separate instance of the sequential simulator, blackjacksim
, on each lab. The results are communicated to the master and stored in the columns of B
. The master can then use B
to produce the plot shown in Figure 3. With 'only' 25,000 hands for each player, the simulation is still too short to show the long-term trend. The computation time is about 11 seconds on my dual-core laptop. If I do not turn on the MATLAB pool, the computation uses only one core and takes almost 20 seconds.