Enums 连接2个枚举类型变量集
我想得到一个包含所有a、b、c、d、e、f的新枚举类型sup3。Minizing中是否有任何方法可以做到这一点。简短的回答是否,目前不支持这一点。枚举类型连接的主要问题来自这样一个事实:我们不仅连接两个事物列表,而且组合类型。以你为例:Enums 连接2个枚举类型变量集,enums,minizinc,Enums,Minizinc,我想得到一个包含所有a、b、c、d、e、f的新枚举类型sup3。Minizing中是否有任何方法可以做到这一点。简短的回答是否,目前不支持这一点。枚举类型连接的主要问题来自这样一个事实:我们不仅连接两个事物列表,而且组合类型。以你为例: enum sup; sup=['a','b','c']; enum sup2; sup2=['d','e','f']; enum sup3; sup3=sup++sup2; 当我现在在表达式中的某个地方写入E时,我不再知道它的类型是sup2还是sup3
enum sup;
sup=['a','b','c'];
enum sup2;
sup2=['d','e','f'];
enum sup3;
sup3=sup++sup2;
当我现在在表达式中的某个地方写入E
时,我不再知道它的类型是sup2
还是sup3
。正如您可能想象的那样,无法保证E
在两个枚举类型中具有相同的值(对于解算器),因此这可能是一个大问题
为了给人们带来一线希望,MiniZinc团队一直在研究一种类似的方法来实现这一点(但尚未正式宣布)。你可以这样写,而不是你的语法:
enum sup = {A, B, C};
enum sup2 = {D, E, F};
enum sup3 = sup ++ sup2;
这背后的思想是
F(X)
现在为Y
中X
的用法提供了一个构造函数。这意味着如果我们只看到A
,我们知道它是X
类型,但是如果我们看到F(A)
,那么它是Y
类型。同样,这还不可能实现,但有望很快在该语言中实现。最好有一个实际的例子来说明为什么需要这个新功能+1任何例子都是可能的,但请考虑一个调度问题的例子,我们使用任务枚举。然后,您可以将时间映射到任务,但是,您可能需要一个额外的值来标识计划中的空闲时间。如果枚举在模型的其他部分中的使用方式不同,则不希望将此值添加到原始枚举中,而是使用单独的明细表枚举。当枚举部分已知,而另一部分是模型的输入时,通常会出现这些情况。谢谢!因此,它不会增加表达能力,但可以更容易地编码某些约束,对吗?@PatrickTrentin主要的想法是,它允许用户在更多情况下使用枚举。它不会改变可以用minizing表示的模型,因为您可以使用整数,但它将允许更简洁的建模,并且在选择枚举值时可能会进行一些编译器级别的优化
enum X = {A, B, C};
enum Y = {D, E, F} ++ F(X);