Runs the search-strategy and its according modules, and returns DiscoveredSolution.
This involves three basic steps: 1) Selecting a solution from solutions (input parameter) according to {@link jsprit.core.algorithm.selector.SolutionSelector}, 2) running the modules ( {@link jsprit.core.algorithm.SearchStrategyModule}) on the selectedSolution and 3) accepting the new solution according to {@link jsprit.core.algorithm.acceptor.SolutionAcceptor}.
Note that after 1) the selected solution is copied, thus the original solution is not modified.
Note also that 3) modifies the input parameter solutions by adding, removing, replacing the existing solutions or whatever is defined in the solutionAcceptor.
@param vrp the underlying vehicle routing problem
@param solutions which will be modified
@return discoveredSolution
@throws java.lang.IllegalStateException if selector cannot select any solution