- i left my TBA api key is in the file for convenience, better if you go get your own (it's free)
ruby rankings.rb 2024cabe
- shows stats for 2024cabe teams and how they did in 2024cabe matches
- adding "prev" at the end yields the same results as cabe is week6 and currently that'd be the last match for everyone in cabe
ruby rankings.rb 2024hop prev
- shows stats for 2024hop teams and how each did in their latest event matches
ruby rankings.rb 2024cur
- shows stats for how teams are doing in Curie Division (no data yet)
ruby rankings.rb 2024cafr prev
- technically possible to see how the teams of CVR did in their last completed event
- Estimated Points Share
- Penalty points are removed
- This is mostly aligned with OPR, but much better at dealing with fewer matches played.
- This is mostly aligned with EPA in terms of results.
- EPS vs Week Comp - This looks at your EPS and subtracts out the FRC averarge EPS for that week. Ths is to better account for teams that did not play a late season event. This isn't perfect though as week 6 saw many Championships that artificially raised this average by a lot.
- Total Notes - auto + teleop notes
- Auto Notes
- Teleop Notes
- Amplified Note Ratio - number of amplified speaker notes / (amp notes + unamplified speaker notes)
- a measure of how efficient the team scores
- ideally this is 2 max (never score unamped speaker, and score 4 amped speaker for every 2 amp), however, due to estimations, some teams can get a ratio of over 2 here.
- low ratio means the robot likely has a hgher ceiling after some tactical adjustments
- Estimated Penalty Points Share - Same algorithm but looking at how many foul points the opposing alliance received. So if a team got a "6.4", it means that on average, they gave up 6.4 points worth of penalties to the other alliance.
- Note: The Blue Alliance insights tab has foul points, but it's based on what your own alliance received for points which is meaningless.
- Endgame Stats - climb - gives full endgame stats, ordered by climbs/match (exact counts, not estimates)
- Endgame Stats - trap - gives full endgame stats, ordered by traps/climb (exact counts, not estimates)
example
team matches nothing parked climbed/match trapped/climb 3494 14 1 1 12 (0.86) 12 (1.0) 6328 15 0 2 13 (0.87) 12 (0.92) 5940 15 0 2 13 (0.87) 12 (0.92) 3310 18 1 6 11 (0.61) 10 (0.91) 8013 20 2 3 15 (0.75) 13 (0.87) 4270 18 1 3 14 (0.78) 12 (0.86) 4909 14 0 5 9 (0.64) 7 (0.78) 88 16 2 5 9 (0.56) 7 (0.78) 2046 15 2 6 7 (0.47) 5 (0.71) 3546 16 2 4 10 (0.63) 6 (0.6) 4414 15 2 1 12 (0.8) 7 (0.58) 192 19 1 5 13 (0.68) 4 (0.31) 302 14 0 4 10 (0.71) 3 (0.3) 1218 15 0 1 14 (0.93) 2 (0.14)
- Match Num Pieces Forecast - looks a schedule and estimates the total notes count.
- once Hopper schedule is released, you can do "ruby rankings.rb 2024hop prev"
- before that, you can try "ruby rankings.rb 2024cabe"
- this might be useful info in determining if we want to ask for coopertition
example
2024cabe_qm10: 13 - 12 (7419 8852 5430) - (8045 199 4159) 2024cabe_qm11: 14 - 32 (4255 751 6418) - (2288 5419 6619) 2024cabe_qm12: 10 - 15 (9470 9519 6814) - (766 1160 5985) 2024cabe_qm13: 15 - 34 (6238 972 7401) - (254 1700 5940) 2024cabe_qm14: 24 - 25 (7667 7840 1678) - (3482 841 114) 2024cabe_qm15: 13 - 5 (7729 6884 9038) - (4186 2204 4973) 2024cabe_qm16: 10 - 25 (9202 6059 9111) - (5274 4698 649) 2024cabe_qm17: 16 - 11 (8159 2637 8852) - (7419 9545 9634) 2024cabe_qm18: 14 - 14 (4904 8793 199) - (4669 4990 3045) 2024cabe_qm19: 7 - 21 (7137 5430 8045) - (7245 9609 581)
- Match Score Forecast - similar to what statbotics does (except they use epa) - TODO add opponent foul points
- Can see where on the stage people climbed, but this doesn't seem useful
- Can see who can get the 2-pt mobility in auto, but not sure that's too useful
- A lot more complicated, but based on the calculated Point Share, we can go back to the match data again and see how the other alliance did compared to their expected.. this might give us Defense Efficiency
{"adjustPoints"=>0,
"autoAmpNoteCount"=>0,
"autoAmpNotePoints"=>0,
"autoLeavePoints"=>4,
"autoLineRobot1"=>"No",
"autoLineRobot2"=>"Yes",
"autoLineRobot3"=>"Yes",
"autoPoints"=>34,
"autoSpeakerNoteCount"=>6,
"autoSpeakerNotePoints"=>30,
"autoTotalNotePoints"=>30,
"coopNotePlayed"=>false,
"coopertitionBonusAchieved"=>false,
"coopertitionCriteriaMet"=>false,
"endGameHarmonyPoints"=>0,
"endGameNoteInTrapPoints"=>5,
"endGameOnStagePoints"=>3,
"endGameParkPoints"=>2,
"endGameRobot1"=>"Parked",
"endGameRobot2"=>"Parked",
"endGameRobot3"=>"StageRight",
"endGameSpotLightBonusPoints"=>1,
"endGameTotalStagePoints"=>11,
"ensembleBonusAchieved"=>false,
"ensembleBonusOnStageRobotsThreshold"=>2,
"ensembleBonusStagePointsThreshold"=>10,
"foulCount"=>0,
"foulPoints"=>0,
"g206Penalty"=>false,
"g408Penalty"=>false,
"g424Penalty"=>false,
"melodyBonusAchieved"=>false,
"melodyBonusThreshold"=>18,
"melodyBonusThresholdCoop"=>15,
"melodyBonusThresholdNonCoop"=>18,
"micCenterStage"=>false,
"micStageLeft"=>false,
"micStageRight"=>true,
"rp"=>0,
"techFoulCount"=>1,
"teleopAmpNoteCount"=>8,
"teleopAmpNotePoints"=>8,
"teleopPoints"=>68,
"teleopSpeakerNoteAmplifiedCount"=>9,
"teleopSpeakerNoteAmplifiedPoints"=>45,
"teleopSpeakerNoteCount"=>2,
"teleopSpeakerNotePoints"=>4,
"teleopTotalNotePoints"=>57,
"totalPoints"=>102,
"trapCenterStage"=>false,
"trapStageLeft"=>false,
"trapStageRight"=>true}},
Algorithm Explanation
We run multiple iterations to distribute points among teams based on their performance in matches. Here's a breakdown of how the algorithm processes the data:
- Match 1: 90 points - Team1, Team2, Team3
- Match 2: 70 points - Team4, Team5, Team6
- Match 3: 80 points - Team1, Team5, Team6
- Match 4: ...
- Team1, Team2, Team3 all receive equal shares of the 90 points from Match 1, which is 30 each.
- Team4, Team5, Team6 all receive equal shares of the 70 points from Match 2, which is about 23.33 each.
Assuming at the end of this iteration, the points are as follows:
- Team1: 35 points
- Team2: 30 points
- Team3: 20 points
- Team1 receives (35/(35+30+20)) of the 90 points from Match 1.
- Team2 receives (30/(35+30+20)) of the 90 points.
- Team3 receives (20/(35+30+20)) of the 90 points.
- Team1 receives (34/(34+31+21)) of the 90 points from Match 1.
- Team2 receives (31/(34+31+21)) of the 90 points.
- Team3 receives (21/(34+31+21)) of the 90 points.
We iterate this process 50 times. After multiple iterations, the percentage shares of points among the teams will stabilize.
not maintained, has 2023 stuff (probably won't work for 2024) but this looked at all events and did global rankings and stuff.
can ignore.. was an attempt at coming up with better schedules for quals, but didn't get very far
- old version where you just cut&paste results from thebluealliance event page (before i found out about TBA api).
- this script finds Estimated Point Share.
- similar to OPR/EPA, but definitely better than OPR (for fewer match data)