Pre-print is available on arXiv.
- Armadillo (Version 9.6 or later recommended. Minimum 8.5 required.)
- Gurobi (Version 8.1 or later)
- gcc/g++ (Tested on version 4.8. Must support C++11 and be compatible with your version of Gurobi)
sudo apt install gccwill install gcc/g++ on an Ubuntu machine.
- GNU make
sudo apt install makewill install GNU make on an Ubuntu machine.
- Boost Required for logging, commandline interface to solve files etc. Can produce a boost-free version if there is significant interest.
Recommended but not mandatory for the algorithm. (Some examples might have these dependancies)
- Rapid JSON To export results and save example problem instances.
- DOxygen Only if you need documentation.
sudo apt install doxygenwill install DOxygen on an Ubuntu machine.
Getting the documentation
One can generate two versions of documentation for this project..
- Use the simple version of documentation, if you are only interested in using this as a predefined library which you don't intend to edit. This version of the documentation gives a sufficiently detailed explanation of every class or function you might every have to use. To avail this version, run
- Use the complete documentation if you are interested in every implementation detail of the code.This gives a complete description of every private member and fields in every class, all of which might be useful if you want to edit the code in here. To avail this version, run
- You can alternatively use the online documentation
- Enter the path where you downladed in
EPEC_HOME. This folder should contain folders like
- Enter the path to Boost in
BOOST_HOME. Ensure that the path to corresponding include files and boost libraries are correct.
- Enter the path of your armadillo-installation in the line defining the variable
ARMA. Typically, the location would be like
- Enter the path of your Gurobi-installation in the line defining the variable
GUR. Typically, the location would be like
make installto make the necessary folders to store temporary files, binary files etc.
make compileEPECto compile.
- Optionally run
make EPECtestto run the set of unit tests. It should all succeed without a problem.
maketo create the binary.
./bin/EPEC -hto get a list of command line options with which you can run the executable.
- You will find two configurations.
ROSSOBIANCOrepresents the remote server one, while the other is the local one.
ARMA_LIBto your customized folders.
GUROBI_PATH_%OSto your local gurobi path (and version). Note that %OS corresponds to your local (or remote) operatin system.
EPECSolve has a command line interface built on top of the standard modeling paradigm (see documentation for src/Models.cpp).
Once the executable is compiled via
make compileEPEC, the user can run EPECSolve with:
The following I/O options are available:
-i (--input) PathToInstance: This required option specifies the path to the JSON instance file. Extension .json is automatically appended to the argument.
-s (--solution) PathAndFile: Sets the output (path) filename of the JSON solution file, if any (see option
-w. (writelevel). If a JSON output is required, extension .json is automatically appended to the argument.
-l (--log) PathAndFile: Sets the output path/filename of the log file.
-w (--writelevel) intValue: Sets the verbosity parameter for the output solution file. 0: output only a JSON solution file (if any). 1 Only a human readable file. 2 Both.
-m (--message) intValue: Sets the verbosity parameter for the program itself. 1: only info messages, 2 info and debug, 3 info, debug and trace messages.
-a (--algorithm) intValue: Specifies the type of algorithm employed to solve the instance. 0 is fullEnumeration, 1 is innerApproximation, 2 is combinatorialPNE. Note that the latter only works with pure equilibria.
-p (--pure) intValue: Specifies whether the algorithm should seek for a pure equilibrium or not (note that combinatorialPNE will always seek for a pure solution) . 0 no requirement (either pure or mixed), 1 only pure.
-bigM intValue: Specifies the whether LCP problems should be formulated with a LCP. 0 (default) for indicator constraints, 1 for bigM formulation.
-b (--bound) intValue: Specifies if the final LCP model should be bounded by a bigM constant (see option
-boundBigM) in their primal variables. 0 no bounding, 1 bounding with bigM.
-boundBigM intValue: Specifies the bigM constant for the above param (see option
-t (--threads) intValue: Specifies the number of threads Gurobi uses.
-tl (--timelimit) intValue: Specifies the timeLimit (in seconds) for running the whole algorithmic procedure.
Algorithmic parameters tailored on innerApproximation:
-ad (--add) intValue: Specifies the EPECAddPolyMethod strategy employed to expand the inner approximation when no information about deviations is available. 0 add polyhedra in lexographic order, 1 reverse lexographic, 2 random.
-ag (--aggr) intValue: Specifies the EPECAddPolyMethod aggressivity (see option
-ad (--add)). int specifies the number of lower-level polyhedra to be added to each Stackelberg leader at each iteration in which EPECAddPolyMethod is triggered.
-r (--recover) intValue: Specifies the recover stragegy for the innerApproximation method. When the algorithm finds a mixed equilibrium and the parameter
-p (--pure)is set to 1, the algorithm will search for a pure equilibrium either by randomly expanding the inner approximation (EPECAddPolyMethod) or by triggering a combinatorialPNE procedure warmstarted with the current information. 0 sets the recover strategy to incrementalEnumeration, 1 sets it to combinatorial.