2016-08-17 2 views
0

列のモデリングを使用してcplexで簡単な問題を解決したいと考えています。ここで は、問題となっているJavaを使用したCplexでの列方向モデリング

maximize 2x + 3y 
subject to x<= 5 
      y<=2 
      x,y >=0 

そして、ここで私がそれを解決するために書かれているコードです:

public static void Model_1() { 
     try { 
      //create new model 
      IloCplex cplex = new IloCplex(); 
      //define variables 
      IloNumVar x; 
      IloNumVar y; 
      IloObjective objective; 
      objective = cplex.addMaximize(); 
      IloRange cons01; 
      IloRange cons02; 
      cons01 = cplex.addRange(0, 5, "c1"); 
      cons02 = cplex.addRange(0, 2, "c1"); 
      IloColumn new_col = cplex.column(objective, 2); 
      IloColumn new_col2 = cplex.column(objective,3); 
      new_col = new_col.and(cplex.column(cons01,1)); 
      new_col2 = new_col2.and(cplex.column(cons02,1)); 
      x = cplex.numVar(new_col, 0, Double.MAX_VALUE); 
      y = cplex.numVar(new_col, 0, Double.MAX_VALUE); 
//solve model 
      if (cplex.solve()) { 
       System.out.println("obj = "+cplex.getObjValue()); 
       System.out.println("x = "+cplex.getValue(x)); 
       System.out.println("y = "+cplex.getValue(y)); 
} 
      else { 
       System.out.println("Model not solved"); 
      } 
      cplex.end(); 
     } 
     catch (IloException exc) { 
      exc.printStackTrace(); 
     } 
    } 

しかし、私は正しい解を得ていないのですが。コードを書くのに間違いはありますか?

答えて

0

このタイプの問題をデバッグしようとすると、モデルをLP形式にエクスポートして、モデルを正しく生成しているかどうかを常に確認することが有効です。あなただけのcplex.solveを呼び出す前に、次のコード行を追加することでこれを行う:

cplex.exportModel("model.lp"); 

あなたがmodel.lpの内容は次のようになり、それを行う場合:

Maximize 
obj: 2 x1 + 2 x2 
Subject To 
c1: x1 + x2 - Rgc1 = 0 
c1: - Rgc1 = 0 
Bounds 
0 <= Rgc1 <= 5 
0 <= Rgc1 <= 2 
End 

これは2に光を当てますあなたのプログラムであなたが作ったタイプミス。

cons02 = cplex.addRange(0, 2, "c2"); 

cons02 = cplex.addRange(0, 2, "c1"); 

をそして、あなたは交換する必要があります:つまり、あなたは交換する必要があり

y = cplex.numVar(new_col, 0, Double.MAX_VALUE); 

y = cplex.numVar(new_col2, 0, Double.MAX_VALUE); 

でこれら2つの変更を行った後model.lp次のようになります。

Maximize 
obj: 2 x1 + 3 x2 
Subject To 
c1: x1 - Rgc1 = 0 
c2: x2 - Rgc2 = 0 
Bounds 
0 <= Rgc1 <= 5 
0 <= Rgc2 <= 2 
End 

そして、あなたはあなたのプログラムから、次のような出力が得られます。

obj = 16.0 
x = 5.0 
y = 2.0 
+0

おかげでたくさん:) – Dipta

+0

@rkershこんにちは私はCPLEXからも双対問題のモデルをエクスポートすることができます不思議でしたか? – Dipta

+0

@Dipta、Cplexがインタラクティブを意味する場合、答えはyesです。 – rkersh

関連する問題