1

フロー制御を使用して 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];
4

1 に答える 1