【发布时间】:2017-11-30 16:59:42
【问题描述】:
我正在尝试模拟类似于作业车间问题的东西。有多个工作,可以通过多种方式完成,它们使用不同数量的任务来完成工作。
我已经设置了这个数据结构来表示该信息:
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]存在,则它是工作j的选项o的indexth任务。如果缺少,则该作业的该选项不会使用最大任务数,这是空槽之一。
我看不到如何初始化这个数组。如果是二维数组,我可以这样做
jobOptions = [|
T1, T2 |
T3, <>
|];
既然是3d,想做点什么
jobOptions = array3d(Job, Option, TaskIndex, [
% Job 1
T1, T2, % Option 1
T3, <>, % Option 2
% Job 2
T2, T4, % Option 1
<>, <>, % No second option
|];
但是,这失败了,因为array3d 有三个版本,它们采用(par) int、var int 和var opt int. 的数组我需要第四个版本,采用(par) opt int,因为<> 是@ 类型987654333@.
我最初尝试做类似的事情
array[Job] of array[int] of array[int]: jobOptions
制作一个“非方形”数组,但如果可行的话,我无法找出正确的语法。
有没有办法初始化缺少可选元素的 3d 参数数组?或者,有没有更好的方法来呈现这些数据?
【问题讨论】: