Optimizing Performance
Background
Before discussing performance, it is useful to understand the structure of the PLEXOS simulation engine. This is illustrated here.
The engine separates the 'business logic' from the mathematical
programming. The Simulation Core contains all the logic to model a
power system, whereas the AMMO component deals entirely with
mathematical objects, and integrates tightly with the solver(s)(see
below).
The total simulation time is thus a combination of the time spent in
the simulation logic plus the time spent in the mathematical solver.
In general the solver accounts for between 60 - 99% of the total
simulation time. With the Performance
Summary diagnostic switched on, the simulation and solver
performance is summarized at the end of each simulation phase in the
log file as in the following example:
---------------------------------------------------------------------------- Component Time (sec.) Contrib. (%) ---------------------------------------------------------------------------- Setup..................................... 0:00:04.629 2.92 % Modify.................................... 0:00:04.375 2.76 % Solver:................................... 0:02:25.767 91.83 % ---------------------------------------------------------------------------- - Interior Point......................... 0:00:00.474 0.33 % - Dual Simplex........................... 0:00:07.280 4.99 % - MIP.................................... 0:02:18.012 94.68 % ---------------------------------------------------------------------------- Solution.................................. 0:00:02.838 1.79 % Write..................................... 0:00:00.112 0.07 % Other..................................... 0:00:01.010 0.64 % ---------------------------------------------------------------------------- Peak Memory............................... 307.42 MB Current Memory............................ 251.69 MB ----------------------------------------------------------------------------
In this example the time in the solver was nearly 92% of the overall simulation time. The other items in this report refer to:
- Setup: time spent creating the mathematical programming formulation
- Modify: time spent updating the formulation between simulation steps or samples
- Monitor: Time spent checking and enforcing constraints that are 'monitored' rather than being loaded 'upfront'
- Solution: Time spent calculating solution properties
- Write: Time spent writing solution data to the solution database
Solver and Settings
The AMMO component of PLEXOS supports several solvers. See Performance Solver for details.
It is not easy to predict with certainty solver performs 'best', because the solvers all perform differently depending on the size, type, and complexity of the problem, and the solvers are subject to continuous improvement from version to version. Thus it is best to test the available alternatives and chose the solver that performs best on your problems.
A range of solver-related options are available via the Performance object as shown in the following figure.
The default solver settings will perform best on the majority of problems. You should only change these settings with the help and advice of your support representative.
As a general guide however, the following are some occasions where you might need to change the default settings:
- You are running a very large number of small optimization problems in parallel. For example you might be running 100s or 1000s of Monte Carlo simulations where each simulation is relatively small and Stochastic Method = "Parallel". In this case it can be an advantage to run Dual Simplex only and avoid the overhead of the Concurrent solver. Try setting the Small LP Nonzero Count parameter to a value larger than the number of non-zeros in your problem and the Small LP Optimizer to "Dual Simplex". Alternatively set LP Threads = 1 which will force the use of Simplex.
- For mixed integer programming problems the default gap of 0.01% can be adjusted to improve speed at potential cost of accuracy. See Performance MIP Relative Gap for details. It is common to run gaps between 0.05 - 0.1% however you should check your case for the appropriateness of these settings.
Customizing Solver Parameters
Even though popular linear programming solution methods like simplex or Barrier (Interior) are developed, tested and documented for a wide variety of optimization problems, these methods can show significant performance differences depending on the selection of (many) configuration parameters. When it comes to MIP, non-polynomial execution times are expected for NP-hard problems like the Unit Commitment problem. Solver developers may offer a series of default values. Most relevant, like algorithm selection, target MIP gap and Max Execution time can be configured using PLEXOS Performance objects (as screens above). Excluding some few exceptions, PLEXOS doesn't change the default settings for many other configuration parameters available in most of the commercial solvers. If the user desires to extend the configuration parameters available in the Performance object, he/she can use a special performance configuration xml file. It is strongly recommended some experience before changing the default settings as they can seriously affect performance. The structure of the XML is shown below. An xml syntax example is also included above.
- Create an XML file called: PLEXOS_SolverParam.xml. This exact name is mandatory.
- Fill the xml fields specifying the following mandatory tags:
- ParameterNames: Parameter name (string) as in the solvers parameter list.
- Type: Type of configuration parameter (e.g. Double, Integer)
- Value: Parameter new value (be careful to introduce allowed values!)
- Save file in the same location as the input database. This file is optional. DO NOT copy it in the PLEXOS installation folder.
Each solver has it's own set of parameter and intrinsic nomenclature, so it is recommended to visit the solver's webpage before creating your own performance file.
XML Advanced Custom Solver Performance File Example
The following xml code shows how to activate solution polisher after 1000secs in CPLEX (disabled by default).
<?xml version="1.0" standalone="yes"?> <SolverParam xmlns="http://tempuri.org/SolverParam.xsd"> <CPLEX> <ParameterName> CPX_PARAM_POLISHAFTERTIME </ParameterName> <Type>Double</Type> <Value>1000.0</Value> </CPLEX> </SolverParam>