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

在CPLEX中初始化三维数组报错,如何解决该语法错误?

CPLEX三维数组初始化错误修复方案

你在CPLEX中初始化三维数组时触发语法错误,报错信息为unexpected '[' expecting ']',错误代码如下:

int t=4;  
int b=3;  
int e=5; 
range time =1..t;  
range bus=1..b; 
range ev=1..e; 
float soci[ev][bus][time]=[[[0.5,0.3,0.8,0.7], [0.5,0.3,0.8,0.7], [0.5,0.3,0.8,0.7]] [[0.5,0.3,0.8,0.7], [0.5,0.3,0.8,0.7], [0.5,0.3,0.8,0.7]] [ [0.5,0.3,0.8,0.7], [0.5,0.3,0.8,0.7], [0.5,0.3,0.8,0.7]] [ [0.5,0.3,0.8,0.7], [0.5,0.3,0.8,0.7], [0.5,0.3,0.8,0.7]] [ [0.5,0.3,0.8,0.7], [0.5,0.3,0.8,0.7], [0.5,0.3,0.8,0.7]]];

错误原因

三维数组的嵌套结构中,相邻的二维数组块之间缺少逗号分隔。CPLEX的OPL语法要求同一层级的数组元素必须用逗号分隔,否则解析器无法识别数组边界,进而触发语法错误。

修正后的代码

在每一组对应ev维度的二维数组块之间添加逗号即可修复:

int t=4;  
int b=3;  
int e=5; 
range time =1..t;  
range bus=1..b; 
range ev=1..e; 
float soci[ev][bus][time]=[
    [[0.5,0.3,0.8,0.7], [0.5,0.3,0.8,0.7], [0.5,0.3,0.8,0.7]], 
    [[0.5,0.3,0.8,0.7], [0.5,0.3,0.8,0.7], [0.5,0.3,0.8,0.7]], 
    [[0.5,0.3,0.8,0.7], [0.5,0.3,0.8,0.7], [0.5,0.3,0.8,0.7]], 
    [[0.5,0.3,0.8,0.7], [0.5,0.3,0.8,0.7], [0.5,0.3,0.8,0.7]], 
    [[0.5,0.3,0.8,0.7], [0.5,0.3,0.8,0.7], [0.5,0.3,0.8,0.7]]
];

更简洁的初始化方式

由于你所有ev和bus维度对应的时间序列值完全相同,还可以用循环赋值简化代码,避免重复书写:

int t=4;  
int b=3;  
int e=5; 
range time =1..t;  
range bus=1..b; 
range ev=1..e; 
float soci[ev][bus][time];

// 循环赋值
execute {
    for(var e in ev) {
        for(var b in bus) {
            soci[e][b][1] = 0.5;
            soci[e][b][2] = 0.3;
            soci[e][b][3] = 0.8;
            soci[e][b][4] = 0.7;
        }
    }
}

或者直接用数组推导式(OPL支持):

int t=4;  
int b=3;  
int e=5; 
range time =1..t;  
range bus=1..b; 
range ev=1..e; 
float soci[ev][bus][time] = [e in ev][b in bus][t in time: t==1?0.5 : t==2?0.3 : t==3?0.8 : 0.7];

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 17:27:23