Об этом проекте

jcsp — это библиотека Java, предназначенная для решения задач удовлетворения ограничений (CSP) с использованием принципов современного Java (21+). Она переосмысливает решение задач ограничений через чисто функциональный и неизменяемый подход, преодолевая ограничения традиционных решателей, которые зависят от глобального изменяемого состояния и императивных стеков отката. Ключевые особенности включают глубоко неизменяемые объекты ядра для безопасности потоков, параллельный локальный поиск, использующий несколько ядер ЦП, и ленивый API для потоковой передачи, позволяющий инкрементально обрабатывать решения с помощью стандартных конвейеров Java Stream. Библиотека поддерживает несколько стратегий решения, таких как поиск с возвратом, декомпозиция дерева и оптимизация branch-and-bound. Она предлагает обширную предварительную обработку согласованности с различными глобальными ограничениями, такими как AllDiff, Cumulative и GlobalCardinality, обеспечивая эффективное сокращение домена. Кроме того, jcsp поддерживает переменные с вещественными значениями с интервальной арифметикой, переменные множеств для комбинаторных задач и разбор файлов экземпляров XCSP3. Конфигурация решателя является гибкой, позволяя устанавливать ограничения на поиск, отменять операции и использовать обучение nogood, что делает ее подходящей для облачных микросервисов и сложных задач оптимизации.