Skip to main content

rbp_clustering/
lib.rs

1//! Hierarchical k-means clustering for strategic abstraction.
2//!
3//! This module reduces the 3.1 trillion unique poker situations into a tractable
4//! number of strategically-equivalent buckets. The abstraction proceeds street-by-street,
5//! clustering hands based on their distributions over next-street outcomes.
6//!
7//! ## Pipeline
8//!
9//! 1. **River** — Cluster by raw equity (win probability against random hands)
10//! 2. **Turn** — Cluster by distribution over river buckets
11//! 3. **Flop** — Cluster by distribution over turn buckets
12//! 4. **Preflop** — Cluster by distribution over flop buckets
13//!
14//! ## Core Types
15//!
16//! - [`Layer`] — A clustering layer mapping observations to abstract buckets
17//! - [`Histogram`] — Distribution over child buckets for a given hand
18//! - [`Lookup`] — Precomputed observation → bucket mapping
19//! - [`Metric`] — Pairwise EMD distances between buckets
20//!
21//! ## Algorithms
22//!
23//! - [`Elkan`] — Accelerated k-means with triangle inequality bounds
24//! - [`Sinkhorn`] — Entropic optimal transport for EMD computation
25//! - [`Absorb`] — Incremental centroid updates during clustering
26//!
27//! ## Persistence
28//!
29//! - [`Artifacts`] — Serialization of clustering results to PostgreSQL
30//! - [`Distances`] — Precomputed distance matrices for online lookup
31mod absorb;
32mod abstraction;
33mod artifacts;
34mod bins;
35mod bounds;
36mod distances;
37mod elkan;
38mod emd;
39mod equity;
40mod future;
41mod heuristic;
42mod histogram;
43mod layer;
44mod lookup;
45mod metric;
46mod pair;
47mod phi;
48mod potential;
49mod sinkhorn;
50mod tests;
51
52pub use absorb::*;
53pub use abstraction::*;
54pub use artifacts::*;
55pub use bins::*;
56pub use bounds::*;
57pub use distances::*;
58pub use elkan::*;
59pub use emd::*;
60pub use equity::*;
61pub use future::*;
62pub use heuristic::*;
63pub use histogram::*;
64pub use layer::*;
65pub use lookup::*;
66pub use metric::*;
67pub use pair::*;
68pub use phi::*;
69pub use potential::*;
70pub use sinkhorn::*;
71pub use tests::*;