【问题标题】:Declaring multiple variables with one statement in MiniZinc在 MiniZinc 中用一条语句声明多个变量
【发布时间】:2015-11-13 22:42:29
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: minizinc


    【解决方案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:狗”等]

    【讨论】:

    • 你能做到狗、猫、鸟等的域不同吗? (即,鸟为 0..1,猫为 0..10,等等)
    • 是的,这是推荐的方式,即使域尽可能小(但不能更小):var 0..1: bird; var 0..10: cat; var 3..6: dog;
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-12
    • 2022-09-24
    • 2021-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多