KNITRO¶
Initial setup¶
from pyoptinterface import knitro
model = knitro.Model()
You need to follow the instructions in Getting Started to set up the optimizer correctly.
If you want to manage the license of KNITRO manually, you can create a knitro.Env object and pass it to the constructor of the knitro.Model object, otherwise a check of the license will be performed when initializing the knitro.Model object.
env = knitro.Env()
model = knitro.Model(env)
For users who want to release the license immediately after the optimization, you can call the close method of all models created and the knitro.Env object.
env = knitro.Env()
model = knitro.Model(env)
# do something with the model
model.close()
env.close()
The capability of knitro.Model¶
Supported constraints¶
Supported model attribute¶
Attribute |
Get |
Set |
|---|---|---|
Name |
❌ |
❌ |
ObjectiveSense |
✅ |
✅ |
DualStatus |
❌ |
❌ |
PrimalStatus |
✅ |
❌ |
RawStatusString |
✅ |
❌ |
TerminationStatus |
✅ |
❌ |
BarrierIterations |
✅ |
❌ |
DualObjectiveValue |
❌ |
❌ |
NodeCount |
✅ |
❌ |
NumberOfThreads |
✅ |
✅ |
ObjectiveBound |
✅ |
❌ |
ObjectiveValue |
✅ |
❌ |
RelativeGap |
✅ |
❌ |
Silent |
❌ |
✅ |
SimplexIterations |
❌ |
❌ |
SolverName |
✅ |
❌ |
SolverVersion |
✅ |
❌ |
SolveTimeSec |
✅ |
❌ |
TimeLimitSec |
✅ |
✅ |
Supported variable attribute¶
Attribute |
Get |
Set |
|---|---|---|
Value |
✅ |
❌ |
LowerBound |
✅ |
✅ |
UpperBound |
✅ |
✅ |
Domain |
✅ |
✅ |
PrimalStart |
❌ |
✅ |
Name |
✅ |
✅ |
IISLowerBound |
❌ |
❌ |
IISUpperBound |
❌ |
❌ |
ReducedCost |
✅ |
❌ |
Supported constraint attribute¶
Attribute |
Get |
Set |
|---|---|---|
Name |
✅ |
✅ |
Primal |
✅ |
❌ |
Dual |
✅ |
❌ |
Solver-specific operations¶
Parameters¶
For solver-specific parameters, we provide get_raw_parameter and set_raw_parameter methods to get and set the parameters.
model = knitro.Model()
# Set the value of a parameter by name
model.set_raw_parameter("algorithm", 1)
model.set_raw_parameter("feastol", 1e-8)
model.set_raw_parameter("opttol", 1e-8)
# Set the value of a parameter by ID (using knitro.KN constants)
model.set_raw_parameter(knitro.KN.PARAM_MAXIT, 1000)
We also provide knitro.KN to contain common constants from the KNITRO C API.
# Using constants for parameter IDs
model.set_raw_parameter(knitro.KN.PARAM_FEASTOL, 1e-6)
# Algorithm selection
model.set_raw_parameter(knitro.KN.PARAM_NLP_ALGORITHM, knitro.KN.NLP_ALG_BAR_DIRECT)
# Output level
model.set_raw_parameter(knitro.KN.PARAM_OUTLEV, knitro.KN.OUTLEV_ITER)
# MIP parameters
model.set_raw_parameter(knitro.KN.PARAM_MIP_METHOD, knitro.KN.MIP_METHOD_BB)
model.set_raw_parameter(knitro.KN.PARAM_MIP_OPTGAPREL, 1e-4)
Variable and Constraint Properties¶
Common variable and constraint properties are provided through PyOptInterface dedicated methods:
Variable methods:
Bounds:
set_variable_lb,get_variable_lb,set_variable_ub,get_variable_ubType and name:
set_variable_name,get_variable_name,set_variable_domainStarting point:
set_variable_startSolution values:
get_value,get_variable_rc
Constraint methods:
Name:
set_constraint_name,get_constraint_nameSolution values:
get_constraint_primal,get_constraint_dual
Usage examples:
Variable properties:
# Bounds
model.set_variable_lb(variable, 0.0)
lb = model.get_variable_lb(variable)
model.set_variable_ub(variable, 10.0)
ub = model.get_variable_ub(variable)
# Type and name
model.set_variable_name(variable, "x")
name = model.get_variable_name(variable)
# Starting point
model.set_variable_start(variable, 1.0)
# Solution values
value = model.get_value(variable)
rc = model.get_variable_rc(variable)
Constraint properties:
# Name
model.set_constraint_name(constraint, "c1")
name = model.get_constraint_name(constraint)
# Solution values
primal = model.get_constraint_primal(constraint)
dual = model.get_constraint_dual(constraint)
Support for KNITRO callbacks¶
Unfortunately, KNITRO’s callback interface is not supported in PyOptInterface at the moment.