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

成员为集合的两个集合的逐成员并集求解(CPLEX代码报错)

问题描述

我有两个成员为集合的集合,需要生成它们的逐成员并集:

  • Sub_odd_odd:所有奇数节点的奇数子集,共128个成员
  • Sub_even_even:所有偶数节点的偶数子集,共7个成员

目标是定义新集合Sub_odd_even,包含前两个集合中每个成员对的并集,示例如下:

A=[{1,2,3},{4}] B=[{6}] AB = [{1,2,3,6},{4,6}]

尝试了以下CPLEX代码,均报错:

int num_odd_even1 = card(Sub_even_even);
int num_odd_even2 = card(Sub_odd_odd);
int num_odd_even = odd_even1 * odd_even2

{int} Sub_odd_even = {i * j | i in Sub_odd_odd, j in Sub_even_even};
{int} Sub_odd_even = {foreach (i in Sub_odd_odd, j in Sub_even_even) i * j};
{int} Sub_odd_evev[oe in num_odd_even] = {item(Sub_odd, i-1) | i in 1..subr and j in 1..subre};
解决方法

在CPLEX OPL中实现该需求,需注意以下要点:

  1. 修正集合类型:Sub_odd_odd和Sub_even_even的类型应为{{int}}(集合的集合),而非{int}(普通整数集合),否则无法存储子集成员。
  2. 正确的并集推导式:使用union操作符合并每个成员对,集合推导式本身支持遍历逻辑,无需额外foreach:
// 假设Sub_odd_odd和Sub_even_even已定义为{{int}}类型
{{int}} Sub_odd_even = { i union j | i in Sub_odd_odd, j in Sub_even_even };
  1. 错误原因解析:

    • 用i * j是算术乘法,不是集合合并操作,完全不符合需求
    • 集合推导式内不能嵌套foreach,属于语法错误
    • 最后一段代码存在变量名拼写错误(Sub_odd_evev)、未定义变量(subr/subre),且数组式集合定义逻辑错误
  2. 可选:统计总成员数:
    如果需要计算新集合的总成员数,变量名要保持一致:

int num_odd = card(Sub_odd_odd);
int num_even = card(Sub_even_even);
int num_total = num_odd * num_even;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 17:33:16