理解 Minizinc 中的一个关键概念——声明一组变量,然后使用它来声明一组值

问题描述

我正在学习 Coursera 上的 Minizink 简介课程,并找到了一个我非常想更直观地理解的示例。

此视图中的模型 https://www.coursera.org/learn/basic-modeling/lecture/PZO1B/1-1-7-global-constraints 声明了以下参数

'-'  'q'  '3'

在这些约束之后

set of int: DIGIT = 1..9;
array[DIGIT] of int: rods = [1,2,3,4,5,5];  

我正在努力想象这里发生了什么。为了检查,一个名为 DIGIT 的集合被声明为由数字 1 到 9 组成,它也可以被视为 constraint rods[M1] + rods[M2] + rods[M3] + rods[M4] + rods[M5] = 12; constraint 2303 + M1 * 10 + 980 + M2 * 1000 + M3 = 301 + M4 * 1000 + M5 * 10; ,然后它“也”被“实例化/声明为/关联”一个看起来像它的数组上面写在 {1,...,9} 里面,由对应的索引匹配。相比之下,声明 [] 会创建一个 DIGIT 可以采用的值范围,它不是数组或集合。

事实上,在我写这篇文章的时候,我实际上记得我是如何理解课程中前面的例子的,但我会完成这个姿势,以便获得更多的观点和清晰度,或者看看我是否仍然遗漏了什么。

例如,您有一个枚举集 var 1..9: DIGIT,您可以使用例如 FRUIT = {apple,orange,banana}一个整数数组与它相关联。然后,通过声明 array[FRUIT] of int: whatever = [4,9834,-42] 使用枚举的可能性,因此 var FRUIT: Opt1; 可以取苹果、橙子或香蕉的值,具体取决于所使用的约束类型,同时在内部使用 Opt1约束将采用 4、9834 或 -42 的值,具体取决于当前正在“测试”的水果为 whatever[Opt1]?

通常情况下,向某人解释某事实际上可以帮助您自己更好地理解它,所以我想我明白了,但我想知道我如何解释 Minizinc 的这一方面的方式是否有任何问题或遗漏有效吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)