Solver accuracy
Every number the app presents as "the solver" rests on a solve that stopped at some accuracy. This page says which, and how to check it yourself. (For how megamaster's own engine compares to PioSolver on identical trees, see the head-to-head accuracy page.)
Accuracy targets
Accuracy is measured the way PioSolver measures it: exploitability as a fraction of the starting pot. A lower number is a tighter target.
- Library solves: 0.1% of the pot per board for the pilot subsets, 0.2% for production (
accuracy_fracin the sweep). A board whose solve ran out of time before reaching the target is kept, with its true exploitability recorded. - Baselines (Lines map): the map reads only the boards whose recorded exploitability is within twice the target. A board whose solve stopped further out is left out of every average rather than counted as the solver's answer.
- Priced rules (EV loss by sizing): 0.25% of the pot per solve. Two solves' combined noise has to sit under the 0.5% "fine" band edge or the classification would be noise. A candidate whose cost is provably above the kill threshold (3% of pot) is killed early and reported as a lower bound; a cost inside the two solves' combined exploitability is reported as "within noise", never as a precise number.
- 3-way builds (Solve › Build with 3 players): there is no single exploitability with three players. The figure is the worst player's best-response gain, % of the pot: the most any one player could win by changing their strategy alone. ±0.2% for a river or a turn and ±2.5% for a flop by default; each player's own gain is shown too. See 3-way solving.
- Per-hand EV scoring (the Analyse tab, and the grades the replayer shows beside each action): a decision only counts as a mistake when its EV loss exceeds 0.1bb — deltas below that read as solve noise. Each scored decision keeps the template and accuracy it was scored at, so aggregates can say what they rest on.
Representative boards
You cannot solve every exact board. A library package covers a template with the 1,755
canonical flops (rank pattern plus suitedness), or while it is still growing, a weighted subset of them
generated to represent the full board universe with the right balance of textures; each board stands in for the boards it represents, and every aggregate — a texture
bucket's frequency, a sizing cost, a leak's baseline — is weighted by that representation. The weights are in
the package (boards.subset_weight) and travel with every number derived from them. The Lines map
additionally says, for the packages it read, how many of their boards fall in the texture bucket being
compared.
Reading a package in the app
Solve › Library lists every package with its board count and engine. Packages download on demand,
one per spot, and solved trees arrive one board at a time into a cache whose size limit you set under
Storage on the same page; Download all pre-loads a spot for offline use. Each
board's recorded exploitability (solved_expl) is stored in the package, which is what the 2×
gate above reads. The line above the trainer's table says, per board, which streets are EV-graded and
which are graded by frequency only (see Why some
EV comparisons are missing).
Trees
Postflop trees are heads-up with the template's sizes; templates are named by pot type, positions, last
preflop raise size and stack (srp_bb_btn_2.5x_100bb). Only the 37 templates checked by hand (34
six-handed spots and the 3 heads-up ones) are offered anywhere in the app; a tree for any other spot is
ignored even if it is on disk. The template's sizes
are the full menu the sizing report prices simplifications against. No preflop solver ships; preflop
baselines are frequencies and ranges taken from a separate preflop solve.