See PioSOLVER documentation for more information about the basic commands.
Useful Jesolver-specific commands include set_compression, set_ev_boost, set_hand_type_order, set_low_card and enable_progress_bar.
USAGE:
jesolver.exe [-a <name=value>] ... [-c <command>] ... [-d
<command>] ... [-e] [-k] [-m] [-o] [-p
<port>] [-r] [-s] [-t] [-v] [--] [--version]
[-h] <script.txt>
Where:
-a <name=value>, --var <name=value> (accepted multiple times)
set value of a variable (set_value/get_value/$name in script)
-c <command>, --cmd <command> (accepted multiple times)
execute command
-d <command>, --pscmd <command> (accepted multiple times)
execute command after script is loaded
-e, --exit
exit after client disconnects (when running as a server)
-k, --suppressok
suppress ok-messages
-m, --compactmsg
show only single-line solver messages
-o, --echo
echo commands
-p <port>, --port <port>
server port (default 5251)
-r, --color
color text
-s, --server
run as a server
-t, --terminateonerror
terminate process on error
-v, --verbose
show debug information
--, --ignore_rest
Ignores the rest of the labeled arguments following this flag.
--version
Displays version information and exits.
-h, --help
Displays usage information and exits.
<script.txt>
script to load
Example:
> jesolver.exe -vtrk 3betpotFAST.txt -d "go"
position OOP or IP
node-id history of actions, e.g. r:0:b123:c:Qs:c (always start with 'r:0:', bet 123, call, deal Qs, check)
betsizes series of cumulative bet sizes, e.g. 0 30 30 30 90 (check, bet 30, call, deal next card, check, bet 60)
filename e.g. "big tree.cfr", use double quotes if there are spaces in the name
Whenever there is a list of 1326 (\(\binom{52}{2}\)) values, it refers to the hands in the order given by show_hand_order.
add_info_line <line>
line a line of text to be added to saved tree files
Used by PioVIEWER.
add_line <betsizes>
build_tree
Build a tree using the currently set tree parameters.
calc_eq <position>
calc_eq_node <position> <node-id>
calc_eq_pp <position>
calc_ev <position> <node-id>
calc_ev_line <position> <node-id>
calc_ev_pp <position> <node-id>
calc_global_freq <node-id>
calc_line_freq <node-id>
calc_results
clear_lines
Clear lines added with add_line.
combo_lock_node <node-id> <locked>
locked 1326 values of either 0 (unlocked) or 1 (locked)
connect <hostname> [port]
hostname hostname or ip address of server
port server port number (default 5251)
Connect to a server (NOT a worker). See how to run Jesolver on a server.
connect_to_workers <hostname>[:port] <weight> <hostname>[:port] <weight> ...
hostname hostname or ip address of worker
port worker server port number (default 5251)
weight relative performance of worker, used to allocate work
Example: connect_to_workers worker1 3.0 worker2:5352 1.0
connects to two workers. worker1 is expected to be three times as fast as worker2.
cut_line <node-id>
deactivate
Deactivates current license and exits. Use this before switching computers.
default_value <variable> <value>
Set value of a variable if it has not been set yet.
Example:
default_value num_steps 300
build_tree
go $num_steps steps
...
> Jesolver.exe -a num_steps=500
disconnect
Disconnect from connected server
dump_tree <filename> [no_turns | no_rivers] [no_evs] [fast]
no_turns don't save turn or river data
no_rivers don't save river data
no_evs don't save EVs. EVs show as zero in the viewer but strategies and ranges still work.
fast prefer faster load time over smaller file size
Saves the current tree to disk.
echo <text>
text a line of text to write to output
enable_adaptive_precision <0 | 1>
Enable or disable automatic precision adjustment (on by default). Only turn off if it fails to work properly (should never happen).
enable_avx512 <0 | 1>
Enable or disable AVX-512 optimizations.
enable_numa <0 | 1>
Enable or disable NUMA optimizations. May improve performance if running on a computer with multiple NUMA nodes.
Enable or disable solver progress bar when running interactively in a console.
enable_river_strategy <0 | 1>
Enable or disable computation of river strategy (enabled by default, only disable if you know what you are doing). Disabling river strategy computation nearly halves memory usage but makes it impossible to compute exact exploitability. It's therefore only useful if you know how many iterations to run in advance AND are going to throw the river strategy away anyway. e.g.:
enable_river_strategy 0
build_tree
go 300 steps
wait_for_solver
dump_tree tree.cfr no_rivers
enable_ui_notifications <0 | 1>
Enable or disable extra UI notifications that may or may not be used by GUI applications.
estimate_schematic_tree
Estimate the size of the tree based on current tree creation parameters.
eval_hand <cards>
Evaluate a poker hand with currently set rules. The third value is a hexadecimal hand rank number that can be used to compare hands. Greetings goes to Steve Brecher for the evaluator.
Examples:
eval_hand AsAdKs5s5d2h3h
AsAdKs5s5d2h3h | 7 cards | 020c3b00 | twopair | aces and fives, king kicker
eval_hand As6d7c8h9c
As6d7c8h9c | 5 cards | 000c7654 | highcard | ace nine eight seven six
set_low_card 6
eval_hand As6d7c8h9c
As6d7c8h9c | 5 cards | 04030000 | straight | nine eight seven six ace
set_low_card 6
set_hand_type_order highcard pair twopair straight trips fullhouse flush quads straightflush
eval_hand 6c7c8h9sTh
6c7c8h9sTh | 5 cards | 03080000 | straight | ten nine eight seven six
eval_hand 6c7c8h8s8c
6c7c8h8s8c | 5 cards | 04065400 | trips | eights, seven six kicker
explo_partial <node-id>
force_line <betsizes>
forget <turns | rivers>
Remove turn+river or river strategies freeing memory.
free_schematic_tree
Clear lines added with add_line.
free_tree
Delete current tree and free memory.
get_actual_compression
Return the compression level that is used by the current tree.
get_all_values
Output names and values of all set variables.
Example:
get_all_values
build 1068
build_date Nov 15 2020
build_time 21:34:08
cpu_time 215.750000
peak_working_set 461
running_time 18.453000
solver_ev_ip 75.029664
solver_ev_oop 104.970338
solver_exploitability 0.048353
solver_iterations 300
solver_mes_ip 75.063159
solver_mes_oop 105.033548
END
get_instruction_set
Get the CPU instruction set used by the current process.
get_value <variable>
Output name and value of a variable.
get_worker_data
Used internally by master/workers.
get_worker_strategy
Used internally by master/workers.
go [n seconds | n steps] [block]
n seconds run solver for n seconds or until set accuracy is reached
n steps run solver for n iterations or until set accuracy is reached
block wait until done before returning
help
ignore_mem_check
Ignored.
init_worker
Used internally by master/workers.
is_ready
Check if the solver is initialized.
is_tree_present
Return true if a tree has been built.
load_script <filename>
Load script from disk and execute the commands.
load_tree <filename>
Load tree from disk replacing the current one if any.
lock_node <node-id>
Lock strategies of given node.
node_count
ping
Ping workers.
rebuild_all (rebuild_forgotten_streets)
Rebuild forgotten streets with default strategies.
remove_line <node-id>
repeat <n> <command>
Repeat command n times.
reset_tree_info
Reset lines added with add_info_line.
set_accuracy <value> [chips | fraction]
Set the accuracy at which the solver stops in either chips (default) or a fraction of the pot.
set_board <cards>
Set current board cards.
Called before building a tree. level can be one of:
-1 | auto automatically try to choose the fastest level that uses less than 90% of available memory
0 | none no compression, old default
1 | low ~54% of none
2 | medium ~41% of none
3 | high ~35% of none
4 | max ~25% of none
5 | fast ~68% of none, new default
The compression ratios are only estimates so it may sometimes be better to choose the level manually.
probs 52 values in the order 2c 3c ... 2d 3d ... 2h 3h ... 2s 3s ... (default 1 1 1 ...)
Used to alter the relative probabilities of the cards in the deck to model the "bunching" effect in a multi-handed game. Can also be used to create a 3-suit hold'em variant (possibly with set_hand_type_order) for example. Note that the players' ranges are not affected by this command so you might have to change them manually.
set_eff_stack <stack>
set_end_string <string>
For PioSolver 2.x support. See documentation.
set_ev_boost <node-id> <boost>
Artificially boost the EV of an action during the computation. Exploitability is still computed using the real EVs.
Using small EV boosts (positive or negative) can be used to create exploitative strategies that are still reasonably balanced and difficult to exploit in practice.
In this example, set_ev_boost is used to control flop CBet percentage.
We can see that at set_ev_boost r:0:b94 -0.3
CBet % goes to 0.
This animation shows an example of how a check-raise strategy changes. Most noticeably top and mid sets get fast-played.
Note that currently board cards in node-id are ignored, so r:0:c:c:3d:b123 affects all turns, not just the trey of diamonds.
set_hand_type_order <highcard pair twopair trips straight flush fullhouse quads straightflush> (in any order)
e.g. for short deck (6+) holdem, add these two commands on the top of the script:
set_low_card 6
set_hand_type_order highcard pair twopair straight trips fullhouse flush quads straightflush
set_info_freq <iterations>
Set the SOLVER: message interval, default 25.
set_isomorphism <turn> <river>
Enable or disable (0 | 1) turn/river suit isomorphisms (never needed really).
card the rank of the lowest card in the deck [2..6], default 2 obv
Should be called before set_board and set_range when building a tree.
set_must_use_hole_cards <n>
n the number of hole cards that must be used to make a poker hand (0 = texas holdem, 1 = ?, 2 = greek holdem)
set_pot 0 0 <pot>
Set the starting pot (only the third value is used).
set_precision <precision>
precision [-2..2], default 0
Adjusting precision may improve performance and/or reduce memory usage depending on the tree and the target exploitability. Should not be needed if adaptive precision is enabled (default).
set_prefetch_mode <mode>
mode [0..2], default 2
Should not be changed unless it happens to improve performance for some reason.
set_rake <fraction> <cap>
(implemented since build 1068)
Example: set_rake 0.05 3
sets rake to 5% with a 3-chip cap.
set_range <position> <range>
range 1326 values [0..1]
set_recalc_accuracy <flop> <turn> <river>
Set solve_partial accuracy.
set_scheduler
deprecated
set_simd_level <level>
level maximum number of parallel evals to use [1..8], default 8
Smaller values may improve performance on older hardware.
set_strategy <node-id> <childnum> <strategy>
childnum index of action [0..num_actions-1]
strategy 1326 values [0..1]
Set the strategy of an action. The strategy of each action should be set and the values should add up to 1.
set_threads <n>
Set the number of threads used by the solver. Defaults to one per logical processor.
set_value <variable> <value>
Set value of a variable.
Example:
set_value test 123
set_value ok!
echo $test
123
verify_value test 124 0.5
ERROR: verify_value unexpected value
show_all_lines
Show all betting lines without board cards in node-id format.
show_categories <board>
Show category ids for each pair of holecards on the given board, first line for made hands, second line for draws
show_category_names
Show category names.
show_children <node-id>
show_cpu_info
Show CPU vendor, name and list of supported features.
show_effective_stack
Show effective stacks at the root of the tree.
show_hand_order
Return the hand order used by the solver.
show_locked_combos <node-id>
show_memory
Show total and available physical memory.
show_node <node-id>
show_probs <node-id>
Show both players' probabilities of reaching a node and probabilities of possible actions.
show_range <position> [node-id]
Show ASCII range visualization.
show_range_grid IP
A K Q J T 9 8 7 6 5 4 3 2
A 25 .. .. ** ** ** ** ** ** ** ** ** **
K .. .. ** ** ** ** ** ** ** ** ** ** **
Q ** ** .. ** ** ** ** ** ** ** ** ** **
J ** ** ** .. ** ** ** ** ** .. .. .. ..
T ** ** ** ** .. ** ** ** ** .. .. .. ..
9 ** ** ** ** ** ** ** ** ** 50 .. .. ..
8 ** .. .. .. .. ** ** ** ** 50 .. .. ..
7 .. .. .. .. .. .. .. ** ** ** 50 .. ..
6 .. .. .. .. .. .. .. .. ** ** ** 50 ..
5 .. .. .. .. .. .. .. .. .. ** ** 50 ..
4 .. .. .. .. .. .. .. .. .. .. ** ** ..
3 .. .. .. .. .. .. .. .. .. .. .. ** ..
2 .. .. .. .. .. .. .. .. .. .. .. .. **
END
show_settings
Returns an empty list.
show_stats [epsilon] [position]
epsilon reach and strategy probabilities lower than this value are treated as 0 (default 0)
Show interesting numbers.
Example:
show_stats 0.0001
epsilon 0.0001 (0.01%) | OOP+IP
stat flop turn river total
decision nodes 10 1862 188160 190032
canonical decisions 10 1368 114320 115698
infosets/decision 344.5 330.439 316.67 316.807
infosets 3445 615277 59584720 60203442
infoset-actions 8957 1392469 128107148 129508574
reachable infosets 66.1% 46.4% 39.5% 39.5%
pure strategies 67.2% 71.5% 74.6% 74.6%
reachable pure strats 54.4% 54.3% 59.2% 59.1%
weighted pure strats 51.8% 53.4% 56.9% 56.8%
END
show_strategy <node-id>
show_strategy_pp <node-id>
show_tree_info
Show lines added with add_info_line.
show_tree_params
skip_if_done <filename> <label>
Jump forward to label: in script if file exists.
sleep <duration>
duration milliseconds to sleep
solve_all_splits <turns | rivers>
Solve forgotten and rebuilt (rebuild_all) streets again. May take a long time.
solve_partial <node-id>
Solve forgotten subtree.
solver_time
Return the time since the current solver instance started in seconds.
spawn <cmdline>
cmdline child process command line parameters
Spawn a child solver process that exits when parent exits (for testing multiple workers).
stdoutback
Stop redirecting stdout.
stdoutredi <filename>
Redirect stdout to file.
stdoutredi_append <filename>
Append stdout to file.
stop
Stop solver after current iteration is finished.
take_a_break <duration>
Pause the solver for duration seconds.
traverse_subgames
Used internally by master/workers.
unlock_node <node-id>
Unlock strategies of given node.
verify_value <variable> <value> [tolerance]
Verify that value of a variable equals value ± tolerance (default 0).
wait_for_solver
Wait until solver is finished.