Вы не настроили условие завершения решателя. Например, если вы хотите, чтобы решатель решал задачи в течение 60 секунд, добавьте следующее:
solverConfig.withTerminationConfig(new TerminationConfig().withSecondsSpentLimit(60L));
Обратите внимание, что в представленном вами примере решатель запускается в главном потоке и блокирует его до тех пор, пока не будет выполнено условие завершения, а затем перестает решать добровольно. Поскольку в вашем примере такого условия не существует, он решает и блокирует поток навсегда.
В качестве альтернативы используйте API SolverManager
для решения проблемы асинхронно (в рабочем потоке):
int problemId = 1;
SolverManager<Solution, Integer> solverManager = SolverManager.create(
solverConfig, new SolverManagerConfig());
SolverJob<Solution, Integer> solverJob = solverManager.solve(problemId, solutionDef);
// wait some time, then terminate solver manager
solverManager.terminateEarly(problemId);
Solution bestSolution = solverJob.getFinalBestSolution();