7.5 Setting solver parameters¶
MOSEK comes with a large number of parameters that allows the user to tune the behavior of the optimizer. The typical settings which can be changed with solver parameters include:
choice of the optimizer for linear problems,
choice of primal/dual solver,
turning presolve on/off,
turning heuristics in the mixed-integer optimizer on/off,
level of multi-threading,
feasibility tolerances,
solver termination criteria,
behaviour of the license manager,
and more. All parameters have default settings which will be suitable for most typical users.
The API reference contains:
Setting parameters
Each parameter is identified by a unique name. There are three types of parameters depending on the values they take:
Integer parameters. They take either either simple integer values or values from an enumeration provided for readability and compatibility of the code. Set with
Task.put_int_param
.Double (floating point) parameters. Set with
Task.put_dou_param
.String parameters. Set with
Task.put_str_param
.
There are also parameter setting functions which operate fully on symbolic strings containing generic command-line style names of parameters and their values. See the example below. The optimizer will try to convert the given argument to the exact expected type, and will error if that fails.
If an incorrect value is provided then the parameter is left unchanged.
For example, the following piece of code sets up parameters which choose and tune the interior point optimizer before solving a problem.
Reading parameter values
The functions Task.get_int_param
, Task.get_dou_param
, Task.get_str_param
can be used to inspect the current value of a parameter, for example:
let param = task.get_dou_param(Dparam::INTPNT_CO_TOL_REL_GAP)?;
println!("Current value for parameter intpnt_co_tol_rel_gap = $param");