The main objective of maintenance is to increase equipment lifetime while keeping the efficiency and reliability of the systems in operation. However, the definition of the preventive maintenance tasks is not an easy problem to solve, since in many cases tasks performed on assets can be redundant, not required and it is then difficult to define cost-effective maintenance plans. Therefore, a more accurate definition of plans is needed to reduce maintenance costs, where different optimization algorithms can be used. Taking a single one-stage approach could serve to find an optimal solution depending of the use case, but a unique algorithm does not find reliable results in a generic way. This paper presents an algorithm to solve this combinatorial optimization problem, using a multi-stage approach with 4 different algorithms. The experimentation shows that this novel approach obtains better results than the use of the individual optimization algorithms.