Languages

An Entrants' code may 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 may to be two versions of the code to satisfy these requirements: version1, which produces the file solution1.txt; and version2, which produces the file solution2.txt. Alternatively, version1 may produce both solution files, in which case version2 is not executed (but a file named version2, even if empty, must be available in the repository for download; existance checking is done before execution). 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 version1 and version2.

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 time 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 version1. The values for version2 will be looser, intended only to stop runaway situations, and are yet to be determined; possibly 6,000 (100 minutes) or 27,000 (450 minutes) instead of 600 or 2,700 when executing version1.

ScoringMethod = 0 or 1,  zero indicates Objective Function Scoring (Divisions 1 & 2) will be used, one indicates Performance Profile Scoring (Divisions 3 & 4) will be used.

NetworkModel = a 10 character string identifying the Network Model of the input files. These are the first ten characaters of the Dataset Network Model folder name. This  parameter was added 11/26/2018.

 

Java/Scala

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, expressmp), 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 and MyJava2 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

and, if no solution2.txt file exits,

java -cp "MyJava.jar:lib/*" MyJava.MyJava2 InFile1 InFile2 InFile3 InFile4 TimeLimitInSeconds ScoringMethod NetworkModel
>> MyJava2.log

GAMS

The GO Competition may be using GAMS version 25.0.3. All solvers supported by GAMS may be 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

and, if no solution2.txt file exists,

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.log

GAMS 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.

Julia/JuMP

Submitted code will be executed from inside a master Julia script that invokes MyJulia1 for a small dataset (untimed) in order to get the code compiled. Then, for each scenario dataset the master script issues the command

MyJulia1(InFile1 InFile2 InFile3 InFile4 TimeLimitInSeconds ScoringMethod NetworkModel)

and, if no solution2.txt file exits,

MyJulia2(InFile1 InFile2 InFile3 InFile4 TimeLimitInSeconds ScoringMethod NetworkModel)

The GO Competition is currently using Julia version 0.6.4 with Ipopt version 0.4.2 (3.12.10), Complementarity version 0.4.0, and JuMP version 0.18.4. The nlp.jl routine in JuMP 0.18.4 has been modified to allow a solution to be returned even if the solution is infeasible. This feature is supposed to be in JuMP 0.19.0. 

The GO Competition has a version of Julia 1.0 but there are comptatibility issues with some solvers. Until these are resolved version 0.6.4 remains in use. If you need Julia 1.0 please contact the GO Operations Team.

Python

Submitted code will be executed with the commands

python MyPython1.py InFile1 InFile2 InFile3 InFile4 TimeLimitInSeconds ScoringMethod NetworkModel >> MyPython1.log

and, if no solution2.txt file exits,

python MyPython2.py InFile1 InFile2 InFile3 InFile4 TimeLimitInSeconds ScoringMethod NetworkModel >> MyPython2.log

The Python version currently installed is 2.7.5. If you require a different version, please send your request to the GO Operations Team.

MATLAB/MATPOWER

The GO Competition may be using MATLAB as a submission language.

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)

and, if no solution2.txt file exits,

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 R2018b and includes the following additional programs:

  • Simulink
  • Control System Toolbox
  • Global Optimization Toolbox
  • Optimization Toolbox
  • Parallel Computing Toolbox
  • Signal Processing Toolbox
  • Simscape
  • Simscape Power Systems
  • Statistics and Machine Learning Toolbox

The MATLAB PATH variable includes all the MATPOWER 6.0 code and links to CPLEX, CVX, Gurobi, and xpressmp solvers.

Other open source libraries may be included upon request to the GO Operations Team.

C/C++

C++ submissions must provide MyCpp1.cpp, MyCpp2.cpp, and a makefile that generates executables MyCpp1 and MyCpp2 from sources and libraries.

Before execution the command "make all" is issued, then the code will be executed with the commands

./MyCpp1 InFile1 InFile2 InFile3 InFile4 TimeLimitInSeconds ScoringMethod NetworkModel >> MyCpp1.log

and, if no solution2.txt file exits,

./MyCpp2 InFile1 InFile2 InFile3 InFile4 TimeLimitInSeconds ScoringMethod NetworkModel >> MyCpp2.log

Linux binary executables

A Docker container with the evaluation platform environment (less any licensed software) is available for download for building and testing your executable. Instructions are available under the References/Docker tab.

The executeables must be named MyExe1 and MyExe2. The invocations are the same as C++ except for the executable name, with parameters being passed via command line arguments.

 

If you have any issues, please contact the GO Operations Team.