[英]is there a way to provide search annotation in minizinc predicate?
我想知道是否可以在minizinc謂詞中提供搜索順序。 例如我有這樣的代碼
predicate numbers_falling_within_range (var int:a, var int:b)=
let {
var 213233..4535553: num;
} in
(a+b<num*64+64) /\ (a+b>num*64); %% pick a and b such that their sum fall within a range
在這里,我希望在執行謂詞時先在a
或b
之前先求解num
。 有辦法嗎? 我正在尋找類似於解決模型末尾提供的訂單注釋的內容。
可以設計搜索策略的唯一地方是解決項目,但是您可能還會問:“我可以針對局部變量設計一個搜索策略嗎?”
由於MiniZinc是一種作用域語言,因此您不能真正在謂詞之外訪問這些變量,但可以將它們提升為全局作用域:
int num_num = ???;
array[1..num_num] of var 213233..4535553: nums;
predicate numbers_falling_within_range (var int: a, var int: b, var int: num) =
(a+b<num*64+64) /\ (a+b>num*64);
% a call to the predicate
constraint numbers_falling_within_range(x, y, nums[1]);
solve ::int_search(nums, input_order, indomain_min) minimize cost;
請注意,只有在可以(高估)謂詞的調用次數並為每個調用賦予不同的變量(現在是全局變量)的情況下,這種方法才可行。 除非您的謂詞是遞歸的,否則這應該相對簡單。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.