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]
存在,则它是job
j
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