2015-11-13 314 views
0

當寫MiniZinc模型,我經常聲明多個變量是這樣的:聲明與一個聲明多個變量中MiniZinc

var int: dog; 
var int: cat; 
var int: bird; 
var int: mammal; 
var int: horse; 

我想聲明所有這些變量在同一行,但它產生一個語法錯誤:

var int: dog, cat, bird, mammal, horse; 

是否可以使用一條語句以更簡潔的方式聲明所有這些變量?

回答

1

MiniZinc中沒有枚舉類型或類似。有一些提示說,在某些類型的枚舉中將包含在未來的版本中,儘管我很確定它是否可以與決策變量一起工作(「var int」),也許它只是參數(常量)變量。

這裏有一些有希望的相關旁註。

我傾向於做的是使用決策變量的數組:

int: n = 5; 
array[1..n] of var int: x; 

然後可以使用X [1]等。顯式陣列也經常需要 - 或者至少方便 - 在模型以簡化某些約束條件,如「all_different」等。

但是,在約束中使用命名變量通常會更好。

如果您還想在模型中使用名稱變量,則必須使用名稱定義它們並將它們連接到「x」數組。

var int: dog = x[1]; 
var int: cat = x[2]; 
var int: bird = x[3]; 
var int: mammal = x[4]; 
var int: horse = x[5]; 

或者以另一種方式然後連接:

int: n = 5; 
var int: dog; 
var int: cat; 
var int: bird; 
var int: mammal; 
var int: horse; 

array[1..n] of var int: x = [dog,cat,bird,mammal,horse]; 

[和我通常定義爲小域儘可能爲變量,例如「var 1..10:狗」等]