This is the code for the paper Picking Winners Using Integer Programming by David Hunter, Juan Pablo Vielma, and Tauhid Zaman. Below are details on the required software, and instructions on how to run different variations of the code.
To start off, you should download Julia from the corresponding site above. Then, open Julia and run the following commands
julia> Pkg.add("JuMP")
julia> Pkg.add("DataFrames")
julia> Pkg.add("GLPKMathProgInterface")
As we noted in the paper, GLPK and Cbc are both open-source solvers. This code uses GLPK because we found that it was slightly faster in practice for the formulations considered. For those that want to build more sophisticated models, they can buy Gurobi. Please consult the JuMP homepage for details on how to use different solvers. JuMP makes it easy to change between a number of open-source and commercial solvers.
You can download the code and the example csv files by calling
$ git clone https://github.com/dscotthunter/Fantasy-Hockey-IP-Code
Alternatively, you can download the zip file from above.
Open the file code_for_Github.jl
. By default the code will create 100 lineups with a maximum overlap of 7 players between each lineup. To change this, see lines 26 and 29 in the file. For instance, if you want to create 10 lineups with a maximum overlap of 4 players, you change lines 26 and 29 to the following
num_lineups = 10
num_overlap = 4
By default, the code creates the lineup using the Type 4 formulation considered in the paper. To change this, see line 608 in the file. For instance, if you want to create lineups using the Type 5 formulation, you change line 608 to the folowing
formulation = one_lineup_Type_5
Lastly, you can change the path_skaters
, path_goalies
, and path_to_output
variables defined on line 32, 35, and 38 respectively. For instance, if you place goalies.csv
and skaters.csv
in your home directory, and would like the lineps to be outputted to a file output.csv
in your home directory, you would change the code to the following
path_skaters = "/users/home/skaters.csv"
path_goalies = "/users/home/goalies.csv"
path_to_output = "/users/home/output.csv"
where home
above is changed to correspond with your computers home directory.
Now that you have done this, you should be done. You should not need to change anything else in the file code_for_Github.jl
. Now you can build your own lineups!
We have made an attempt to describe the code in great detail, with the hope that you will use your expertise to build better formulations. Good luck!