Luigi Poderico


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:

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.

Using 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. [1]
Gg      is the number of days of horizon. [1]
Breaks  is the number of subdivisions for each
day. [24]
Gmax    is the number of thermals units. [10]
Imax    is the number of hydro units. [10]
Cmax    is the number of hydro cascade units. [0]
Seed    is the seed for the random generator
number. [0]
CSC     1 for constant start up cost, 0 otherwise.
Xml     1 the produced result is in xml format, 0 in
textual format. [0]
Amin    is the minimum value of the quadratic
coefficient for thermal units: typical range [0.0001,0.0005].
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. [1]

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.