# FreeBJ Blackjack simulator # FreeBJ is a free and open source Blackjack simulator used to make statistical analysis of game strategy. It supports a variety of game rules including any valid combination of: * European no holecard (ENHC) or American holecard (AHC); * Hit soft 17 or stand on soft 17; * Any number of card decks; * Double after split (DAS) or not; * Double on 10-11 only, 9-11 only, or any two cards; * Hit split aces or not; * Maximum number of split hands; * Early and late surrender; FreeBJ is able to count cards using the hi-lo system and adapt its bet based on a programmable betting strategy. The simulator also supports playing deviations and one can dynamically add their own deviations. FreeBJ is a command-line interface program that prints on its standard output a JSON of all the statistics gathered; the program can also output on demande a CSV of bankroll samples to have a look on the evolution of your capital throughout the playing session. ## Installing ## The easiest way to install FreeBJ is through Rust's Cargo: $ cargo install freebj Refer to [crates.io](https://crates.io/) for more information on how to install and use Cargo for your operating system and distribution. ## Typical usage ## FreeBJ can be invoked without any arguments, it will then run a simulation of one million rounds with default rules: * Americal holecard (AHC); * Stand on soft 17 (S17); * No DAS; * 6 decks of cards; * No surrender; Card counting is disabled by default. $ freebj { "rounds": 1000000, "rules": { "game_type": "ahc", "soft17": "s17", "das": false, "bj_pays": 1.5, "double_down": "any_two", "surrender": "no_surrender", "play_ace_pairs": false, "max_splits": 4, "decks": 6, "penetration_cards": 250 }, "ev": -0.006965999999999973, "stddev": 1.134225621872368, "winning_distrib": { "-4.0": 78, "-3.0": 565, "-2.0": 42360, "-1.0": 436266, "+0.0": 88616, "+1.0": 326537, "+1.5": 44988, "+2.0": 59870, "+3.0": 612, "+4.0": 108 }, "hands": { "total": 1024402, "won": 445247, "lost": 491025, "push": 88130, "busted": 161041, "blackjack": 47147, "doubled": 95252, "split": 46241, "insured": 0, "surrender": 0 } } For more information about the JSON output and all the options available, please refer to the manpage [freebj(1)](doc/freebj.1). ## More usage examples ## Run a simulation of 10 billions rounds spread across 16 threads: $ freebj -n 10G -j 16 Play a european game with early surrender, DAS, hit soft 17, and 4 card decks: $ freebj --enhc --esurr --das --h17 -d4 Always stard the rounds with an ace and 5 for the players and an 8 as the dealer upcard and always double-down (instead of hitting): $ freebj -c A,5 --dealer=8 -aD Enable hi-lo card counting and default playing deviations (first 20 deviations), use a default betting strategy (bet 1.0 on TC 0, increase bet by 1 for each TC point, do not play negative TC): $ freebj --hilo --deviations Enable hi-lo, no default deviations, but add a specific user playing deviation consisting of doubling-down with a TC ≥ 3 with a hard 12 against a dealer 6: $ freebj --hilo -D "12vs6:>3D" Enable hi-lo with no playing devations and set a custom betting strategy where the player bets 10.00 $ on a TC 0, increases (resp. decreases) their bet by 5.00 $ on each poisitive TC point (resp. negative TC point). A maximum TC of 6 is set to limit risk: | TC | BET | |---:|--------:| | −3 | 0.00 $ | | −2 | 0.00 $ | | −1 | 5.00 $ | | 0 | 10.00 $ | | +1 | 15.00 $ | | +2 | 20.00 $ | | +3 | 25.00 $ | | +4 | 30.00 $ | | +5 | 35.00 $ | | +6 | 40.00 $ | | +7 | 40.00 $ | $ freebj --hilo -b 10.0 --bet-per-tc=5.0 --bet-max-tc=6 ## Blackjack research with FreeBJ ## FreeBJ can be viewed as a research tool to study Blackjack and its strategies. Other research tools can be built upon `freebj` (so-called "study" scripts); none are provided in this source tree, but many are available by the same author along their output data in the [`freebj_study`] repository. A website is also available for plushing these results: [`freebj_study`]: https://github.com/kevin-lesenechal/freebj_study