0

在编写 MiniZinc 模型时,我经常像这样声明多个变量:

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

我试图在一行上声明所有这些变量,但它产生了一个语法错误:

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

是否可以仅使用一条语句以更简洁的方式声明所有这些变量?

4

1 回答 1

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:dogs”等]

于 2015-11-13T23:17:31.333 回答