フロー制御を使用して CPLEX opl でコーディング中にエラーが見つかりました。構成ファイルを実行すると、エラーが発生します: データ要素 "x" は既に設定されています。(リソース = 2.dat)。同じエラーを解決しようとしているため、「メイン」ブロックを使用して複数のモデルでデータを共有するからクエリをコピーしました。
質問のリストがあります:
1 . モデルに定義済みの変数 (例: "int x = 1;") があり、同じ変数を使用して (.dat ファイルまたは addDataSource() を使用して) 外部データをロードすると、"Data element "x" エラーが発生します。すでに設定されています。」そのような場合を無視するか、代わりに x の既存の値を上書きするように OPL に指示するにはどうすればよいでしょうか。コードがここで終了しないようにしたいだけです。
2 . モデルに「int x = ...;」がある場合 外部データソースがそれを提供しない場合、「外部データ要素 "x" は定義されていません」というエラーが発生します。ジェネレーションステップで。このようなエラーを無視するにはどうすればよいですか? 「int x;」として扱えるようです。外部データによって提供されない場合。
3 . モデルに変数の定義がなく、外部データにある場合、「要素 "x" が定義されていません。」というエラーが発生します。同じ質問、そのようなエラーを無視する方法、終了を避ける方法。
私を助けてくれてありがとう。以下は、私の小さなサンプル コードと .dat ファイルの説明です。
int a = 5;
range g1 = 1..a;
int x[g1] = ...;
int y[g1] = ...;
minimize sum (i in g1) 3*x[i];
subject to {
forall (i in g1)
3*x[i] + 4*y[i] <= 300;
}
main{
var iteration=1;
var piece = 5;
while(iteration<=3)
{
var src = new IloOplModelSource("practice.mod");
var def = new IloOplModelDefinition(src);
var opl = new IloOplModel(def,cplex);
var filename=iteration;
var data = new IloOplDataSource(filename+".dat");
opl.addDataSource(data);
var details=opl.dataElements;
opl.generate();
if(cplex.solve())
{
writeln(filename+"->"+1);
}
else
{
writeln(filename+"->"+0);
}
iteration++;
}
}
データ ファイルは次のとおりです。
1.dat
x = [218,60,156,221,211];
y = [0,0,0,0,0];
2.dat
x = [218,60,156,221,211];
y = [1,2,1,5,1];
3.dat
x = [218,60,156,221,211];
y = [2,3,5,2,6];