You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在OPL/CPLEX中基于现有集合组件创建新集合的技术求助

嘿,我来帮你搞定这个OPL集合转换的问题!你的需求很清晰:把原始的父子元组集合,转换成每个目标项对应所有子项集合的新集合,我来给你修正代码并解释清楚。

首先,你原来的初始化语句问题出在没有正确聚合同一个Item的所有Child到一个集合里,而且语法也不符合OPL的集合推导规则。下面是正确的实现代码:

tuple child{
 string Item;
 string Child;
}
{child} Children = ...; // 读取原始集合S

tuple dependents{
 string Item;
 {string} ItemChildren;
}

// 正确生成目标集合S'的语句
{dependents} dependentsSet = {
    <item, {c.Child | c in Children where c.Item == item}> 
    | item in {c.Item | c in Children}
};

代码解释:

  1. 第一步{c.Item | c in Children}:先从原始集合里提取出所有唯一的目标项(也就是"A"、"B"、"AB"、"C"、"ABC"这些值),避免重复处理同一个Item。
  2. 第二步{c.Child | c in Children where c.Item == item}:对每个唯一的item,筛选出原始集合里所有属于这个item的子项,把它们的Child字段收集成一个字符串集合。
  3. 最后把每个item和对应的子项集合组合成dependents元组,整体构成你需要的dependentsSet。

这样生成的dependentsSet就完全符合你想要的S'结构:

  • <"A", {""}>
  • <"B", {""}>
  • <"AB", {"A", "B"}>
  • <"C", {""}>
  • <"ABC", {"A", "B", "C", "AB"}>

之后你就可以在约束里正常索引每个Item的ItemChildren集合啦。

内容的提问来源于stack exchange,提问作者tjnel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:38:17