@@ -168,15 +168,16 @@ struct MatchResult {
168168fn run_match ( opponent_profile : BotProfile , opponent_name : & str ) -> MatchResult {
169169 let exploit_player = PlayerNoCell :: new_with_chips ( "TAG_exploit" . to_string ( ) , STARTING_CHIPS ) ;
170170 let opp_player = PlayerNoCell :: new_with_chips ( opponent_name. to_string ( ) , STARTING_CHIPS ) ;
171- let seats = SeatsNoCell :: new ( vec ! [
172- SeatNoCell :: new( exploit_player) ,
173- SeatNoCell :: new( opp_player) ,
174- ] ) ;
171+ let seats = SeatsNoCell :: new ( vec ! [ SeatNoCell :: new( exploit_player) , SeatNoCell :: new( opp_player) ] ) ;
175172 let table = TableNoCell :: nlh_from_seats ( seats, ForcedBets :: new ( SB , BB ) ) ;
176173
177174 let telem = Arc :: new ( TelemetryDecider :: new ( ExploitConfig :: default ( ) ) ) ;
178175 let bots: Vec < ( u8 , BotProfile , Box < dyn BotDecider > ) > = vec ! [
179- ( 0 , BotProfile :: tight_aggressive( ) , Box :: new( SharedTelemetry ( Arc :: clone( & telem) ) ) ) ,
176+ (
177+ 0 ,
178+ BotProfile :: tight_aggressive( ) ,
179+ Box :: new( SharedTelemetry ( Arc :: clone( & telem) ) ) ,
180+ ) ,
180181 ( 1 , opponent_profile, Box :: new( RuleBasedDecider ) ) ,
181182 ] ;
182183
@@ -187,7 +188,11 @@ fn run_match(opponent_profile: BotProfile, opponent_name: &str) -> MatchResult {
187188 let opponent_delta = result. net_chips . get ( & 1 ) . copied ( ) . unwrap_or ( 0 ) ;
188189 let counters = std:: mem:: take ( & mut * telem. counters . lock ( ) . expect ( "lock not poisoned" ) ) ;
189190
190- MatchResult { exploit_delta, opponent_delta, counters }
191+ MatchResult {
192+ exploit_delta,
193+ opponent_delta,
194+ counters,
195+ }
191196}
192197
193198// ── Printing helpers ──────────────────────────────────────────────────────────
@@ -210,14 +215,38 @@ fn print_match(name: &str, r: &MatchResult) {
210215 ) ;
211216 println ! ( "│" ) ;
212217 println ! ( "│ Rule firings across {HANDS} decisions:" ) ;
213- row ( "fold_to_cbet > 60% c-bet more (opp folds flops) " , r. counters . fold_to_cbet_high ) ;
214- row ( "fold_to_cbet < 30% c-bet less (opp is sticky) " , r. counters . fold_to_cbet_low ) ;
215- row ( "VPIP > 40% bluff less (calling station) " , r. counters . calling_station_bluff ) ;
216- row ( "VPIP > 40% + PFR < 10% size up for value " , r. counters . loose_passive_sizing ) ;
217- row ( "PFR < 8% less aggr (tight 3-bet range) " , r. counters . nit_aggression ) ;
218- row ( "AF > 4.0 widen calldown (aggro opp) " , r. counters . aggro_calldown ) ;
219- row ( "WTSD > 35% bluff less (goes to showdown) " , r. counters . wtsd_bluff ) ;
220- row ( "3-bet% > 12% less 4-bet bluff (freq 3-bettor)" , r. counters . three_bettor_aggression ) ;
218+ row (
219+ "fold_to_cbet > 60% c-bet more (opp folds flops) " ,
220+ r. counters . fold_to_cbet_high ,
221+ ) ;
222+ row (
223+ "fold_to_cbet < 30% c-bet less (opp is sticky) " ,
224+ r. counters . fold_to_cbet_low ,
225+ ) ;
226+ row (
227+ "VPIP > 40% bluff less (calling station) " ,
228+ r. counters . calling_station_bluff ,
229+ ) ;
230+ row (
231+ "VPIP > 40% + PFR < 10% size up for value " ,
232+ r. counters . loose_passive_sizing ,
233+ ) ;
234+ row (
235+ "PFR < 8% less aggr (tight 3-bet range) " ,
236+ r. counters . nit_aggression ,
237+ ) ;
238+ row (
239+ "AF > 4.0 widen calldown (aggro opp) " ,
240+ r. counters . aggro_calldown ,
241+ ) ;
242+ row (
243+ "WTSD > 35% bluff less (goes to showdown) " ,
244+ r. counters . wtsd_bluff ,
245+ ) ;
246+ row (
247+ "3-bet% > 12% less 4-bet bluff (freq 3-bettor)" ,
248+ r. counters . three_bettor_aggression ,
249+ ) ;
221250 println ! ( "│" ) ;
222251 println ! ( "│ Total rule applications: {}" , r. counters. total( ) ) ;
223252 println ! ( "└────────────────────────────────────────────────────────────────────" ) ;
@@ -234,14 +263,17 @@ fn row(label: &str, count: u64) {
234263fn main ( ) {
235264 println ! ( ) ;
236265 println ! ( "EPIC-27 — ExploitativeDecider heads-up sessions" ) ;
237- println ! ( " {HANDS} hands · 50/{BB} blinds · {} billion chips each" , STARTING_CHIPS / 1_000_000_000 ) ;
266+ println ! (
267+ " {HANDS} hands · 50/{BB} blinds · {} billion chips each" ,
268+ STARTING_CHIPS / 1_000_000_000
269+ ) ;
238270 println ! ( " Rule counters = decisions where that rule was active" ) ;
239271 println ! ( ) ;
240272
241273 for ( name, profile) in [
242274 ( "LoosePassive" , BotProfile :: loose_passive ( ) ) ,
243275 ( "TightPassive" , BotProfile :: tight_passive ( ) ) ,
244- ( "Maniac" , BotProfile :: maniac ( ) ) ,
276+ ( "Maniac" , BotProfile :: maniac ( ) ) ,
245277 ] {
246278 let r = run_match ( profile, name) ;
247279 print_match ( name, & r) ;
0 commit comments