Каковы эти ограничения `float_div` и`float_times` в файле FlatZinc?
Я просто пытался бежать mzn2fzn
поверх следующего файла MiniZinc:
var float: x1;
var float: y1;
var float: x2;
var float: y2;
constraint (x1 / y1) = 6.0;
constraint x2 * y2 <= 5.0;
solve satisfy;
Это результирующий файл FlatZinc:
var -1.7976931348623157e+308..5.0: FLOAT____00001 :: is_defined_var :: var_is_introduced;
var float: x1;
var float: x2;
var float: y1;
var float: y2;
constraint float_div(x1, y1, 6.0);
constraint float_times(x2, y2, FLOAT____00001) :: defines_var(FLOAT____00001);
solve satisfy;
Версия mzn2fzn
как следует:
~$ mzn2fzn --version
G12 MiniZinc to FlatZinc converter, version 1.6.0
Copyright (C) 2006-2012 The University of Melbourne and NICTA
У меня есть следующие вопросы:
- что
float_div
ограничение, которое, по-видимому, не упоминается в стандарте FlatZinc 1.6? - что
float_times
ограничение, которое, по-видимому, не упоминается в стандарте FlatZinc 1.6?
Любой решатель FlatZinc действительно поддерживает их?
NB Я на самом деле нашел следы этих функций в документах для FlatZinc 2.2.0, однако, я не понимаю, почему они генерируются версией 1.6 mzn2fzn
когда его документация, кажется, не упоминает ни один из них.
1 ответ
Кажется, что в документации FlatZinc 1.6 есть недосмотр, что ограничения float_div
а также float_times
не документированы Эти ограничения являются необходимыми частями встроенных модулей FlatZinc, которые должны быть понятны специалистам с поддержкой переменных с плавающей запятой. Их нельзя переписать в другие ограничения, которые есть среди встроенных функций FlatZinc, и поэтому компилятор будет их использовать. Я бы отметил, что int_div
а также int_times
задокументированы в документации старой версии FlatZinc, и значение ограничений может быть экстраполировано из этих ограничений. (У меня также сложилось впечатление, что их значение не изменилось при переходе на FlatZinc 2.2.0)
Gecode, CP-решатель, поставляемый с MiniZinc, поддерживает эти ограничения.