Combinatorial Optimization

Combinatorial optimization problems are those in which there is a finite number of possible solutions and an optimal solution is sought, that is, one that maximizes profits or minimizes costs.
Many problems in the areas of production, logistics and transportation are combinatorial optimization problems. Included in this category, for example, are production scheduling, cutting and packaging of materials, resource allocation and vehicle routing problems.
Combinatorial optimization problems are characterized by the exponential growth in the number of possible solutions, so that it is practically impossible to obtain good solutions for real large-scale problems by trial and error.
However, it is possible to obtain good solutions or even optimal solutions through algorithms that intelligently exploit the mathematical structure of the problem. For this, mathematical programming, dynamic programming and heuristic algorithms are used.
The main technologies used to implement the algorithms are the Python language and solvers such as IBM CPLEX, Gurobi and COIN-OR CBC.