Я ищу идиоматический решатель удовлетворения ограничений, который может максимизировать или минимизировать целевую функцию, а не создавать список соответствующих решений.
Если быть точным, меня больше интересует минимизация (например, расхода бензина на маршруте, который должен удовлетворять и другим ограничениям), но вопрос в следующем:
В настоящее время я смотрю на core.logic и у меня сложилось впечатление, что модуль не будет выполнять ни макс, ни миним. Насколько я понимаю, эта функциональность обычно обозначается как CLP. В Core.logic упоминается CLP(FD) (https://github.com/clojure/core.logic/wiki/Features), но, глядя на описание, у меня возникают серьезные сомнения.
Может ли кто-нибудь прокомментировать это, поскольку, я думаю, мне было бы слишком много читать всю книгу Reasoned Schemer?
(+ x (* y 2))
. Конечно, пока форма вашей проблемы является целевой функцией членов с линейными и квадратичными членами и линейными ограничениями, вы можете легко написать анализатор самостоятельно для преобразования таких выражений, как(+ x (* y 2))
, в вызовы.addExpression
,.set
и т. д. Но если у вас просто есть функция Clojure, которую вы хотите свести к минимуму, и вы не знаете ее реализацию, вам придется использовать какой-то другой алгоритм, например CMA-ES. - person Rulle   schedule 12.05.2020(+ (* y 2))
, вы можете использовать Spec (clojure.org/guides/spec), чтобы убедиться, что это действительное выражение, которое может обработать решатель. - person Rulle   schedule 12.05.2020