| name | matchmaking |
| description | Skill-based matchmaking systems, ranking algorithms, and queue management for fair multiplayer matches |
| sasmp_version | 1.3.0 |
| version | 2.0.0 |
| bonded_agent | 03-matchmaking-engineer |
| bond_type | PRIMARY_BOND |
| parameters | {"required":["algorithm"],"optional":["queue_timeout_s","skill_range_expansion","team_size"],"validation":{"algorithm":{"type":"string","enum":["elo","trueskill","glicko2","custom"]},"queue_timeout_s":{"type":"integer","min":30,"max":600,"default":120},"skill_range_expansion":{"type":"number","min":0.1,"max":2,"default":0.5},"team_size":{"type":"integer","min":1,"max":100,"default":5}}} |
| retry_config | {"max_attempts":3,"backoff":"linear","initial_delay_ms":5000,"max_delay_ms":30000,"retryable_errors":["QUEUE_TIMEOUT","INSUFFICIENT_PLAYERS"]} |
| observability | {"logging":{"level":"info","fields":["player_id","mmr","queue_time_ms","match_quality"]},"metrics":[{"name":"matchmaking_queue_time_seconds","type":"histogram"},{"name":"matches_created_total","type":"counter"},{"name":"queue_size","type":"gauge"},{"name":"match_quality_score","type":"histogram"}]} |
Matchmaking System
Implement fair skill-based matchmaking for competitive multiplayer games.
Algorithm Comparison
| Algorithm | Accuracy | Convergence | Use Case |
|---|
| Elo | Good | Fast | 1v1 games |
| TrueSkill | Excellent | Medium | Team games |
| Glicko-2 | Excellent | Slow | Chess, turn-based |
| Custom | Variable | Variable | Specialized |
Elo Rating System
def calculate_elo_change(winner_mmr, loser_mmr, k=32):
"""Calculate MMR change for a match result."""
expected = 1 / (1 + 10 ** ((loser_mmr - winner_mmr) / 400))
return k * (1 - expected)
mmr_change = calculate_elo_change(1500, 1400)
winner_new = 1500 + mmr_change
loser_new = 1400 - mmr_change
TrueSkill for Team Games
import trueskill
def calculate_trueskill_match(team1, team2, winner):
"""Update ratings after team match."""
env = trueskill.TrueSkill(draw_probability=0.0)
t1_ratings = [env.create_rating(p.mu, p.sigma) for p in team1]
t2_ratings = [env.create_rating(p.mu, p.sigma) for p in team2]
winner == :
new_t1, new_t2 = env.rate([t1_ratings, t2_ratings], ranks=[, ])
:
new_t1, new_t2 = env.rate([t1_ratings, t2_ratings], ranks=[, ])
new_t1, new_t2