Solvers Used Internally by LINGO

LINGO has four solvers that it uses to solve different types of models.  These solvers are:

a direct solver,
a linear solver,
a nonlinear solver, and
a branch-and-bound manager.

The LINGO solvers, unlike solvers sold with other modeling languages, are all part of the same program. In other words, they are linked directly to the modeling language. This allows LINGO to pass data to its solvers directly through memory rather than through intermediate files. Direct links to LINGO's solvers also minimize compatibility problems between the modeling language component and the solver components.

When you solve a model, the direct solver first computes the values for as many variables as possible. If the direct solver finds an equality constraint with only one unknown variable, it determines a value for the variable that satisfies the constraint. The direct solver stops when it runs out of unknown variables or there are no longer any equality constraints with a single remaining unknown variable.

Once the direct solver is finished, if all variables have been computed, LINGO displays the solution report. If unknown variables remain, LINGO determines which solvers to use on a model by examining its structure and mathematical content. For a continuous linear model, LINGO calls the linear solver. If the model contains one or more nonlinear constraints, LINGO calls the nonlinear solver. When the model contains any integer restrictions, the branch-and-bound manager is invoked to enforce them. The branch-and-bound manager will in turn call either the linear or nonlinear solver depending upon the nature of the model.

The linear solver in LINGO uses the revised simplex method with product form inverse. A barrier solver may also be obtained, as an option, for solving linear models. LINGO’s nonlinear solver employs both successive linear programming (SLP) and generalized reduced gradient (GRG) algorithms. Integer models are solved using the branch-and-bound method. On linear integer models, LINGO does considerable preprocessing (i.e., adding constraint "cuts" to restrict the non-integer feasible region). These cuts will greatly improve solution times for most integer programming models.