首页 > 解决方案 > CP - OPL 切片输入数组

问题描述

我想我需要一些关于 OPL 语言的帮助:/ 我的代码如下:

using CP;

int NbMchs = ...;
range Mchs = 0..NbMchs-1;

tuple Mode {
  int opId;
  int mch;
  int pt;
};

{Mode}      Modes = ...;

// Not Working...
int test[m in Mchs] =  all(md in Modes: md.mch == m) md.opId;

我想要做的是从Modes仅包含元组的 opId 字段的结构中提取 m 个一维数组。每个test[m]数组都必须包含它对应的元素:即元组mdwhere的 opId 字段md.mch =m

我从上面的代码中得到的错误是“Cannot use type int[] for int”。似乎上述函数的右侧返回了一个整数,但我在想all()运算符是我可以用来完成这项工作的那个。

提前致谢

标签: constraint-programmingopl

解决方案


在一般情况下,opId 的数量取决于机器 m,因此您不能在这里真正拥有二维数组。我会使用一组集合:

{int} test[m in Mchs] =  { md.opId | md in Modes: md.mch == m };

请注意,它假定每个 opId,mch 只有一种模式。


推荐阅读