IBM CPLEX ILOG报错:Excel范围大小与数组不匹配问题求助
问题排查与解决方案
针对Excel连接时的demand报错问题
- 检查Excel中
demand数据范围的隐藏行/列:CPLEX读取Excel时会自动跳过隐藏行,即便你选中的范围包含266行,若其中有隐藏行,实际读取数量会小于数组定义的大小。取消所有行/列隐藏后重新确认范围。 - 确认范围引用的绝对正确性:使用绝对引用格式(如
Sheet1!$B$2:$B$267),避免相对引用导致范围偏移;同时检查范围是否包含了表头,若表头被误纳入,会导致数据行数多1行。 - 排查单元格异常格式:检查
demand列是否有合并单元格、文本型数字或空值单元格,这类异常会导致CPLEX无法正确识别数据行数量。将所有单元格统一设置为数值格式,确保无空值。 - 临时验证读取数量:在
.dat文件中添加以下代码,运行后查看实际读取的demand数量,对比预期的266:execute { writeln("实际读取的demand数量: ", demand.size); }
针对CSV导入后warehouses仅读取265个的问题
- 检查CSV文件的末尾空行:用文本编辑器打开CSV,确认最后一行是否为有效数据,若存在空行,CPLEX可能会忽略最后一行有效数据。删除多余空行后重新导入。
- 核对分隔符一致性:确认
.dat文件中定义的CSV分隔符(如sep=",")与实际CSV文件的分隔符完全一致,若分隔符不匹配会导致数据读取错位,某一行数据可能被拆分或合并。 - 检查特殊字符:查看
warehouses列是否包含换行符、制表符等特殊字符,这类字符会导致数据行识别错误。替换或删除所有特殊字符后重新生成CSV。 - 验证
warehouses读取数量:同样在.dat文件中添加代码,确认实际读取的数量:execute { writeln("实际读取的warehouses数量: ", warehouses.size); }
通用检查项
确认.mod文件中数组的定义维度与数据行数完全匹配,比如demand是否定义为float demand[1..266];,warehouses的索引范围是否对应266个元素。
内容的提问来源于stack exchange,提问作者CallMeMeow
相关产品推荐
相关产品推荐

