Arrays Minizing中缺少值的可选参数
我试图模拟类似于车间作业的问题。有多个作业,可以用多种方式完成,它们使用不同数量的任务来完成作业 我已设置此数据结构来表示该信息:Arrays Minizing中缺少值的可选参数,arrays,minizinc,Arrays,Minizinc,我试图模拟类似于车间作业的问题。有多个作业,可以用多种方式完成,它们使用不同数量的任务来完成作业 我已设置此数据结构来表示该信息: enum Job; enum Option; int: maxTasks; set of int: TaskIndex = 1..maxTasks; enum Task; array[Job, Option, TaskIndex] of opt Task: jobOptions; 如果jobOptions[j,o,index]存在,则它是jobj的index选
enum Job;
enum Option;
int: maxTasks;
set of int: TaskIndex = 1..maxTasks;
enum Task;
array[Job, Option, TaskIndex] of opt Task: jobOptions;
如果jobOptions[j,o,index]
存在,则它是jobj
的index
选项o
的第个任务。如果缺少该选项,则该作业的该选项不会使用最大数量的任务,这是一个空插槽
我无法看到如何初始化此数组。如果是2d阵列,我可以
jobOptions = [|
T1, T2 |
T3, <>
|];
创建一个“非方形”数组,但如果可行的话,我就无法找到正确的语法
是否有方法初始化缺少可选元素的三维参数数组?或者,是否有更好的方法来显示此数据?更新:问题已在Minizing编译器的
develope
分支上得到解决。在下一版本中,>2.1.6
,应该可以对可选参数类型使用array3d
功能
用于
opt
参数的array3d
函数是编译器中当前缺少的功能。我建议在GitHub存储库中创建一个问题:
通常,我建议将类型更改为其变量对应项作为替代(var opt Task:jobOptions的数组[Job,Option,TaskIndex];
)。尽管这对于类型检查并不理想,但仍可以像参数版本一样指定它(并且将与当前版本的array3d一起使用)。此外,指定的变量将在编译器中充当参数。如果类型检查器出现任何问题,可以随时调用fix
内部函数将其绑定到参数
然而,当我在本地尝试时,似乎我在编译器中遇到了分段错误。我建议您尝试相同的方法,如果遇到相同的问题,请再次在GitHub存储库中报告该问题:
jobOptions = array3d(Job, Option, TaskIndex, [
% Job 1
T1, T2, % Option 1
T3, <>, % Option 2
% Job 2
T2, T4, % Option 1
<>, <>, % No second option
|];
array[Job] of array[int] of array[int]: jobOptions