arrays - 了解 Minizinc 中的一个关键概念 - 声明一组变量,然后使用它来声明一个值数组
问题描述
我正在学习 Coursera 上的 Minizink 简介课程,并找到了一个我真的希望能更直观地理解的例子。
本视频中的模型https://www.coursera.org/learn/basic-modeling/lecture/PZO1B/1-1-7-global-constraints声明了以下参数
set of int: DIGIT = 1..9;
array[DIGIT] of int: rods = [1,2,3,4,5,2,3,4,5];
有了这些限制之后
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的集合被声明为由数字 1 到 9 组成,这也可以被视为[]
,由相应的索引匹配。相反,声明var 1..9: DIGIT
将创建 DIGIT 可以采用的一系列值,而不是数组或集合。
事实上,当我写这篇文章时,我实际上记得我是如何理解课程中前面的例子的,但我会完成这个姿势,也许可以进一步了解它,或者看看我是否还遗漏了什么。
例如,假设您有一个枚举集FRUIT = {apple,orange,banana}
,您可以使用例如关联一个整数数组array[FRUIT] of int: whatever = [4,9834,-42]
。然后,通过声明来使用枚举的可能性var FRUIT: Opt1;
,因此Opt1
可以取苹果、橙子或香蕉的值,具体取决于所使用的约束类型,而whatever[Opt1]
在约束内使用将取值 4、9834 或 -42,取决于目前正在“测试”的水果Opt1
?
因此,通常情况下,向某人解释某事实际上可以帮助您自己更好地理解它,所以我想我明白了,但我想知道我如何解释 Minizinc 的这一方面的工作方式是否有什么不妥或遗漏?
解决方案
推荐阅读
- angularjs - 无法下载 Angular.js
- c++ - 有谁知道为什么当我尝试在 VS 2019 中运行程序时,我的防病毒软件将其检测为 heur 病毒并自动关闭它?
- python - Python 3.6 <-> Python 3.4 互通
- java - 提交添加新消息时出现错误 403
- perforce - 在 perforce 中删除和添加相同的符号链接
- java - WebSphere Liberty 在 WAR 的类目录中找不到 log4j.properties
- ios - 删除 Swift 结构中的旧获取项目
- javascript - 使用 React Hooks 对第二次渲染进行 API 调用
- javascript - javascript中的laravel刀片变量
- javascript - 根据您的状态将您重定向到页面的按钮