## A. Solvers

### List of all solvers in JCOP

In table 1 is a list of all solvers bundled with JCOP, along with brief description and default registered renders apart from SimpleRender (which is registered as default to all solvers). Note that all of them extends BaseSolver.

Name | Description | Additional Renders |
---|---|---|

AlgorithmCompareSolver | Runs several algorithms on one problem. | SimpleCompareRender |

MedianSolver | Wraps around another solver, runs it several times and returns median from its results. | SimpleCompareRender |

MultiSolver | Makes cartesian product of given algorithms and problems and runs all of them. | SimpleCompareRender |

ProblemCompareSolver | Runs one algorithm on several problems. | SimpleCompareRender |

SimpleSolver | Runs one algorithm on one problem. | none |

Table 1: List of solvers in JCOP.

### AlgorithmCompareSolver

AlgorithmCompareSolver is created with one problem and multiple algorithms. More algorithms can be added by AlgorithmCompareSolver#addAlgorithm(Algorithm). Solver uses every algorithm in turn on supplied problem. Has default renders SimpleRender and SimpleCompareRender.

### MedianSolver

MedianSolver is very different from other solvers. It cannot solve itself, but takes another solver and runs it repeatedly, storing results from every run. After that, it makes median from results (results ordered by best fitness) and presents it as a result. This solver is very useful when you have random-based algorithm and want to eliminate statistical errors.

Note that if wrapped solver returns more than one result entry in its result, median requires that in every run solver returns same number of result entries and in same order.

MedianSolver has default renders SimpleRender and SimpleCompareRender.

### MultiSolver

MultiSolver is created with a list of problems and list of algorithms. More algorithms and problems can be added by MultiSolver#addAlgorithm(Algorithm) and MultiSolver#addProblem(Problem). Solver makes cartesian product, eg. applies every algorithm on every problem in turn. Has default renders SimpleRender and SimpleCompareRender.

### ProblemCompareSolver

ProblemCompareSolver is created with one algorithm and multiple problems. More problems can be added by ProblemCompareSolver#addProblem(Problem). Solver uses supplied algorithm on every problem in turn. Has default renders SimpleRender and SimpleCompareRender.

### SimpleSolver

SimpleSolver is useful for simple testing if algorithm or problem works. Takes only single algorithm and single problem and makes one solver iteration. Has default render SimpleRender.