簡體   English   中英

如何在 Flatzinc 輸出中生成具體化的“array_int_maximum”?

[英]How to produce a reified `array_int_maximum` in Flatzinc output?

鑒於以下 minizinc 程序:

var 0..4: a;
var 0..5: b;
var -5..2: c;
var -8..-3: d;
var 0..8: m;
var bool: r;
constraint r <-> m = max([a,b,c,d]);
solve satisfy;

redefinitions-2.0.mzn文件

predicate array_int_maximum(var int: m, array[int] of var int: x);                                      
predicate array_int_maximum_reif(var int: m, array[int] of var int: x, var bool: r);                    
predicate array_int_maximum_imp(var int: m, array[int] of var int: x, var bool: r); 

我希望得到一個具體化的版本作為展平的輸出,但我確實得到:

predicate array_int_maximum(var int: m,array [int] of var int: x);
predicate int_eq_imp(var int: a,var int: b,var bool: r);
var 0..4: a:: output_var;
var 0..13: b:: output_var;
var -5..2: c:: output_var;
var -8..-3: d:: output_var;
var 0..16: m:: output_var;
var bool: r:: output_var;
var -8..13: X_INTRODUCED_1_ ::var_is_introduced :: is_defined_var;
array [1..4] of var int: X_INTRODUCED_0_ ::var_is_introduced  = [a,b,c,d];
constraint array_int_maximum(X_INTRODUCED_1_,X_INTRODUCED_0_):: defines_var(X_INTRODUCED_1_);
constraint int_eq_imp(m,X_INTRODUCED_1_,r);
solve  satisfy;

我如何以及在哪里添加我支持此謂詞的 reif 和 imp 版本的信息,因此處理速度可能比自動翻譯更快? (此未解決問題的副本)

簡單的答案是array_int_maximum_reif當前未使用。 它必須由編譯器生成的,但是編譯器,而不是選擇剛剛創建array_int_maximum約束和使用int_eq_reif約束。

何時具體化一個函數仍然不完全清楚。 很明顯,總函數不應該被具體化,因為它沒有提供額外的好處。 對於偏函數,它何時是一個好主意仍然是一個問題。 max是在MiniZinc部分功能,但它使在之前它是由總array_int_maximum 希望很快就會有關於這個問題的更多信息。

暫無
暫無

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

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