Lindo Programa
LINDO for MPL
LINDO API is a Callable library, with which, you can easily create your own optimization applications. It allows you to plug the power of the LINDO solver right into customized applications that you have written. LINDO (Linear, INteractive, and Discrete Optimizer) is a convenient, but powerful tool for solving linear, integer, and quadratic programming problems. These problems occur in areas of business, industry, research and government. Specific application areas where LINDO has proven to be of great.
LINDO Simplex Optimizer
LINDO Barrier Optimizer
LINDO Integer Optimizer
LINDO Nonlinear Optimizer
For LPs
MIP problems can be extremely difficult to solve, though there are no steadfast rules on enhancing MIP performance, certain things may be advantageous in improving the performance on some models and be a hinderous on other problems. Below are some of the considerations one should look into when try to solve difficult MIP problems:Heuristic setting: LINDO has a number of heuristics that can be used to find initial integer feasible solutions, finding good solutions fast greatly benefits the subsequent brand and bound search process eliminating may 'bad' branches. For difficult problems one should try to set the heuristic level parameter ('MIPHeuristicLevel') to 3,4 or 5. Higher value settings will cause more time to be spent in the heuristic, which may not be worthwhile.
Cuts: Addition of cuts helps eliminate non-integer feasible regions from the LP relaxed convex hull. This provides improved bounds during the branch and bound process. The option 'MIPCutLevel' which is a bit setting has a default value of 22526 which means 12 types of cuts are set out of 14. To include full cut generation one can set this value to 32766. The more cuts added, the larger the inherent matrix becomes which can increase the processing time at the nodes. However usually on difficult models an aggressive cut strategy is the best mode of practice.
The area of nonlinear programming is diverse, and there is no anyone method that can handle all types of NLPs unlike in linear programming. If the NLPs are large or are highly nonlinear in nature, utilizing the global optimizer will generally give bad performance. Models larger than 100 variables can be extremely difficult to solve to proven global optimality. Large models should use the local solver, MPL by default will use LINDO's local optimizer when solving NLP one has to specify the boolean option 'UseGlobalOptimizer' to activate the global solver. One can employ a multi-start methodology using the local solver to find better local optima, this naturally will increase the total solve time but should result in better solutions. Typically one should set a multi-start value of 4 or 5 (setting: 'NLPMaxLocalSearch').
Heuristic setting: LINDO has a number of heuristics that can be used to find initial integer feasible solutions, finding good solutions fast greatly benefits the subsequent brand and bound search process eliminating may 'bad' branches. For difficult problems one should try to set the heuristic level parameter ('MIPHeuristicLevel') to 3,4 or 5. Higher value settings will cause more time to be spent in the heuristic, which may not be worthwhile.
Cuts: Addition of cuts helps eliminate non-integer feasible regions from the LP relaxed convex hull. This provides improved bounds during the branch and bound process. The option 'MIPCutLevel' which is a bit setting has a default value of 22526 which means 12 types of cuts are set out of 14. To include full cut generation one can set this value to 32766. The more cuts added, the larger the inherent matrix becomes which can increase the processing time at the nodes. However usually on difficult models an aggressive cut strategy is the best mode of practice.
For LPs LINDO will display the iteration number, the dual/primal objective value, iteration infeasibility and the time of the iteration.