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

CPLEX读写数据文件报错“Data element Example已设置”的解决方法

问题解决:Data element Example has been already set

错误原因

你在模型里已经通过int Example [i in Number]=i;给Example数组直接赋值了,之后main函数又加载了包含Example定义的Example.dat数据文件,同一个数据元素被重复设置,所以触发了这个错误。

解决方案

下面三种方法选一个就行:

方法1:模型只声明变量,让数据文件提供值

把模型里的Example改成仅声明不赋值,让数据文件来提供它的值:

range Number= 0..6;
int Example [i in Number]; // 只声明,不赋值

execute
{
 var o=new IloOplOutputFile("Example.dat");
 o.writeln("Example=");
 o.writeln(Example);
 o.writeln(";");
 o.close();
}

这样模型里的Example只是占位,实际值由加载的Example.dat提供,不会冲突。

方法2:重命名变量避免重复

如果要保留模型里的Example赋值,同时还要读取数据文件到另一个数组,就把其中一个变量名改掉:

  1. 修改execute块的写入代码,输出的变量名换成ExampleFromFile:
execute
{
 var o=new IloOplOutputFile("Example.dat");
 o.writeln("ExampleFromFile=");
 o.writeln(Example);
 o.writeln(";");
 o.close();
}
  1. 在模型里新增一个数组来接收这个值:
range Number= 0..6;
int Example [i in Number]=i;
int ExampleFromFile [i in Number]; // 新增数组,用来读数据文件的内容

两个变量名不同,就不会出现重复设置的问题。

方法3:去掉重复的数据源加载

如果你的需求只是写入数据文件,不需要在同一个模型里读取它,直接删掉main函数里加载Example.dat的代码:

main {
 var source = new IloOplModelSource("Write and read from the data file.mod");
 var cplex = new IloCplex();
 var def = new IloOplModelDefinition(source);
 var opl = new IloOplModel(def,cplex);
 // 删掉下面这两行,避免加载重复的数据源
 // var data = new IloOplDataSource("Example.dat");
 // opl.addDataSource(data);
 opl.generate();
 if (cplex.solve())
 {
   writeln("OBJ = " + cplex.getObjValue());
 }
 else
 {
   writeln("No solution");
 }
}

内容的提问来源于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 03:05:30