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

初始化3D数组报错:非数组类型及范围不存在,如何导入14个矩阵?

解决GAMS中3D数组初始化报错问题

问题根源

  1. 导入数据维度不匹配:你当前SheetRead的范围Sheet1!B2:CW337列数超出了nv=100的设定,且未明确声明导入数组的维度,导致GAMS无法识别其为数组类型。
  2. 错误使用item函数:item用于访问集合元素,而非数组维度转换,直接用它处理二维导入数据会触发范围不存在的报错。

修复步骤

1. 修正数据文件(导入二维数组)

确保Excel中14个24×100的矩阵是纵向连续堆叠(每个矩阵占24行,14个共336行),然后修改数据导入代码,明确声明数组维度:

SheetConnection excel1("soc3d.xlsx");
// 声明二维数组:行数=14*24=336,列数=100
float array[1..336, 1..100];
// 修正列范围:B到CV对应100列(替换原CW)
array from SheetRead(excel1,"Sheet1!B2:CV337");

2. 修正模型文件(二维转三维数组)

通过索引映射将导入的二维数组直接转换为三维数组,无需使用item函数:

int nb=14;
int t=24;
int nv=100;
range nbus=1..nb;
range tavail=1..t;
range nport=1..nv;

// 导入二维数组
float array[1..nb*t, 1..nv]=...;

// 通过索引计算直接赋值三维数组
float soc[nbus][tavail][nport] = array[(nbus-1)*t + tavail][nport];

验证要点

  • 检查Excel数据:确保14个矩阵无空行空列,连续排列在B2开始的区域。
  • 核对维度:确认导入范围的行数是14*24=336(第2行到第337行),列数是100(B到CV)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 18:31:03