Optimization options to solve properly

Why options?

Optimization options refer to the various settings and parameters that can be used to customize the behavior of an optimization solver. These options can be used to improve the quality of the solutions, increase the speed of the optimization process, or control the trade-off between solution quality and computational effort.

Here are some examples of optimization options and their importance:

  • Algorithm selection: Optimization solvers typically offer multiple algorithms that can be used to solve the same optimization problem. The choice of algorithm can have a significant impact on the speed and quality of the solution. By selecting the appropriate algorithm for a particular problem, it may be possible to obtain better solutions more quickly.
  • Starting point selection: The starting point for the optimization process can have a significant impact on the quality of the solution obtained. By specifying a good starting point, it may be possible to obtain better solutions more quickly.
  • Termination criteria: The termination criteria specify when the optimization process should stop. By setting appropriate termination criteria, it is possible to control the trade-off between solution quality and computational effort.
  • Constraint handling: Optimization solvers typically offer multiple options for handling constraints, such as using soft constraints, using penalty functions, or using barrier functions. The choice of constraint handling method can affect the quality of the solution obtained and the speed of the optimization process.
  • Preprocessing: Preprocessing refers to the techniques used to simplify the optimization problem before it is solved. By applying appropriate preprocessing techniques, it may be possible to reduce the size of the problem and obtain better solutions more quickly.
  • Parallel processing: Many optimization solvers support parallel processing, which can be used to solve large-scale optimization problems more quickly. By using multiple processors or cores to solve the problem, it may be possible to obtain better solutions more quickly.

The importance of optimization options lies in their ability to customize the behavior of the optimization solver to the specific problem being solved. By selecting appropriate options and settings, it may be possible to obtain better solutions more quickly or to solve larger and more complex problems. However, it is important to note that the choice of optimization options will depend on the specific problem being solved and the available computational resources, and may require some experimentation to determine the best settings.

Gurobi options

Gurobi is a powerful optimization solver that offers a wide range of options for customizing the optimization process. Here are some of the key options that can be checked and customized in Gurobi:

  • Optimization algorithm: Gurobi offers several algorithms for solving optimization problems, including simplex, barrier, and hybrid algorithms. The choice of algorithm can have a significant impact on the speed and quality of the solution.
  • MIP solver: For mixed-integer programming (MIP) problems, Gurobi offers several MIP solvers that can be used to solve the problem, including branch-and-bound, branch-and-cut, and branch-and-price algorithms. The choice of MIP solver can have a significant impact on the speed and quality of the solution.
  • Termination criteria: Gurobi allows users to specify termination criteria for the optimization process, such as a maximum time limit, a maximum number of iterations, or a desired level of solution quality. These criteria can be used to control the trade-off between solution quality and computational effort.

Presolve options:

Gurobi offers several options for presolving the optimization problem before solving it, such as reducing the problem size, identifying and eliminating redundant constraints, and detecting and fixing numerical issues. These options can be used to improve the efficiency and quality of the optimization process.

Feasibility tolerances:

Gurobi allows users to specify tolerances for the feasibility of the solution, such as the tolerance for constraint violation or the tolerance for integrality. These tolerances can be used to control the level of accuracy of the solution.

MIP heuristics:

Gurobi offers several heuristics for finding good feasible solutions to MIP problems, such as using feasibility pump, RINS, and MIR cuts. These heuristics can be used to obtain good initial solutions that can help improve the efficiency of the optimization process.

Parallel processing:

Gurobi supports parallel processing, which can be used to solve large-scale optimization problems more quickly. By using multiple processors or cores to solve the problem, it may be possible to obtain better solutions more quickly.

These are just a few examples of the key options that can be checked and customized in Gurobi. The specific options that are most important will depend on the specific problem being solved and the available computational resources.

Setting options in Gurobi optimization code can be done using the setParam method of the Gurobi model object. This method allows you to set various solver parameters, such as the optimization algorithm, termination criteria, and presolve options. Here’s an example of how to set some common options in Gurobi:

import gurobipy as gp

# Create a new Gurobi model object
model = gp.Model()

# Set the optimization algorithm to use barrier method
model.setParam('Method', 2)

# Set the maximum time limit for the optimization process to 1 hour
model.setParam('TimeLimit', 3600)

# Enable presolve to reduce the size of the problem before solving it
model.setParam('Presolve', 2)

# Set the integrality tolerance to 1e-6
model.setParam('IntFeasTol', 1e-6)

# Solve the optimization problem
model.optimize()

In this example, we first create a new Gurobi model object using the gp.Model() method. We then use the setParam method to set several options:

  • Method: Sets the optimization algorithm to use the barrier method, which is the default algorithm for linear programming (LP) problems in Gurobi. The value 2 corresponds to the barrier method.
  • TimeLimit: Sets the maximum time limit for the optimization process to 1 hour (3600 seconds).
  • Presolve: Enables presolve to reduce the size of the problem before solving it. The value 2 enables aggressive presolve.
  • IntFeasTol: Sets the integrality tolerance to 1e-6, which specifies the tolerance for integrality of integer variables.

Finally, we call the optimize method of the model object to solve the optimization problem using the specified options.

Note that there are many more options that can be set in Gurobi, and the specific options that are most appropriate will depend on the problem being solved. You can refer to the Gurobi documentation for a full list of available options and their descriptions.

some other option setting:
import gurobipy as gp 
# Create a new Gurobi model object 
model = gp.Model() 
# Set the optimization algorithm to use barrier method 

opt = SolverFactory('gurobi',solver_io="python")
opt.options['NonConvex'] = 2
opt.options['mipgap'] = 0.01
opt.options['NumericFocus']=3
opt.options["Cuts"]=3
opt.options["IntFeasTol"]=1e-6
opt.options['feasRelaxS']=(1,False,True,True)
opt.solve(model).write()
opt.solve(m,tee=True,logfile=file_)