[英]What is the CP/MILP problem name for the assignment of agents to tasks with fixed start time and end time?
[英]What is an instance of Option Type at parsing time?
關於選項類型 ,Minizinc的規范 (第6.6.3節)說:
概述。 使用opt類型構造函數定義的選項類型定義可能存在或可能不存在的類型。 它們類似於Haskell的Maybe類型,即為該類型隱式添加一個新值
<>
。[...]
初始化。 opt類型變量不需要在實例時初始化。 未初始化的opt類型變量會自動初始化為
<>
。
我想使用兩種opt
類型來解析和處理以下約束 :
predicate alternative(var opt int: s0, var int: d0,
array[int] of var opt int: s,
array[int] of var int: d);
但是,我不確定解析此約束時作為參數s0
和s
值應該期望什么。
我可以簡單地忽略opt
修飾符的存在,並假設約束簽名等於下一個嗎?
predicate alternative(var int: s0, var int: d0,
array[int] of var int: s,
array[int] of var int: d);
如果沒有,我應該如何處理?
在MiniZinc中,變量選項類型被視為可能不存在的變量。 在編譯器中,將對這些變量進行轉換,並以FlatZinc輸出僅包含實際變量的方式來解釋和重寫這些變量。 通常,這意味着為每個變量添加一個布爾變量,如果且僅當變量“存在”時才為true。
對於庫編寫者,可以選擇用一種方式重寫它,以使您的求解程序能夠最好地處理。 在標准庫中, alternative
定義為:
predicate alternative(var opt int: s0, var int: d0,
array[int] of var opt int: s,
array[int] of var int: d) =
assert(index_set(s) = index_set(d),
"alternative: index sets of third and fourth argument must be identical",
sum(i in index_set(s))(bool2int(occurs(s[i]))) <= 1 /\
span(s0,d0,s,d)
);
注意, occurs
內在函數用於測試變量是否存在。 在MiniZinc庫中可以找到有關變量類型的更多內在函數: http : //www.minizinc.org/doc-lib/doc-optiontypes.html 。 如有必要,您還可以使用let表達式創建額外的變量,然后將該謂詞映射到求解器固有謂詞。
即使您的求解程序沒有更好地分解可選類型謂詞,但仍然可以在沒有選項類型的情況下實現謂詞。 由於MiniZinc的重載,每當用非選項變量類型的數組調用謂詞時,都將使用該實現。 (盡管請注意, alternative
謂詞專門用於“可選任務”,不太可能那樣稱呼)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.