//]]>
A number of hidden or 'undocumented' control parameters are available, specific to the version of the simulator. These parameters allow access to certain controls and features that are not available through the user interface. This is often done as a way of providing new features to customers without changing the user interface, and these features may later be included in an updated software version or remain as hidden parameters.
The parameters can be accessed via a special parameters XML file called "PLEXOS_Param.xml". The file should be placed in the same folder as the input file for the executing Model.
The basic structure of the file is as a list of parameters by name and their value, and in some cases a band number. The file must always begin with the following lines:
<?xml version="1.0" standalone="yes"?>
<UndocumentedParam xmlns="http://tempuri.org/UndocumentedParam.xsd">
and end with this line:
</UndocumentedParam>
Between these lines are blocks of parameter, value pairs in the following format:
<Class>
<ParameterName> Name </ParameterName>
<Value> value </Value>
</Class>
Class and Name must not contain spaces. For example the class "LT Plan" is written " LTPlan". The parameter values are generally numeric but can be text where allowed.
Each version of PLEXOS has a different set of parameter reference. The Hidden Parameters List provides details about these hidden parameters.
This example applies to PLEXOS 6.208 and sets the weight of each stochastic sample according to the example described in the Variable topic:
<?xml version="1.0" standalone="yes"?>
<UndocumentedParam xmlns="http://tempuri.org/UndocumentedParam.xsd">
<Stochastic>
<ParameterName> SampleWeightingMethod </ParameterName>
<Value> 1 </Value>
</Stochastic>
<Stochastic>
<ParameterName> SampleWeight </ParameterName>
<Value> 0.025 </Value>
<Band> 1 </Band>
</Stochastic>
<Stochastic>
<ParameterName> SampleWeight </ParameterName>
<Value> 0.2125 </Value>
<Band> 2 </Band>
</Stochastic>
<Stochastic>
<ParameterName> SampleWeight </ParameterName>
<Value> 0.525 </Value>
<Band> 3 </Band>
</Stochastic>
<Stochastic>
<ParameterName> SampleWeight </ParameterName>
<Value> 0.2125 </Value>
<Band> 4 </Band>
</Stochastic>
<Stochastic>
<ParameterName> SampleWeight </ParameterName>
<Value> 0.025 </Value>
<Band> 5 </Band>
</Stochastic>
</UndocumentedParam>
The undocumented parameters file also allows any attribute of any simulation object that is currently enabled in a model to be modified by specifying attribute information in "PLEXOS_Param.xml".
Attribute information in "PLEXOS_Param.xml" uses the following format:
<Attributes>
<Class> Horizon </Class>
<Name> Base </Name>
<Attribute> Chrono Step Count </Attribute>
<Value> 52 </Value>
</Attributes>
Where <Class> specifies the class of the simulation object, <Name> uniquely identifies the object of type Class which is being modified, <Attribute> specifies the attribute which is being modified, and <Value> specifies the value the attribute is being changed to.
In the above example the chronological step count is changed to 52 for the Horizon object called Base.
The full list of all attributes that can be changed can be found in the table "t_attribute" in the file "master.mdb" which is located in the install directory of PLEXOS. All Classes are detailed in the "class_id" column and all attributes are detailed in the "name" column.
Please note the following:
Caution is advised when changing attributes as some might require other attributes to be modified that might not be obvious at first.
The Performance class exposes only the most basic solver parameters. To set other more detailed settings you may use the "PLEXOS_SolverParam.xml" file. The file should be placed in the same folder as the input file for the executing Model.
The basic structure of the file is as a list of parameters identified by solver name, parameter name and value. The file must always begin with the following lines:
<?xml version="1.0" standalone="yes"?>
<SolverParam xmlns="http://tempuri.org/SolverParam.xsd">
and end with this line:
</SolverParam >
Between these lines are blocks of parameter, value pairs in the following format:
<Solver>
<ParameterName> Name </ParameterName>
<Type> Type </Type>
<Value> value </Value>
</Solver>
Solver and Name must not contain spaces.
The following are examples with comments describing their purpose.
<?xml version="1.0" standalone="yes"?>
<SolverParam xmlns="http://tempuri.org/SolverParam.xsd">
<!-- =========================== CPLEX =========================== -->
<!-- Advanced start switch: Set 2 will force CPLEX to store and use incumbent instead of
initial solution provided by PLEXOS. Use it only if you are sure -->
<CPLEX>
<ParameterName> CPX_PARAM_ADVIND </ParameterName>
<Type>Integer</Type>
<Value>2</Value>
</CPLEX>
<!-- Repeat Presolve. Parameters (change it to 3 for aggressive presolve after root node):
CPX_PARAM_REPEATPRESOLVE=-1 (auto)
CPX_PARAM_REPEATPRESOLVE=0 (off)
CPX_PARAM_REPEATPRESOLVE=1 (wout cuts)
CPX_PARAM_REPEATPRESOLVE=2 (w cuts)
CPX_PARAM_REPEATPRESOLVE=3 (w cuts and new root)
-->
<CPLEX>
<ParameterName> CPX_PARAM_REPEATPRESOLVE </ParameterName>
<Type>Integer</Type>
<Value>3</Value>
</CPLEX>
<!-- FORCE CPLEX CONCURRENT ROOT NODE: -->
<CPLEX>
<ParameterName> CPX_PARAM_STARTALG </ParameterName>
<Type>Integer</Type>
<Value>6</Value>
</CPLEX>
<!--BALANCED MIP EMPHASIS: -->
<CPLEX>
<ParameterName> CPX_PARAM_MIPEMPHASIS </ParameterName>
<Type>Integer</Type>
<Value>0</Value>
</CPLEX>
<!--POLISH SOLUTION AFTER 1% GAP-->
<CPLEX>
<ParameterName> CPX_PARAM_POLISHAFTEREPGAP </ParameterName>
<Type>Double</Type>
<Value>0.01</Value>
</CPLEX>
<!--POLISH SOLUTION AFTER 6000 secs-->
<CPLEX>
<ParameterName> CPX_PARAM_POLISHAFTERTIME </ParameterName>
<Type>Double</Type>
<Value>6000.0</Value>
</CPLEX>
</SolverParam>
1. The solver parameters file also allows access to certain controls of any solver by specifying diagnostic undocumented parameters in "PLEXOS_SolverParam.xml" using the following format:
<Diagnostic>
<ParameterName> RelaxationTime </ParameterName>
<Type>Double</Type>
<Value>1</Value>
</Diagnostic>
In this example, RelaxationTime is a time limit should only be used when the solver is attempting to repair the relaxed MIP problem (after an infeasibility reported).
2. The solver parameters file allows users to specify specific Phases or Models if required, such as LT Phase or Base Model. Users can specify the Phases and Models using the format mentioned below:
<CPLEX>
<ParameterName> CPX_PARAM_ADVIND </ParameterName>
<Type>Integer</Type>
<Value>2</Value>
<PHASE>LT</PHASE>
</CPLEX>
<CPLEX>
<ParameterName> CPX_PARAM_ADVIND </ParameterName>
<Type>Integer</Type>
<Value>2</Value>
<MODEL>Base</MODEL>
</CPLEX>
NOTE: The Phase and Model parameters are not required to be specified, unlike the ParameterName, Type, Value data. Also, the PHASE data should be entered as:
The generic writer can also be enabled via the PLEXOS solver parameter file. By default the Generic Writer is disabled, but can be easily enabled via a diagnostic undocumented parameter, for example:
<Diagnostic>
<ParameterName> UseGenericWriter </ParameterName>
<Type>Boolean</Type>
<Value>True</Value>
</Diagnostic>
The options/settings of the generic writer can be updated using the " GenericWriter" parameters, for example:
<GenericWriter>
<ParameterName> Name </ParameterName>
<Type>Type</Type>
<Value>value</Value>
</GenericWriter>
The definition of these tags are as follows:
Note that the Name must not contain spaces.
Example 1 presents all parameters for Generic Writer with comments describing their purpose and default values. Example 2 shows how to set the parameters For Solvers and For Generic Writer together.
The following section lists all parameters for the "Generic Writer" with comments describing their purpose and default values.
<?xml version="1.0" standalone="yes"?>
<SolverParam xmlns="http://tempuri.org/SolverParam.xsd">
<!-- =========================== For any solver =========================== -->
<!-- Use Generic Writer or not-->
<Diagnostic>
<ParameterName> UseGenericWriter </ParameterName>
<Type>Boolean</Type>
<Value>False</Value>
</Diagnostic>
<!-- [Only valid when UseGenericWriter is True.] sort row and columns based on alpha-beta or not.-->
<GenericWriter>
<ParameterName> SortRowColNames </ParameterName>
<Type>Boolean</Type>
<Value>False</Value>
</GenericWriter>
<!-- [Only valid when UseGenericWriter is True.] standardize row and column names or not by replacing any spaces and '-' with '_' -->
<GenericWriter>
<ParameterName> StandardizeNames </ParameterName>
<Type>Boolean</Type>
<Value>False</Value>
</GenericWriter>
<!-- [Only valid when UseGenericWriter is True and only perform in .lp file] range: [0, inf), if Math.ab(value) < ZeroToleranceLP, the value will be truncated to be Zero.-->
<GenericWriter>
<ParameterName> ZeroToleranceLP </ParameterName>
<Type>Double</Type>
<Value>0</Value>
</GenericWriter>
<!-- [Only valid when UseGenericWriter is True and only perform in .sol file] range: [0, inf), similar with ZeroToleranceLP.-->
<GenericWriter>
<ParameterName> ZeroToleranceSol </ParameterName>
<Type>Double</Type>
<Value>0</Value>
</GenericWriter>
<!-- [Only valid when UseGenericWriter is True and only perform in .lp file] range: [0, 15], for a non-zero value, if its Math.abs(val) < Math.Pow(10, -PreciseDigitLP), Then, use Scientific way to present value.
If it is set outside the range, then it will be assigned with default value. -->
<GenericWriter>
<ParameterName> DecimalPlaceLP </ParameterName>
<Type>Integer</Type>
<Value>6</Value>
</GenericWriter>
<!-- [Only valid when UseGenericWriter is True and only perform in .sol file] range: [0, 15], similar with PreciseDigitLP.-->
<GenericWriter>
<ParameterName> DecimalPlaceSol </ParameterName>
<Type>Integer</Type>
<Value>6</Value>
</GenericWriter>
<!-- [Only valid when UseGenericWriter is True] Strip model name nor not.-->
<GenericWriter>
<ParameterName> StripModelName </ParameterName>
<Type>Boolean</Type>
<Value>False</Value>
</GenericWriter>
<!-- [Only valid when UseGenericWriter is True] Writes the LP files out in algebraic form.-->
<GenericWriter>
<ParameterName> Algebraic </ParameterName>
<Type>Boolean</Type>
<Value>True</Value>
</GenericWriter>
</SolverParam>
If you want to set both For Solvers and For Generic Writer parameters, then you should put all the parameters you want to set into the same "PLEXOS_SolverParam.xml" file. For example:
<?xml version="1.0" standalone="yes"?>
<SolverParam xmlns="http://tempuri.org/SolverParam.xsd">
<Diagnostic>
<ParameterName> UseGenericWriter </ParameterName>
<Type>Boolean</Type>
<Value>True</Value>
</Diagnostic>
<GenericWriter>
<ParameterName> SortRowColNames </ParameterName>
<Type>Boolean</Type>
<Value>True</Value>
</GenericWriter>
</SolverParam>