An Entrants' code will be executed twice against each of the power system model scenarios of a dataset; once (with strict timing determined by TimeLimitInSeconds) to determine the base case solution and timing, and once to determine contingency solutions (without strict timing). Consequently, there are two versions of the code to satisfy these requirements: Code1, which produces the file solution1.txt; and Code2, which produces the file solution2.txt. The solution files must be created at the same directory level that the run commands are executed. The naming, invocation procedure, and other language dependencies are described below for each language supported. The language is chosen during the submission process, along with the dataset, Git Repository name and branch, and submission name and notes.
The following information is passed to both Code1 and Code2.
InFile1 = case.con (Contingency Description Data)
InFile2 = case.inl (Unit Inertia and Governor Response Data)
InFile3 = case.raw (Power Flow Raw Data)
InFile4 = case.rop (Optimal Power Flow Raw Data)
TimeLimitInSeconds = the amount of wall-clock time in seconds before the execution will be terminated. The value is either 600 (10 minutes) for Divisions 1 & 3, or 2,700 (45 minutes) for Divisions 2 & 4 when executing Code1. The value for Code2 is looser, intended only to stop runaway situations. It is currerently set, for all divisions, to 360,000 second (6,000 minutes; 100 hours). This may change in the future.
ScoringMethod = 1, 2, 3, or 4. One indicates Objective Function Scoring for Division 1 will be used, two indicates Objective Function Scoring for Division 2 will be used, three indicates Performance Profile Scoring for Division 3 will be used, and four indicates Performance Profile Scoring for Division 4 will be used.
NetworkModel = a 10 character string identifying the Network Model of the input files. These are the first ten characters of the Dataset Network Model folder name. This parameter was added 11/26/2018.
The file, submission.conf (all lower case), must be added to your GitHub repository. This text file permits additional control of the runtime environment. For additional hardware information see the Evaluation Platform page. All entries are optional and defaults are assumed if not specified. All entries are case sensitive. The current directives and their possible values (default underlined, options separated by |) are:
model = Network_Model_Name, where Network_Model_Name is one of the network model names belonging to a given dataset selected at submission. For example, one of the network models in the dataset T1S3_Real_Time is Network_12R-3. Example: model=Network_12R-3.
The alternative to model is model_realtime and/or model_offline (both may be used when running multiple divisions
Some form of model is required EXCEPT during a Trial or Final Event when the choice is made by the platform.
scenario = scenario_number, where scenario_number is a valid integer number of a scenario in the dataset selected by the model parameter above. For the case "model = Network_12R-3", the choice is 1, 2, or 3. The last part of the Network_Model_Name specifies the number of scenarios in the model—in this case 3. The letter "R" after the network number indicates that this is a Real-Time (Division 1 or 3) dataset. The letter "O" after the network number indicates that this is an Offline (Division 2 or 4) dataset. Example: scenario=3. scenario is required.
language = [cpp|EXE|GAMS|Java|Julia|MATLAB|Python] This choice is currently overridden by the Language option chosen during submission.
language_version = [2.7 | 3.7] for python
language_version = [0.6.4 | 0.7 | 1.0 ] for Julia
matpower_version = [6.0 | 7.0b1]
modules=python/2.7.13 Other modules are possible and will be discussed when needed.
srun_options = -p gpu -N 1 This allows access to a Competition standard (dual Xeon E5-2670 v3 (Haswell) CPUs, 24 cores per node) node with NVidia Tesla K-80 GPUs
mpi_library = [openmpi | intelmpi]
srun_options = [no defaults] For srun_options, anything valid on srun command line can be included. Most common are:
- srun -N 1 : get one complete node and manage cores
- srun -n 5 : get five cores
- srun -N 1 -n 5 : get five cores on the same node
- srun -N 3 -m cyclic : get three nodes, but just one core per node
- srun -N 3 -n 2 -m cyclic : get three nodes but just two cores per node
Java projects must be supplied with jar files for the main executable and dependent libraries. Be sure to use forward path separators (//), which is considered system independent on the Java platform, to create the solution files. All dependencies, with the exception of the suite of commercial libraries that are preinstalled (e.g., cplex, gurobi, mosek, etc.), must be included in the lib directory of your project (e.g., Ipopt). Projects are executed without network access so managed dependencies will be unreachable. Your code must take command line arguments which will specify the input data for the case being evaluated. The following commands will be executed with MyJava being the jar and package name while MyJava1 (Code1) and MyJava2 (Code2) are your submission codes packaged inside the provided jar file:
java -cp "MyJava.jar:lib/*" MyJava.MyJava1 InFile1 InFile2 InFile3 InFile4 TimeLimitInSeconds ScoringMethod NetworkModel >> MyJava1.log
java -cp "MyJava.jar:lib/*" MyJava.MyJava2 InFile1 InFile2 InFile3 InFile4 TimeLimitInSeconds ScoringMethod NetworkModel >> MyJava2.log
The GO Competition may be using GAMS version 26.1.0. Please contact the GO Operations Team to find out which solvers supported by GAMS are available.
It is recommended that Entrants wishing to use GAMS first process the input files with another language, e.g., Python, and invoke GAMS from within that language. The syntax that will be used for anyone selecting GAMS during submission is as follows:
gams MyGams1.gms --con=case.con --inl=case.inl --raw=case.raw --rop=case.rop --timelimit=[600 | 2700] --ScoringMethod=[0 | 1] --NetworkModel=model_name >> submission1.log
gams MyGams2.gms --con=case.con --inl=case.inl --raw=case.raw --rop=case.rop --timelimit=[600 | 2700] --ScoringMethod=[0 | 1] --NetworkModel=model_name >> submission2.logGAMS refers to this method of passing arguments as “double dash parameters”. The method of retrieving their values in a GAMS script is documented here: https://www.gams.com/latest/docs/UG_GamsCall.html#UG_GamsCall_DoubleDashParametersEtc_DoubleDashParam.
Submitted code will be executed with the commands
Julia -e ‘include(“MyJulia1.jl"); MyJulia1(InFile1, InFile2, InFile3, InFile4, TimeLimitInSeconds, ScoringMethod, NetworkModel)' &>MyJulia1.log
Julia -e ‘include(“MyJulia2.jl"); MyJulia2(InFile1, InFile2, InFile3, InFile4, TimeLimitInSeconds, ScoringMethod, NetworkModel)' &>MyJulia2.log
See the submission.conf section above for version options and how to select them.
Submitted code will be executed with the commands
python MyPython1.py InFile1 InFile2 InFile3 InFile4 TimeLimitInSeconds ScoringMethod NetworkModel >> MyPython1.log
python MyPython2.py InFile1 InFile2 InFile3 InFile4 TimeLimitInSeconds ScoringMethod NetworkModel >> MyPython2.log
The Python version currently installed is 2.7 and 3.7; the default is 3.7. To select 2.7 please follow the instructions in the submission.conf section above. If you require a different version, please send your request to the GO Operations Team.
Installed packages include scipy, numpy, cvxopt, mpi4py, pandas, pyomo, and sympy. In addition, numba and pandapower are installed for 3.7.
The GO Competition may be using MATLAB as a submission language. The MATLAB Parallel Server with up to 144 workers (6 nodes with 24 cores each) is available.
Submitted code will be executed from inside a master MATLAB script that, for each scenario dataset, the master script issues the command
MyMatlab1(InFile1, InFile2, InFile3, Infile4, TimeLimitInSeconds, ScoringMethod, NetworkModel)
MyMatlab2(InFile1, InFile2, InFile3, Infile4, TimeLimitInSeconds, ScoringMethod NetworkModel)
If you are protecting your code in .p format (recommended), use a shell MyMatlab1/2.m to invoke your .p script.
The MATLAB version that may be used is R2019b.
The MATLAB PATH variable includes all the MATPOWER code (see submission.conf above for version information) and links to CPLEX, CVX, and Gurobi, solvers.
Other open source libraries may be included upon request to the GO Operations Team.
C++ submissions must provide MyCpp1.cpp, MyCpp2.cpp, and a makefile that generates executables MyExe1 and MyExe2 from sources and libraries.
Before execution the command "make all" is issued, then the code will be executed with the commands
./MyExe1 InFile1 InFile2 InFile3 InFile4 TimeLimitInSeconds ScoringMethod NetworkModel >> MyExe1.log
./MyExe2 InFile1 InFile2 InFile3 InFile4 TimeLimitInSeconds ScoringMethod NetworkModel >> MyExe2.log
Linux binary executables
The executables must be named MyExe1 and MyExe2. The invocations are the same as C++, with parameters being passed via command line arguments.
If you have any issues, please contact the GO Operations Team.