TreeSimplifier guide

Getting started

  1. Install TreeSimplifier from the download page and start it.
  2. Open the Settings tab. Under PioSolver engine, select the PioSolver solver engine program (not PioViewer), for example C:\PioSolver\PioSolver3-edge.exe, then Save settings. TreeSimplifier starts it briefly to confirm it is PioSolver 3.10 or later and that it is activated.
  3. In the TreeSimplifier License panel, click Register beta license. The license is active immediately and the red notice at the top of the window disappears.

Tabs

TabUse it toWhen
SettingsSelect your PioSolver, register the license, install the PioViewer plugin.First, once.
Flop PruningSimplify flop decisions in one solution or a whole folder.Start here.
Turn PruningSimplify turn decisions on every runout.On any solution, or on the results of flop pruning.
Transpose NodelocksCarry the simplified strategy back onto your original solutions.After turn pruning.
Convert SavesRe-save older .cfr files in the compressed 3.10 format. Nothing is solved.Any time, for old saves.
Job QueueRun, order, edit and duplicate jobs.After adding jobs.
ProgressFollow the running job, pause or stop it.While jobs run.

Flop pruning

The Flop Pruning tab: job name, path and output, pruning mode, target node, output type, solve parameters, compression, system options and frequency thresholds.

How a node is decided

At every flop node it visits, TreeSimplifier goes through four steps:

  1. It reads how often each bet size is used at the node.
  2. It removes the sizes used less often than your threshold, before any solving.
  3. For each remaining size, it builds a tree with only that size and solves it to your target accuracy.
  4. It keeps the size with the highest EV for the player acting, and saves the reduced tree, the locked original, or both.

A node with a single size and nothing removed is left as it is: there is nothing to decide. If every size is removed, the node becomes check-only.

Pruning mode

Where results go

With Output left empty, results go to a pruned_flop folder next to your input, with pruned_flop_simple and pruned_flop_nodelock inside, and a log folder. Files already present in the output are skipped, so a stopped job can simply be run again.

Settings

SettingDefaultWhat it does
Path—A .cfr file (File…) or a folder (Folder…).
Selected file only / All .cfr filesAllWhether to process one file or every .cfr in the folder.
Output…/pruned_flopFolder for results. Empty uses pruned_flop next to the input.
ModeBFS cascadeSingle node or cascade, above.
PlayerBothPrune only the nodes where OOP acts, where IP acts, or both. Nodes of the other player are left untouched.
Target noder:0Single node mode only. A PioSolver node ID such as r:0:c:b50: c is a check or call, b50 a bet or raise to 50 chips. Browse tree… opens a navigator to pick it.
Output typeSimpleSimple saves the reduced tree with only the winning sizes, re-solved. Nodelock keeps your original tree with every size, locks it to the simplified strategy and solves it to accuracy. Both produces the two from one run.
Accuracy % pot0.3Target exploitability for every solve, as a percentage of the pot, as in PioSolver: 0.3 is 0.3% of the pot.
AlgorithmautoThe PioSolver solving algorithm: auto (the same as v4_small), v4_small, v4_large, pio_cfr or original_pio.
Backup algorithmoriginal_pioUsed only when the primary algorithm runs out of memory. Empty for none.
Timeout (s)0Upper limit per solve (0 = no limit).
Compression precision / level11 / 11Settings of the compressed save format introduced in PioSolver 3.10: precision 6–16, level 1–21. They trade file size against saving time.
No compressionoffSaves uncompressed, as before PioSolver 3.10.
CPU affinityemptyCores the solver may use: empty for all, or 0-7, 0,2,4.
Keep temporary filesoffKeeps the per-size trees solved during the comparison.
Save log to fileonWrites the job log to the output's log folder.
BET threshold0.05Betting sizes used less than 5% are removed.
RAISE threshold0.02Raise sizes facing a bet used less than 2% are removed.
Bet cap4At this bet/raise level on the flop only all-in remains (0 = no cap). Turn sizes are never capped.

Turn pruning

The Turn Pruning tab: job paths, execution mode, frequency thresholds, solve parameters, algorithms, compression, CPU affinity and workers.

Simplifies turn decisions on every runout. Each turn subtree is extracted and solved in a second PioSolver instance, the candidate sizes are compared there, and the winning strategy is locked into the full tree. Results go to pruned_turn next to your input unless you choose another folder.

Execution modes

ModeScope
Fully automaticEvery .cfr in a folder. Finds every flop line that reaches the turn, then prunes every turn node of those lines, on every runout.
Specific flop node + BFS cascadeOne file, one flop line, every turn decision below it. Optionally one turn card, such as Qs (empty for all runouts).
Specific turn nodeOne file, one turn decision, on all runouts or on a single card.

In Fully automatic mode the flop strategy is locked once the turn decisions are locked, and one final solve of the whole tree is run at the Final solve accuracy. The flop nodes are not re-solved around the new turn strategy.

Settings

SettingDefaultWhat it does
Path / Output…/pruned_turnA .cfr file or a folder. Empty output uses pruned_turn next to the input.
PlayerBothPrune only the nodes where OOP acts, where IP acts, or both.
BET / RAISE threshold0.05 / 0.02Turn betting sizes used less than 5%, and raise sizes facing a bet used less than 2%, are removed before solving.
FLOP PATH threshold0.02Flop lines taken less often than this are skipped: their range is too thin to be worth pruning.
Turn subtree accuracy % pot0.1Accuracy for each subtree solve.
Subtree timeout (s)60Limit per subtree solve (0 = none).
Final solve accuracy % pot0.3The single final solve of the whole tree (fully automatic only).
Final re-solve timeout (s)0Limit for that final solve (0 = none).
Apply upstream nodelocks to subtreesonA subtree starts at the turn card. When the node being pruned comes later in the turn, for example IP's decision after OOP checks, the turn decisions before it may already be nodelocked in the full tree, by an earlier step of the cascade or by you. This option copies those nodelocks into the subtree, so the node is reached with the same ranges as in the full tree and the sizes are compared on the play that will really happen. Turned off, the subtree re-solves those earlier decisions freely and its EVs can differ from the full tree.
Subtree algorithmautoAlgorithm for turn subtrees, with the same choices as in Flop pruning.
Main tree algorithm / backupauto / original_pioAlgorithm for the full tree, and the fallback if it does not fit in memory.
Compression / No compression11 / 11, offAs in Flop pruning.
CPU affinityemptyAs in Flop pruning.
Workers1Parallel solver instances, each working on its own files. Only used in Fully automatic mode. With 1, files are processed one at a time. Estimate worker count samples your files and recommends a number for the RAM currently free.
Keep solved subtrees for inspectionoffKeeps every solved subtree in subtree_debug_<board>. Warning: this can write a very large number of files and use a lot of disk space.
Save log to fileonWrites the job log next to the results.

Transpose nodelocks

The Transpose Nodelocks tab: simplified and original solution folders, Check folder matches, solve parameters and final save type.

Moves the simplified strategy back onto the original solutions. For each board it reads every flop decision and every locked turn decision from the simplified solution, applies them as nodelocks to the matching file in the original folder, then solves to the chosen accuracy and saves. Decisions are matched by action, and sizes absent from the simplified tree are set to zero frequency.

  1. Select the Simplified solution folder (usually a pruned_turn folder).
  2. Select the Original solution folder.
  3. Click Check folder matches to see which boards pair up before you queue anything.
  4. Leave Output empty to write to pruned_final in the original folder.

Convert saves

The Convert Saves tab: single or multi-folder mode, source and destination, save format, delete and move-back options, compression and workers.

Re-saves older .cfr files in the compressed PioSolver 3.10 format. Nothing is solved: each file is loaded and saved again.

SettingDefaultWhat it does
Formatno_riversno_rivers and no_turns save a truncated, smaller tree. full keeps every street and only compresses.
Skip files already presentonLets an interrupted conversion continue where it stopped.
Delete original after conversionoffRemoves each source file once its converted copy is saved.
…then move compressed files backoffWith the option above, converts in place: the compressed files replace the originals and the destination is removed.
Workers8Parallel solver instances. About 1 GB of RAM each for no_rivers. The disk is usually the limit. 12–16 on a fast SSD.
In-place conversion replaces your files

With both delete and move-back ticked, the old saves are gone once each file is converted. Try it on a copy first.

Job queue

The Job Queue tab: queue buttons, a running flop job at 280 of 362 files, a pending turn job, and the selected job details.

All job types share one queue and run in order, one at a time. Each row shows the job's name, type, status, progress with its percentage, mode, the folder it works on and when it was created.

Select several jobs with Ctrl-click or Shift-click: Run selected, Reset to pending, Duplicate job, Remove, Up and Down then act on all of them.

ButtonWhat it does
Run pending / stoppedRuns every job not yet completed.
Run selectedRuns the selected jobs, in queue order.
Up / DownChanges the order.
Edit jobOpens the job in its tab. Change the fields, then click Apply changes to job.
Duplicate jobCopies jobs, for example to run the same settings on another folder.
Reset to pendingQueues finished or failed jobs again.
Remove / Clear completed / errorsTidies the list. Result files are not touched.

Right-click a job for the same actions and to open its folders: Open source folder, Open results folder and Open log folder. A folder the job has not created yet is reported instead of opened.

The Selected job details panel shows every setting of the selected job. The queue is saved automatically after every change and restored when the app starts.

Progress, pause and stop

The Progress tab: Pause and Stop, current status with node, bet sizes and exploitability, estimated time left, progress bars and the live log.

The Progress tab shows the job and file being worked on, the node and bet size being tested, the current exploitability, the elapsed time, and the live log. Use Save… to keep the log. Progress bars appear for the counters the running job actually uses: files always, then flop nodes, runouts and turn nodes as the job reaches them, and the solve bar for every job that solves.

PioViewer plugin

The PioViewer plugin lets you prune the turn or river node you are looking at in PioViewer.

Install and connect

  1. In Settings, make sure the PioSolver executable is the one PioViewer uses, then click Install Tree_Simplifier Plugin in PioViewer.
  2. Restart PioViewer. A Tree_Simplifier menu appears.
  3. Choose Tree_Simplifier → Connect to Tree_Simplifier.
  4. Close and reopen PioViewer, then open or solve your tree as usual.

Prune a node

Select a turn or river decision node, then choose:

MenuWhat it does
Tree Pruning → 1 Size OptimalTests every size at this node on this runout and locks the one with the highest EV for the player acting.
Tree Pruning → 2 Size OptimalTests every pair of sizes and locks the best pair. Nodes with two sizes or fewer are skipped.
Tree Pruning - all runouts → …The same, repeated for the same action line on every card of that street.

Flop nodes are not pruned from PioViewer: use the Flop pruning tab. Subtree accuracy follows PioViewer's own turn and river recalculation accuracy settings.

Plugin settings

In Settings → Relay pruning parameters: bet and raise thresholds (default 0, keep every size), the subtree solve timeout (default 60 s), whether to save the relay log in Tree_Simplifier_logs next to PioSolver (on by default) and whether to keep temporary subtrees. They apply from the next command, with no need to reconnect. Open log folder opens Tree_Simplifier_logs.

Settings

The Settings tab: PioSolver engine, TreeSimplifier License panel with an active beta license, relay pruning parameters and the PioViewer plugin buttons.

License

TreeSimplifier is tied to your PioSolver license: as long as you have access to that license, you have access to TreeSimplifier.