2017-11-30 10 views
0

私はminizincでarroundを乱用しています。私はdznだけを使って解決する静的なmznファイルを作成したいと思います。質問をより良く理解するために 、ここではサンプルです:dznファイル内の配列の特定の要素だけを初期化する

include "globals.mzn"; 
include "data.dzn"; 
int: time; 
int: n; 
int: l=n*n; 
array[1..4,0..time,1..l] of var bool: X; 
solve satisfy; 

私は今、DZNファイルを(他の要素はVARSする必要があります)を使用して、Xのほんの数の要素を初期化したいです。この初期化は不可能であるので

DZNこの

time=1; 
n=3; 
X[4,1,7]=true; 

ようになり、私は、また、位置の要素以外のすべての要素(4,1,7)が偽である場合X=array3d(1..4,0..time,1..l,[false,...,false]を使用してみました。しかし、これはすべての要素を初期化し、私が望む結果を得ることができません。なぜなら、それは私の持つ制約を満たすことができないからです。

dznファイルを使用してこの配列の1つまたはいくつかの要素のみを初期化する方法はありますか?

答えて

1

これを行う1つの方法は、dznファイルのデータ行列に匿名変数(_)を使用することです。

% mzn file 
include "data.dzn"; 
int: time; 
int: n; 
array[1..time,1..n] of var bool: X; 
solve satisfy; 

、データファイル:このアプローチは、そうでない場合は、このメッセージがスローされ、少なくとも一つの非匿名の値を必要とすることが

% data.dzn 
time=3; 
n=2; 
X = array2d(1..3,1..2, 
    [_,_, 
    _,_, 
    _,false 
    ]); 

注:array literal must contain at least one non-anonymous variableここでは簡単な例です。

関連する問題