A heuristic search algorithm for solving resource-constrained project scheduling problems