CLPFD для действительных чисел

CLP(FD) позволяет пользователю устанавливать домен для каждой целочисленной переменной, так что он может решать уравнения.
Пока все хорошо.

Однако вы не можете сделать то же самое в CLP(R) или подобных языках (где вы можете делать только простые выводы). И нетрудно понять почему: дробная часть числа может иметь почти бесконечную область, проставленную пределом реализации. Это означает, что пространство поиска будет слишком большим, чтобы найти какое-либо практическое применение для решателя, работающего с числами с плавающей запятой, как с целыми числами. Таким образом, задачей пользователя является написать генератор в CLP(R) и установить защиту ограничений там, где это необходимо, чтобы получить экземпляры переменных с числами (если простой вывод невозможен).

Итак, мой вопрос: существует ли CLP(FD)-подобный язык над вещественными числами? Я думаю, что это можно было бы реализовать с помощью округления чисел, поиска и последующего пошагового приближения.


person gnidorah    schedule 11.07.2014    source источник


Ответы (2)


Есть по крайней мере несколько основных решателей CLP(FD), которые поддерживают реальные (решающие) переменные:

(Первые три также поддерживают var float в MiniZinc.)

person hakank    schedule 11.07.2014

Ответ на ваш вопрос - да. Существуют решатели на основе ограничений, предназначенные для плавающих чисел. У меня нет списка решателей, но я знаю, что этот ibex http://www.ibex-lib.org — это библиотека, позволяющая использовать числа с плавающей запятой. Вам также следует взглянуть на SMT-Solvers, реализующие Real-Theory (http://smtlib.cs.uiowa.edu/solvers.shtml).

person Med    schedule 11.07.2014