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

如何在CPLEX OPL模型中实现数据文件读写及数组数据复用

在CPLEX OPL中从.dat文件读取数组到新数组的实现方法

你可以通过以下步骤在同一OPL模型内完成写入数组到.dat文件,再读取该文件内容到新数组的操作,且使用main函数控制执行流程:

完整实现代码

range Number = 0..6;
int Example[i in Number] = i;

// 1. 将原数组写入Example.dat文件
execute {
  var o = new IloOplOutputFile("Example.dat");
  o.writeln("Example=");
  o.writeln(Example);
  o.writeln(";");
  o.close();
}

// 定义存储读取结果的新数组
int NewExample[Number];

// 2. 用main函数读取文件并赋值给新数组
main {
  // 先执行模型初始化和文件写入逻辑
  thisOplModel.generate();
  
  // 读取Example.dat的全部内容
  var inputFile = new IloOplInputFile("Example.dat");
  var fileContent = inputFile.readAll();
  inputFile.close();
  
  // 解析文件中的数组值:提取[]内的数值部分
  var numStr = fileContent.match(/\[([^\]]+)\]/)[1];
  // 分割字符串并转换为整数数组
  var numValues = numStr.split(",").map(s => parseInt(s.trim()));
  
  // 将解析后的数值赋值给新数组
  for (var idx = 0; idx < numValues.length; idx++) {
    thisOplModel.NewExample[idx] = numValues[idx];
  }
  
  // 输出验证读取结果
  writeln("读取完成,新数组NewExample的值:");
  writeln(thisOplModel.NewExample);
}

关键说明

  • 执行顺序控制:通过thisOplModel.generate()先触发模型的初始化和execute块的执行,确保Example.dat文件被正确生成后再进行读取操作。
  • 文件解析逻辑:利用正则表达式提取.dat文件中数组的数值部分,再通过字符串分割、类型转换得到整数数组,最后循环赋值给新数组。
  • 结果验证:在main函数末尾输出新数组的值,可直接确认读取是否成功。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 00:55:19