Implement test for different problem types to choose the most appropriate solver.  Implement plateau detection and random restarts.