Minizinc 中的实例化

问题描述

我正在阅读 Kim Marriott 的“A Minizinc 教程”,上面写着

变量实例化和类型的组合被称为type-in​​st。当您开始使用 Minizinc 时,您无疑会看到 type-in​​st 错误的示例。

什么是 type-in​​st 错误

解决方法

我相信这个术语现在在 MiniZinc 文献中并不经常使用,但是对于 MiniZinc 中的每个值,编译器都会跟踪两件事:它的类型(int、bool、float 等)以及它是否是一个决定变量(在求解时未知)或问题参数(在为求解器重写模型时必须知道)。这两件事一起被称为类型实例化或 type-in​​st。

type-in​​st 错误是由编译器的类型检查器给出的错误。这些错误可能发生在许多地方,例如在声明中声明的类型实例化与其右侧不匹配时,或者当 if-then-else 的两侧具有不同的类型实例化时,或者当调用与函数声明的声明类型实例化不匹配。

导致这些错误的不匹配可能来自 type-in​​st 的任一侧:类型不兼容(例如使用 float 而不是 bool),或者您使用了仅允许问题参数的决策变量。这些问题通常是由模型中的错误引起的,通常可以通过更改使用的值或使用不同的语言结构轻松解决。

请注意 MiniZinc 确实允许子类型:您可以使用 bool 而不是 int 并将其转换为 0/1 值。同样,您可以使用整数值代替浮点数,也可以使用参数代替变量。

最新版本的 MiniZinc 教程可以在其文档中找到:https://www.minizinc.org/doc-latest/en/part_2_tutorial.html