Software and Operational Research
Unit Commitment Instance Generator
This page describes uicg, a random generator of “realistic” instances of the hydro-thermal Unit Commitment problem in electric power generation. The generator has been used for the experimental result presented in the papers:
A. Borghetti, A. Frangioni, F. Lacalandra, C.A. Nucci, “Lagrangian Heuristics Based on Disaggregated Bundle Methods for Hydrothermal Unit Commitment”, IEEE Trans. on power systems, Vol. 18, no., pp 313-323, 2003
A. Borghetti, A. Frangioni, F. Lacalandra, C.A. Nucci, P. Pelacchi, “Using of a cost-based Unit Commitment algorithm to assist bidding strategy decisions”, 2003 IEEE Bologna Power Tech Conference, June 23th-26th, Bologna, Italy.
These papers describe also the model of unit commitment which the instance generator refers to.
A special thanks to Fabrizio Lacalandra, that give to me the original AMPL code, and Antonio Frangioni, that has revised the code and the documentation.
The unit commitment instance generator ucig is a simple c++ program composed by a unique source file ucig.cpp.
For this reason the compilation is very easy and don't need particular attention. For example, under linux it's sufficient the following command:
gcc ucig.cpp -o ucig
Under windows the compilation depends by the development tools. With the Visual C++ 6.0 it's enough to create a new empty project of kind “win 32 console application”, add ucig.cpp in the project and to compile.
The only possibly tricky part is about the ability of the generator to output the instances in XML format (see the -- Xml option below); this requires the xerces open-source XML library, that need to be present in the system and properly linked to the executable. Since a plain text output option is also available which does not require xerces at all, the C macro HAVE_XML_OUTPUT is defined at the beginning of the file; leaving it to the default value 0 disables XML output and does not require linking with the XML library, setting it to a nonzero value enables XML output and requires the XML library.
In the following, the compiled program will be called ucig.
Ucig is a simple program callable by command line with the following syntax:
ucig [-h | --help] | [--Ic <integer>] [--Gg <integer>] [--Breaks <integer>] [--Gmax <integer>] [--Imax <integer>] [--Cmax <integer>] [--Seed <integer>] [--CSC <integer>] [--Xml <integer>] [--AMin <double>] [--AMax <double>] [--Difficulty <integer>]
Ic is the number of instance to be generate, 0 for MAXINT.  Gg is the number of days of horizon.  Breaks is the number of subdivisions for each day.  Gmax is the number of thermals units.  Imax is the number of hydro units.  Cmax is the number of hydro cascade units.  Seed is the seed for the random generator number.  CSC 1 for constant start up cost, 0 otherwise.  Xml 1 the produced result is in xml format, 0 in textual format.  Amin is the minimum value of the quadratic coefficient for thermal units: typical range [0.0001,0.0005]. [1e-005] Amax is the maximum value of the quadratic coefficient for thermal units: typical range [0.001,0.05]. [0.1] Difficulty is the Difficulty-Level (1 or 2 or 3) of the output data file. 
Note that at the end of each lines the default parameters is shown enclosed in squared bracket.
The source code is available here. The manual here.