2

IBM ILOG CPLEX Optimization Studio でモデル化された線形問題があり、正しい解、つまり目的値を返します。シミュレーションの目的で、Java から呼び出す ILOG モデル モデル ファイルとデータ ファイルを使用します。

IloOplFactory.setDebugMode(false);
IloOplFactory oplF = new IloOplFactory();
IloOplErrorHandler errHandler = oplF.createOplErrorHandler(System.out);
IloOplModelSource modelSource = oplF.createOplModelSource("CDA_Welfare_Examination_sparse2.mod");
IloCplex cplex = oplF.createCplex();
IloOplSettings settings = oplF.createOplSettings(errHandler);
IloOplModelDefinition def=oplF.createOplModelDefinition(modelSource,settings);
IloOplModel opl=oplF.createOplModel(def,cplex);

String inDataFile =  path;
IloOplDataSource dataSource=oplF.createOplDataSource(inDataFile);
opl.addDataSource(dataSource);

opl.generate();
opl.convertAllIntVars(); // converts integer bounds into LP compatible format
if (cplex.solve()){                              
 }
else{
System.out.println("Solution could not be achieved, probably insufficient memory or some other weird problem.");
             }

ここで、Java から実際の決定変数 match[Matchable] にアクセスしたいと思います。

ILOG CPLEX Optimization Studio では、次の命名法を使用しています。

tuple bidAsk{
int b;
int a;  
}

{bidAsk} Matchable = ...;

dvar float match[Matchable];

Java では、次の方法で目的の値にアクセスします (問題なく動作します)。

double sol = new Double(opl.getSolutionGetter().getObjValue()); 

では、決定変数「一致」にアクセスするにはどうすればよいでしょうか。これまでのところ、私は

IloOplElement dVarMatch = opl.getElement("match");

しかし、私はそれ以上進むことができないようです。助けていただければ幸いです。どうもありがとう!

4

2 に答える 2

2

あなたは正しい軌道に乗っています。Matchable で有効な各bidAskを表すタプルを取得し、そのタプルを決定変数オブジェクトへのインデックスとして使用する必要があります。Visual Basic のサンプル コードを次に示します (たまたま今書いているコードは、Java に簡単に変換できるはずです)。

  ' Get the tuple set named "Matchable"
  Dim matchable As ITupleSet = opl.GetElement("Matchable").AsTupleSet
  ' Get the decision variables named "match"
  Dim match As INumVarMap = opl.GetElement("match").AsNumVarMap

  ' Loop through each bidAsk in Matchable
  For Each bidAsk As ITuple In matchable
     ' This is the current bidAsk's 'b' value
     Dim b As Integer = bidAsk.GetIntValue("b")

     ' This is the current bidAsk's 'a' value
     Dim a As Integer = bidAsk.GetIntValue("a")

     ' this is another way to get bidAsk.b and bidAsk.a
     b = bidAsk.GetIntValue(0)
     a = bidAsk.GetIntValue(1)

     ' This is the decision variable object for match[<b,a>]
     Dim this_variable As INumVar = match.Get(bidAsk)

     ' This is the value of that decision variable in the current solution
     Dim val As Double = opl.Cplex.GetValue(this_variable)
  Next
于 2013-04-12T22:30:56.733 に答える
1

次のように IloCplex-Object を介して変数値を取得できます。

cplex.getValue([variable reference]);

私はそのようなモデルを輸入したことはありません。Java でモデルを作成すると、意思決定変数への参照は簡単に手に入りますが、変数を取得する方法が必要です。ドキュメントを確認できます:

cplexドキュメント

于 2013-02-20T16:00:25.693 に答える