簡體   English   中英

MiniZinc:類型錯誤:找不到具有此簽名的函數或謂詞:`floor(var int)'

[英]MiniZinc: type error: no function or predicate with this signature found: `floor(var int)'

我正在嘗試使用 Minizinc IDE 2.2.3 和 Geocode 6.1.0 [內置] 在 Mac OS/X 上運行以下代碼:

var 1..10: x;
var float: y = x div 4;

constraint y == floor(y);

solve minimize( (x - 7)^2 );

output ["\(x) \(y)"]

我收到的錯誤是:

MiniZinc:類型錯誤:找不到具有此簽名的函數或謂詞:`floor(var float)'

我見過這個類似的問題,但是,我正在遵循所選答案中的建議並使用:

  • 浮動決策變量
  • 地理編碼解算器

因此,這個問題與另一個問題不同。

文檔 (v. 2.2.3)floor()需要一個float類型的參數:

4.1.11.6. 強制操作

分別向 +∞、-∞ 和最接近的整數舍入浮點數。

 int: ceil (float) int: floor(float) int: round(float)

從一種類型到另一種類型的顯式轉換。

 int: bool2int( bool) var int: bool2int(var bool) float: int2float( int) var float: int2float(var int) array[int] of $T: set2array(set of $T)

在您的模型中,您將var float而不是float傳遞給函數floor ,因此您會收到類型錯誤


話雖如此,在您的示例中, floor()函數似乎不是必需的。 即使您將y聲明為var float ,也只能為其分配一些數值,因為整數除法的結果始終是integer

function var int: 'div'(var int: x, var int: y)

因此,我的建議是完全放棄floor()

例子

var 1..10: x;
var float: y = x div 4;

constraint 1.5 <= y;

solve minimize( (x - 7)^2 );

output ["\(x) \(y)"]

產量

~$ minizinc t.mzn 
8 2.0
----------
==========

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM