The first version of my Open Source Draft Simulator I wrote in time to analyze the draft of 2001, and it was based on C++. Later on, in 2007, while trying to get a job, I rewrote the simulator in Ruby because I was trying to impress people that I could learn the language. I didn’t get the job. The Ruby simulator isn’t as statistically versatile, but it works on multiple sports.

I pulled out that ten year old code, in part to see if it still works, and part to see if I could make use of the data I had received from Ourlads. Ourlads does a 32 team needs list, which in general is the hardest part of setting up a draft simulator.

The ruby code, as downloaded, has a dependence on the module ‘rdoc/usage’. It is not essential, and I recommend you comment out or delete the line that says ‘require ‘rdoc/usage”. At that point you’ll have a working program. If all the warnings at the beginning bother you, remove the -w flag from the hash bang (first) line.

On Linux create all the files and then get rid of the ^Ms at the end of the lines. I had originally developed this sim on Windows. You can use perl to remove the ^M characters with something like perl -pre ‘s/\r//g’.

Data sources? Sports Illustrated has a top 100 list that works well. The top 100 list from NFL Draft Scout also yields useful results. I used Ourlads as my ‘serious’ set of needs, but Lance Zierlein has a set, as do other sites.

A typical rule file in my current setup is:

#
# rule file for Cleveland Browns.
#
rule need
#
needlist QB RB OL DB DE
#
cond QB max 1 high 
#
cond RB max 1

To note, with the SI top player set, if you don’t set QB to a “high” need, you’ll end up drafting Saquon Barkley number one. That’s one of the things I like about my own code. Slight changes in the needs of a single team can cause ripple effects throughout the draft.

A typical mock draft using this setup is:

ruby rubysim.rb -y 2018 -s football

This mock draft was made by rubysim.rb on 2018-04-16


Round 1.

1. Cleveland Browns select Sam Darnold, QB.
2. New York Giants select Bradley Chubb, DE.
3. New York Jets select Baker Mayfield, QB.
4. Cleveland Browns select Saquon Barkley, RB.
5. Denver Broncos select Josh Allen, QB.
6. Indianapolis Colts select Quenton Nelson, G.
7. Tampa Bay Buccaneers select Minkah Fitzpatrick, S.
8. Chicago Bears select Roquan Smith, LB.
9. San Francisco 49ers select Calvin Ridley, WR.
10. Oakland Raiders select Denzel Ward, CB.
11. Miami Dolphins select Vita Vea, DT.
12. Buffalo Bills select Josh Rosen, QB.
13. Washington Redskins select Josh Jackson, CB.
14. Green Bay Packers select Derwin James, S.
15. Arizona Cardinals select Connor Williams, OT.
16. Baltimore Ravens select Mike McGlinchey, OT.
17. Los Angeles Chargers select Tremaine Edmunds, LB.
18. Seattle Seahawks select Marcus Davenport, DE.
19. Dallas Cowboys select Da'Ron Payne, DT.
20. Detroit Lions select Harold Landry, DE.
21. Cincinnati Bengals select Leighton Vander Esch, LB.
22. Buffalo Bills select Courtland Sutton, WR.
23. New England Patriots select Derrius Guice, RB.
24. Carolina Panthers select Isaiah Oliver, CB.
25. Tennessee Titans select Maurice Hurst, DT.
26. Atlanta Falcons select Taven Bryan, DL.
27. New Orleans Saints select Christian Kirk, WR.
28. Pittsburgh Steelers select Rashaan Evans, LB.
29. Jacksonville Jaguars select Kolton Miller, OT.
30. Minnesota Vikings select Arden Key, DE.
31. New England Patriots select Isaiah Wynn, G.
32. Philadelphia Eagles select Justin Reid, S.

Round 2.

33. Cleveland Browns select James Daniels, C.
34. New York Giants select Lamar Jackson, QB.
35. Cleveland Browns select Mike Hughes, CB.
36. Indianapolis Colts select Jaire Alexander, CB.
37. Indianapolis Colts select Ronnie Harrison, S.
38. Tampa Bay Buccaneers select Carlton Davis, CB.
39. Chicago Bears select D.J. Moore, WR.
40. Denver Broncos select Hayden Hurst, TE.
41. Oakland Raiders select Donte Jackson, CB.
42. Miami Dolphins select Ronald Jones II, RB.
43. New England Patriots select Mike Gesicki, TE.
44. Washington Redskins select Will Hernandez, G.
45. Green Bay Packers select Orlando Brown, OT.
46. Cincinnati Bengals select Billy Price, C.
47. Arizona Cardinals select Chukwuma Okorafor, OT.
48. Los Angeles Chargers select Rasheem Green, DT.
49. Indianapolis Colts select Sam Hubbard, DE.
50. Dallas Cowboys select James Washington, WR.
51. Detroit Lions select Brian O'Neill, OT.
52. Baltimore Ravens select Jessie Bates, S.
53. Buffalo Bills select Deon Cain, WR.
54. Kansas City Chiefs select Tim Settle, DT.
55. Carolina Panthers select Lorenzo Carter, DE.
56. Buffalo Bills select Martinas Rankin, OT.
57. Tennessee Titans select Armani Watts, S.
58. Atlanta Falcons select Harrison Phillips, DT.
59. San Francisco 49ers select Uchenna Nwosu, LB.
60. Pittsburgh Steelers select Dallas Goedert, TE.
61. Jacksonville Jaguars select Anthony Averett, CB.
62. Minnesota Vikings select DeShon Elliott, S.
63. New England Patriots select Tyrell Crosby, OT.
64. Cleveland Browns select Ogbonnia Okoronkwo, DE.

Round 3.

65. Buffalo Bills select Darius Leonard, LB.
66. New York Giants select Sony Michel, RB.
67. Indianapolis Colts select Desmond Harrison, OT.
68. Houston Texans select Mark Andrews, TE.
69. New York Giants select Mason Rudolph, QB.
70. San Francisco 49ers select Dante Pettis, WR.
71. Denver Broncos select Kerryon Johnson, RB.
72. New York Jets select Nick Chubb, RB.
73. Miami Dolphins select Jerome Baker, LB.
74. San Francisco 49ers select Equanimeous St. Brown, WR.
75. Oakland Raiders select Malik Jefferson, LB.
76. Green Bay Packers select Michael Gallup, WR.
77. Cincinnati Bengals select Ian Thomas, TE.
78. Washington Redskins select Frank Ragnow, C.
79. Arizona Cardinals select Geron Christian, OT.
80. Houston Texans select Kyzir White, S.
81. Dallas Cowboys select Jamarco Jones, OT.
82. Detroit Lions select Jeff Holland, DE.
83. Baltimore Colts select Josh Sweat, DE.
84. Los Angeles Chargers select Trenton Thompson, DT.
85. Carolina Panthers select D.J. Chark, WR.
86. Kansas City Chiefs select Braden Smith, G.
87. Los Angeles Rams select Kemoko Turay, DE.
88. Carolina Panthers select Dorance Armstrong Jr., DE.
89. Tennessee Titans select Tarvarus McFadden, CB.
90. Atlanta Falcons select Chad Thomas, DE.
91. New Orleans Saints select Jordan Lasley, WR.
92. Pittsburgh Steelers select Shaquem Griffin, OLB.
93. Jacksonville Jaguars select Rashaan Gaulden, CB.
94. Minnesota Vikings select Tre'Quan Smith, WR.
95. New England Patriots select Anthony Miller, WR.
96. Buffalo Bills select Simmie Cobbs Jr., WR.
97. Arizona Cardinals select Joseph Noteboom, OT.
98. Houston Texans select Nick Nelson, CB.
99. Denver Broncos select Rashaad Penny, RB.
100. Cincinnati Bengals select Jaylen Samuels, RB.

Just as the pundits decided that the NFL was boring, some truly epic games were played. The Thursday night game was good, Rams-49ers 41-38, the Atlanta – Detroit game was the kind people will remember for many years to come. On the back of a ferocious defensive rush Dallas got out of its Denver malaise and began playing football again. Even at 37, Larry Fitzgerald is a monster player.

I should warn people that simple rankings are not much to be believed at this point. It takes a few games to have enough results to be tame. You can add in games from the previous year, but then people might not recognize just how pathetic the New York Giants have been.

The nature of the recent sports scene has made me realize how much I miss Bill Simmon’s Grantland and Brian Burke’s Advanced NFL Stats. Both of these were edgy and ambitious, understanding of the new analytics and doing their best to apply it to games. Quite the opposite of the Sports Illustrated football preview, which was parochial and stodgy and the entire opposite of fearless. No, they were a dull recitation of how orthodox and Northeastern US focused they have become, statistically/sabermetrically illiterate in ways that all-22 will not fix. It read like a Frank Caliendo parody of Sports Illustrated, a bit senile and stuck in their ways.  So I cancelled my SI subscription.

I suspect I bought into Sports Illustrated because of how much I hated the form factor of ESPN the Magazine, which was foisted onto me without my wanting it for being a ESPN Insider. The classic ESPN cover was always an angry black man with his arms crossed who looked like he wanted to mug readers in a dark alley. They never seemed to get that Magic Johnson had hit on an incredible formula for being popular, which was to smile. I much prefer the look of people who seem as if I could share a meal with them.

But I guess people want numbers at this point. I can ponder the desert of cutting edge sports analysis later.

Global Statistics:
Games  Home Wins HwPct Winning_Score Losing_Score Margin
47         27     57.4      27.87        15.70     12.17

Calculated Pythagorean Exponent:  3.41


Rank  Team    Median  GP   W   L   T  Pct   Pred   SRS    MOV   SOS
------------------------------------------------------------------------
1     KC      14.0     3   3   0   0 100.0  84.1  17.10  12.00  5.10
2     ATL      6.0     3   3   0   0 100.0  71.9   3.66   7.00 -3.34
3     JAX     22.0     3   2   1   0  66.7  87.0  13.38  12.67  0.72
4     BAL     14.0     3   2   1   0  66.7  45.1  -6.79  -1.00 -5.79
5     DET     12.0     3   2   1   0  66.7  73.5   0.36   7.33 -6.97
6     DAL     11.0     3   2   1   0  66.7  52.7  -5.56   0.67 -6.22
7     OAK     10.0     3   2   1   0  66.7  70.2  14.77   6.00  8.77
8     MIN     10.0     3   2   1   0  66.7  62.5   4.42   3.33  1.09
9     BUF      9.0     3   2   1   0  66.7  73.6   6.50   4.33  2.17
10    WAS      7.0     3   2   1   0  66.7  64.0  14.20   3.67 10.53
11    TEN      6.0     3   2   1   0  66.7  67.9  14.25   5.67  8.58
12    CAR      6.0     3   2   1   0  66.7  59.9   2.74   1.67  1.08
13    NE       3.0     3   2   1   0  66.7  53.5   6.19   1.33  4.86
14    DEN      3.0     3   2   1   0  66.7  70.0   5.91   6.00 -0.09
15    PHI      3.0     3   2   1   0  66.7  60.4  10.34   3.00  7.34
16    GB       3.0     3   2   1   0  66.7  50.0  -4.42   0.00 -4.42
17    PIT      3.0     3   2   1   0  66.7  69.9  -1.26   4.67 -5.93
18    LA       2.0     3   2   1   0  66.7  77.1   6.48  10.67 -4.18
19    TB       2.5     2   1   1   0  50.0  59.7   1.73   2.50 -0.77
20    MIA     -6.0     2   1   1   0  50.0  20.8  -7.68  -6.00 -1.68
21    HOU     -3.0     3   1   2   0  33.3  24.3  -5.31  -7.00  1.69
22    IND     -3.0     3   1   2   0  33.3  14.1 -20.69 -12.33 -8.35
23    SEA     -6.0     3   1   2   0  33.3  33.1  -2.41  -3.67  1.26
24    CHI     -6.0     3   1   2   0  33.3  21.3  -5.95  -7.33  1.38
25    NYJ     -9.0     3   1   2   0  33.3  24.8  -2.14  -6.67  4.53
26    NO     -10.0     3   1   2   0  33.3  44.4   2.78  -1.67  4.45
27    ARI    -11.0     3   1   2   0  33.3  26.1 -15.29  -6.67 -8.63
28    CLE     -3.0     3   0   3   0   0.0  26.1 -16.24  -6.67 -9.58
29    SF      -3.0     3   0   3   0   0.0  20.4  -6.06  -8.33  2.27
30    LAC     -3.0     3   0   3   0   0.0  24.3  -1.22  -6.33  5.11
31    CIN     -4.0     3   0   3   0   0.0  11.5 -14.51  -9.00 -5.51
32    NYG    -14.0     3   0   3   0   0.0  10.2  -9.29 -11.00  1.71

For those people interested in the old Sports Illustrated Game Paydirt, and perhaps have charts but no playing field, I wrote playing field software in Perl.

The  Generic American Football Field is a way to play a Paydirt game without having any kind of physical playing field. All you need is a Perl interpreter that can run Tk.

A copy of GAFF is available in the Yahoo Paydirt group.