CoW Protocol uses batch auctions (see here for more details) for executing the trades. Within a given batch, the goal is to compute prices and traded amounts in order to maximize a well-defined utility function. This can be formulated as a concrete optimization problem that needs to be solved, and this is where the Solvers comes into place.
Informally, a Solver is an algorithm that takes as input a batch auction instance and outputs a batch auction solution, both described precisely in a formal language. The solution is then processed by the Driver, another key component of the CoW Protocol infrastructure. The Driver validates all Solver candidate solutions and ranks them according to a well-defined objective function.