2015-11-13 163 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:狗”等]