簡體   English   中英

有沒有辦法在minizinc謂詞中提供搜索注釋?

[英]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

在這里,我希望在執行謂詞時先在ab之前先求解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.

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