2017-07-12 4 views
1

私は別の場所で"ドットドット "表記(..)を見ました。次の例では、0..nは決定変数(この場合は配列sのエントリ)のドメインを示しています。MiniZincの `m..n`表記で混乱しています

int: n; 
array[0..n-1] of var 0..n: s; 

もう一つの例は、forループでは、次のようになります。実際には

constraint forall(i in 0..sequence_length)(
    t[i] = sum(k in 0..sequence_length)((bool2int(t[k] == i))) 
); 

、私たちも

par var 1..5: x 

ような何かを行うことができます私の気持ちは表現m..nが一般的に使用されていることです変数(パラメータの代わりに)を定義するとき、変数のドメインを指定する必要があります。しかし、2番目のケースでは、変数を定義していません。だからいつm..nを使用しますか?正確には何ですか(例:タイプがありますか?)

答えて

2

m..nmからnに(連続)整数のを設定あります。それは明示的に{m,m+1,m+2,...,n-1,n}と書くこともできます。

ドメインとしてセットを使用する。

var 0..5: x; 

(おそらく奇妙なスタイルです)

var {0,1,2,3,4,5}: x; 

かのように書くことができます

var {1,5,2,3,0,4}: x; 

どちらもセット0..5を表します。

imからnに割り当てられていることを意味するforall(i in m..n) (....)ループ内m..nを使用。

セットは常にこの小さなモデルとして注文さに示す:

solve satisfy; 
constraint 
    forall(i in {0,4,3,1,2,5}) (
     trace("i: \(i)\n") 
    ) 
; 
trace

関数は以下を出力し、すなわち順序付けられた:

i: 0 i: 1 i: 2 i: 3 i: 4 i: 5

関連する問題