Multiway Equity — NPot, RPot, and Robustness

# Multiway Equity — Beyond Simple ppot/npot

Standard ppot/npot are fundamentally heads-up metrics. In multiway pots and on draw-heavy boards, they break down in two ways:

1. **The Multiway Problem:** ppot/npot model one opponent's range. Multiple opponents with overlapping ranges invalidate the single-opponent model.
2. **The Draw Congestion Problem:** Hitting a non-nut draw can make a second-best hand, turning "positive potential" into a disaster.

---

## Solution 1: From "Potential" to "Robust Equity"

Instead of `ppot(my_hand, opponent_range)`, approximate `ppot(my_hand, field_range)`.

**Multiway Robustness modifier:** Assign a "robustness score" to each out, then compute weighted ppot/npot:

| Out | Robustness | Rationale |
|-----|-----------|-----------|
| A♥ (nut flush) | 1.0 | Always best |
| K♥ | 0.4 | Could complete higher flush for opponent |
| Pair K | 0.6 | May not be strong enough multiway |

**Example:** K♥ Q♥ on T♥ 7♣ 2♥ — heads-up any heart is good; multiway, only A♥ and J♥ are reliable outs.

---

## Solution 2: Nut Potential (NPot) and Reverse Pot Potential (RPot)

Split "positive potential" into quality tiers:

### Nut Potential (NPot)
Probability of improving to the **absolute nuts** or effective nuts. Only count outs that make the undeniable best hand.

### Reverse Pot Potential (RPot)
Probability of improving to a **second-best hand** that loses a big pot. Critical on draw-heavy boards.

### Blocker-Based Discounting
- Hold A♥ (nut flush draw): NPot ≈ ppot, RPot ≈ 0
- Hold 8♥ 7♥ (low flush draw): NPot ≈ 0, RPot very high — raw ppot is a mirage

**Example:** J♥ T♥ on Q♥ 9♥ 3♣
- NPot: Only K♥ (nut flush) + 8♥ (nut straight flush) → Low
- RPot: Any other heart makes flush but vulnerable to A♥/K♥ holder → High
- Profile: **High ppot, Low NPot, High RPot** → Play cautiously

---

## Decision Matrix

| Hand Type | NPot | RPot | Action |
|-----------|------|------|--------|
| Strong Nut Draw (A♥ Kx, two-tone) | High | Low | Aggressively build pot |
| Weak Non-Nut Draw (8♥ 7♥, flush board) | Very Low | High | Passive, pot control |
| Multiway Marginal Made Hand (Top Pair) | Low | Medium | Extreme caution, pot control |
| Draw on Paired Board | Low | High | Discount draws significantly |

---

## Practical Implementation Options

### Combined Metric
```
Decision_Score = (0.5 × NPot) + (0.3 × ppot) − (0.5 × RPot) − (0.8 × npot)
```
Strongly favors nut potential, penalizes reverse potential, respects risk of falling behind.

### Multiway Heuristics from Solver Profiles
Run solver analyses for common multiway scenarios (3-player pots on various board textures) and derive heuristics:
- "In multiway pots on flush-draw boards, devalue non-nut flush draws by 50%"
- "Tighten effective nuts threshold proportionally to number of active players"

### Range vs. Range (Composite Field Range)
Build a "composite range" for all opponents. Simulate against this composite range, which inherently accounts for the risk of someone else having a better draw.

---

## Relevance to super-marvin

The `HandPotential` module already computes `nutpot` and `rpot` fields in `PotentialResult`. The `effective_hand_strength_nut_aware()` method extends EHS with these adjustments. The next step is wiring these into `PostFlopStrategy` with multiway-aware thresholds.

id: fa11ebdeecc64da28cac0e1d66ea719b
parent_id: 1246bbc3bb4948fc8329079b84b4ae3d
created_time: 2026-05-31T10:59:27.905Z
updated_time: 2026-05-31T10:59:27.905Z
is_conflict: 0
latitude: 0.00000000
longitude: 0.00000000
altitude: 0.0000
author: 
source_url: 
is_todo: 0
todo_due: 0
todo_completed: 0
source: joplin-desktop
source_application: net.cozic.joplin-desktop
application_data: 
order: 1780225167905
user_created_time: 2026-05-31T10:59:27.905Z
user_updated_time: 2026-05-31T10:59:27.905Z
encryption_cipher_text: 
encryption_applied: 0
markup_language: 1
is_shared: 0
share_id: 
conflict_original_id: 
master_key_id: 
user_data: 
deleted_time: 0
type_: 1