Understanding Monte Carlo Sampling in HRC
The Basics: Calculating a Monte Carlo Hand
When creating a new Monte Carlo hand in HRC, the program runs a short batch of sampling to initialize ranges and expected values (EVs). For most hands, this initial sampling isn't enough for accurate results, and you'll need to run additional sampling to calculate the hand properly.
Follow these basic steps to run a hand:
- Create the hand using the "Monte Carlo Hand" setup dialog.
- After the hand is created, click the green "Run Nash Calculation" button.
- Accept the default settings for now and click OK to start sampling.
- A new sampling job will open and run until your target criteria are reached. The progress and estimated time remaining will be displayed after a short while.
Important: You can cancel sampling jobs at any time without losing progress. If you start a new sampling job later, the calculation will resume from the point it was canceled, unless the "Reset Regret" or "Reset Strategies" options are selected. It's fine to cancel, save, and resume at a later time.
The Convergence Indicator (CI)
For Monte Carlo hands, HRC uses a heuristic called the Convergence Indicator (CI) to evaluate the convergence state of calculations. The CI measures how much preflop strategies have changed during recent sampling. A lower CI means fewer changes in preflop strategies, indicating that the hand is closer to convergence.
Below are rough recommendations for suitable CI targets:
- CI < 10
At this level, opening ranges and initial responses (3-bets, flats) will be reasonably stable. However, deeper action sequences, such as squeezes, multiway spots, and rare lines, won't be fully converged. This is the default value.
- CI < 5
This level provides good convergence for most spots, except for very rare lines.
- CI 2-3
Going this low offers diminishing returns, and you shouldn't expect significant changes. This level is mostly useful for reference solutions, such as when creating charts or other materials where precise hand selection and mixing are important. For day-to-day calculations, this level isn't recommended.
As mentioned earlier, rare lines take longer to converge than main ranges. However, this doesn't mean that you need to calculate the entire tree to a low CI value whenever you want to analyze a rare spot. You can run the full tree to achieve decent accuracy, and then focus additional calculations on specific lines only. In HRC, this option is called "Subtree Sampling."
Reset Options: Regret vs Strategy
The sampling dialog provides two reset options:
- Reset Regret: This option clears the EVs and strategies based on previous sampling, allowing the calculation to start from scratch. It's advised to use this option when the tree has undergone significant changes, such as manually locking strategies, pruning actions, or altering abstractions.
- Reset Strategies (optional): This option resets the strategies while preserving the sampled EVs. It can help generate cleaner strategies faster by eliminating some low-percentage noise. A typical use case is to run a calculation to CI < 20 and then apply "Reset Strategies" when starting the remaining sampling to the final CI target. The reset only needs to be performed once. This process is entirely optional and not essential for day-to-day calculations.
These resets are one-time actions applied right before a new sampling job begins. The actual sampling will proceed as usual.
Subtree sampling is useful when you're interested in a specific part of the game tree, especially a rare line that would take a long time to converge when running the full tree. Instead of using resources to run the entire tree for great accuracy just for a single rare line, subtree sampling focuses on the part you're interested in.
To start subtree sampling, first select a decision point in the tree, and then click the "Run Nash Calculation" button in the main toolbar. Subtree sampling takes into account all previous actions when calculating the selected subtree, but it doesn't update ranges or expected values (EVs) of earlier actions. The calculation starts at the point where previous actions are completed, treating them as fixed.
A Subtree Example
Efficient subtree sampling involves running each part of the tree only as much as needed to get accurate results for the spot you're interested in. Let's look at an example where we want to study the ranges after the CO opens, SB flats and BB 3-bets.
In this example, the ranges of UTG - HJ players matter only for card removal, and we only need these ranges to be remotely realistic. So, we can begin by running the entire tree to CI < 50. At this point, UTG to HJ ranges are likely fine for card removal purposes.
Subtree 1: Next, select CO's opening range and run subtree sampling with the sampling scope set to "Selected Subtree". The calculation starts from the point when it's folded to CO (marked in the red box below). This step won't update UTG to HJ ranges, so you won't waste time on branches where one of these players opens. (We can even get rid of those branches entirely to reduce the file size when saving, right click UTG - HJ and select "Prune Children".)
Run this subtree until the CO opening range is stable (CI < 10 is likely sufficient). Note that this subtree still updates lines when CO folds and action proceeds to the BU.
Subtree 2: Once you're satisfied with the CO opening range, restrict the scope further by selecting SB's reaction to a CO open and start subtree sampling for this new selection. The calculation no longer updates the CO opening range or BU's reaction and starts after CO opens and BU folds, focusing on SB's action. As you select more specific parts of the tree, the calculation becomes increasingly efficient. Run additional sampling until the accuracy is satisfactory.
Subtree 3: Although you could let the calculation finish at this point, for the sake of the example, select BB's squeeze after SB calls. This new scope can be a bit counterintuitive. Remember that the subtree calculation starts after all previous actions are executed, so in this case, the last action is SB's call and the calculation proceeds from that point on.
It's crucial to understand the exact scope of the calculation when working with subtree sampling. Take the time to examine the three selected decision points above and the corresponding subtree scopes marked in red.
Node Locking: Defining Custom Strategies
Node locking allows you to manually set the strategy for specific game nodes and recalculate the remaining tree based on your custom inputs. This feature is particularly useful when you want to explore alternative strategies or test specific game scenarios.
Follow these steps to use node locking:
Select the node: Locate and double-click on the node in the game tree where you want to create a custom strategy.
Edit the strategy: A new range editor dialog will appear, displaying the current strategy for the chosen node. Modify the range to reflect your desired custom strategy.
Save the changes: Click "OK" to save your custom strategy and close the window. The locked node will now display the updated strategy, but EVs and other ranges will remain unchanged at this point.
Recalculate the tree: After locking the node and setting your custom strategy, run the Nash calculation once more to update the remaining tree with the new inputs. Ensure that the "Reset Regret" option is checked so HRC discards EVs from earlier sampling before the node lock. In most cases, the locked range will significantly impact only specific parts of the game tree. You can use subtree sampling to recalculate only the relevant sections of the tree.
Node locking offers a powerful method for experimenting with various strategies and gaining valuable insights into alternative game situations, ultimately enhancing your poker understanding and decision-making skills.