//! Worked example: continuous-score outcomes via `Outcome::Scored`. //! //! Three players play a small round-robin where the score margin matters, //! not just who won. We show how `score_sigma` controls how much weight //! the engine places on the observed margin. //! //! Run with: `cargo run --example scored --release` use smallvec::smallvec; use trueskill_tt::{ConstantDrift, Event, History, Member, Outcome, Team}; fn main() { let mut h = History::builder() .mu(25.0) .sigma(25.0 / 3.0) .beta(25.0 / 6.0) .drift(ConstantDrift(0.03)) .score_sigma(2.0) // tune to data; smaller = trust margins more .build(); let events: Vec> = vec![ Event { time: 1, teams: smallvec![ Team::with_members([Member::new("alice")]), Team::with_members([Member::new("bob")]), ], outcome: Outcome::scores([21.0, 9.0]), }, Event { time: 2, teams: smallvec![ Team::with_members([Member::new("bob")]), Team::with_members([Member::new("carol")]), ], outcome: Outcome::scores([21.0, 18.0]), }, Event { time: 3, teams: smallvec![ Team::with_members([Member::new("alice")]), Team::with_members([Member::new("carol")]), ], outcome: Outcome::scores([21.0, 21.0]), }, ]; h.add_events(events).unwrap(); let report = h.converge().unwrap(); println!( "converged={}, iterations={}, log_evidence={:.4}", report.converged, report.iterations, report.log_evidence ); for who in &["alice", "bob", "carol"] { let s = h.current_skill(who).unwrap(); println!("{:>6}: mu={:>7.3} sigma={:.3}", who, s.mu(), s.sigma()); } }