This is the code for the paper Extended Formulations in Mixed Integer Conic Quadratic Programming by Juan Pablo Vielma, Iain Dunning, Joey Huchette and Miles Lubin. Bellow are instructions on how to re-run the computational experiments and how to generate the tables and graphics in the paper.
The code should generate similar results for similar versions. However, for the closest reproduction of the results we recommend using the specific versions noted above for all software except Julia (the latest release of version 0.3 should work ok).
In particular, you can force the use of the appropriate versions of JuMP, CPLEX.jl and Gurobi.jl by installing the latest release versions and calling
julia> Pkg.pin("JuMP",v"0.7.4")
julia> Pkg.pin("CPLEX",v"0.0.12")
julia> Pkg.pin("Gurobi",v"0.1.24")
You can download the code by calling
$ git clone https://github.com/juan-pablo-vielma/extended-MIQCP.git
You can alternatively download the code from https://github.com/juan-pablo-vielma/extended-MIQCP/releases
To run the complete set of experiments simply call run_experiments.jl with the name of the results file as the only argument. For instance, to save all results to new_results.csv call
$ julia run_experiments.jl new_results.csv
To run a partial set of experiments add the instance size and list of solvers. For instance, to run all experiments for n=30 and for CPLEX's and Gurobi's QCP solvers call
$ julia run_experiments.jl new_results.csv 30 CplexQcp GurobiQcp
Finally, to generate MPS files for all instances and reformulations call run_experiments.jl without any arguments.
Code for generating the tables can be found in the tables folder. To generate all tables simply call the code with the name of the results file as the only argument. For instance, to generate the tables from the papers results call
$ julia createtables.jl ../results.csv
To generate a custom table use as arguments: the result file name, instance size, instance class (Mark, Short or Robust) and the list of solvers. The code then generates two files named test_time.tex and test_quality.tex, which contain the tables. For instance calling
$ julia createtables.jl ../results.csv 30 Mark CplexQcp GurobiQcp
generates the tables for the Classical instances for n=30 and for CPLEX's and Gurobi's QCP solvers.
The code for generating the box plots can be found in the boxplot folder. The file makeboxplots.nb contains Mathematica code to generate the graphs.
The generation of performance profiles requires the perprof-py library and the luatex latex compiler. To generate the profiles call
$ julia createprofiles.jl
$ ./createprofiles.sh