A solver takes problem descriptions in some sort of generic form and calculates their solution.
In a solver, the emphasis is on creating a program or library that can easily be applied to other problems of similar type.
General solvers typically use an architecture similar to the GPS to decouple a problem's definition from the strategy used to solve it.
This induces an exponential computational time that dramatically limits their usability.
For problems of a particular class (e.g., systems of non-linear equations) multiple algorithms are usually available.