2017-11-03 19 views
1

GLPK for Java(http://glpk-java.sourceforge.net/)のバイナリ変数に基づいて線形プログラミングの問題を解決しようとしていますが、計算結果から変数の分数結果が得られます。GLPK for Java - バイナリ変数MIPは小数点以下の結果を返します

データが係数を含む表である。私は、コードの大部分を省略したが、重要な部分は、バイナリ

GLPK.glp_add_cols(lp, data.size()); 
for (int i = 0; i < data.size(); i++) { 
      GLPK.glp_set_col_name(lp, i + 1, "x" + (i + 1)); 
      GLPK.glp_set_col_kind(lp, i + 1, GLPKConstants.GLP_BV); 
      } 

として私は変数を定義以下であります

私はpresolverに

glp_iocp iocpParm = new glp_iocp(); 
iocpParm.setPresolve(GLPK.GLP_ON); 
GLPK.glp_init_iocp(iocpParm); 
ret = GLPK.glp_intopt(lp, iocpParm); 

を使用して問題を解決しようとすると、私は単純に使用して前処理を追加した場合、結果はエラー

glp_intopt: optimal basis to initial LP relaxation not provided 
The problem could not be solved 

です(ドキュメントにより示唆されるように)

glp_smcp smcpParm = new glp_smcp(); 
GLPK.glp_init_smcp(smcpParm); 
GLPK.glp_simplex(lp, smcpParm); 

結果は分数である

Problem created 
GLPK Simplex Optimizer, v4.63 
1 row, 4 columns, 4 non-zeros 
     0: obj = 0.000000000e+00 inf = 1.231e+03 (1) 
     1: obj = 1.231000000e+03 inf = 0.000e+00 (0) 
OPTIMAL LP SOLUTION FOUND 
GLPK Integer Optimizer, v4.63 
1 row, 4 columns, 4 non-zeros 
4 integer variables, all of which are binary 
Integer optimization begins... 
+  1: mip =  not found yet >=    -inf  (1; 0) 
Solution found by heuristic: 1600 
+  2: >>>>> 1.400000000e+03 >= 1.400000000e+03 0.0% (1; 0) 
+  2: mip = 1.400000000e+03 >=  tree is empty 0.0% (0; 1) 
INTEGER OPTIMAL SOLUTION FOUND 
z = 1231.0 
x1 = 0.769375 
x2 = 0.0 
x3 = 0.0 
x4 = 0.0 

バイナリソリューションはどのように入手できますか?

+1

どのように結果を読んでいますか? – harold

+1

あなたはポイントを持っている!ありがとう。私はglp_mip_col_valの代わりにglp_get_col_primを使っていました。あなたが答えを書くなら、私はそれを受け入れるでしょう。 – sthor69

答えて

1

GLPKは、さまざまな種類のソルバ(MIP、内部点、シンプレックス)に対して別々の結果を保持するため、特定のソルバの結果を得るには、対応する関数を使用する必要があります。

  • シンプレックスソルバーを使用して結果を得るには、glp_get関数を使用します。
  • 内部ポインタソルバの場合は、glp_iptの関数を使用します。
  • MIPソルバについては、glp_mip関数を使用してください。

残りの関数名は少し矛盾しています。

関連する問題