在MiniZinc中使用一个语句声明多个变量

时间:2015-11-13 22:42:30

标签: 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 个答案:

答案 0 :(得分: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:狗"等等。