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

CPLEX OPL中对tuple按源节点汇总功耗并存储的实现方法咨询

OPL 按源节点汇总功耗的实现方案

基础结构定义

首先定义对应存储原始数据的tuple结构,以及相关参数:

// 定义存储单条节点功耗的tuple
tuple PowerRecord {
    int SourceNodes;
    float PowerConsumptionArray;
}

// 原始数据集合,可替换为你的实际数据源
{PowerRecord} rawRecords = ...;

两种求和实现方式

方式1:OPL原生聚合表达式(最简洁,推荐)

直接通过sum聚合函数按节点筛选求和,无需写遍历逻辑,自动生成对应索引的总功耗数组:

// 先获取所有存在的源节点编号,支持非连续节点编号
{int} allNodes = {r.SourceNodes | r in rawRecords};

// 直接生成以节点编号为索引的总功耗数组
float totalPowerPerNode[node in allNodes] = sum(r in rawRecords: r.SourceNodes == node) r.PowerConsumptionArray;

如果你的节点编号是连续的整数范围,也可以直接指定范围作为索引:

// 比如节点编号范围是1~10,就可以直接写
float totalPowerPerNode[1..10] = sum(r in rawRecords: r.SourceNodes == node) r.PowerConsumptionArray;

方式2:execute脚本块遍历计算

如果你需要在脚本中动态处理,可以用遍历累加的方式实现:

// 先初始化总功耗数组,默认值为0
{int} allNodes = {r.SourceNodes | r in rawRecords};
float totalPowerPerNode[allNodes] = 0;

execute {
    for (var record in rawRecords) {
        totalPowerPerNode[record.SourceNodes] += record.PowerConsumptionArray;
    }
}

效果验证

以你举的例子为例,当原始数据包含{<2,22>, <2,0>}两条记录时,最终totalPowerPerNode[2]的计算结果就是22,符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 08:54:03