2011-10-29 1 views
4

Apache Commonsの数学でint,doubleなどの決定変数の型を設定する方法SimplexSolver?以下のプログラムの出力はこれです:バイナリ、int、doubleのような決定変数の型をApache Commons Math SimplexSolverで設定するには?

332.6666666666667 
1.0 
8331.666666666668 

私は決定変数の型intないdoubleのようにしたいです。整数決定変数として解決された場合、出力は333, 0, 8325でなければなりません。

public static void testSample() throws OptimizationException { 
    LinearObjectiveFunction f = new LinearObjectiveFunction(new double[]{25, 15}, 0); 
    Collection<LinearConstraint> constraints = new ArrayList<LinearConstraint>(); 
    constraints.add(new LinearConstraint(new double[]{5, 8}, Relationship.LEQ, 5000)); 
    constraints.add(new LinearConstraint(new double[]{1, 4}, Relationship.LEQ, 1500)); 
    constraints.add(new LinearConstraint(new double[]{3, 2}, Relationship.LEQ, 1000)); 
    constraints.add(new LinearConstraint(new double[]{1, 0}, Relationship.GEQ, 1)); 
    constraints.add(new LinearConstraint(new double[]{0, 1}, Relationship.GEQ, 1)); 

    SimplexSolver solver = new SimplexSolver(); 
    RealPointValuePair solution = solver.optimize(f, constraints, GoalType.MAXIMIZE, true); 

    System.out.println(solution.getPoint()[0]); 
    System.out.println(solution.getPoint()[1]); 
    System.out.println(solution.getValue()); 
} 

答えて

2

NumberFormatこのために便利である。

NumberFormat nf = NumberFormat.getIntegerInstance(); 
System.out.println(nf.format(solution.getPoint()[0])); 
System.out.println(nf.format(solution.getPoint()[1])); 
System.out.println(nf.format(solution.getValue())); 

コンソール:

 
333 
1 
8,332 

補遺:このアプローチは、simplex algorithmが実数及び結果(複数可)を使用して適用されることを前提とに丸め整数。パッケージorg.apache.commons.math.optimization.linearには他の実装はありません。代替方法として、Maxtrix<Rational>JScience)をご利用ください。

+0

こんにちは、ありがとうございます。あなたの答えでは、それは最適化とは何の関係もない番号のフォーマットです。 333 1 8332は最適化された答えではありません。最適化された解は333 0 8325です。決定変数の型を設定することにより、実際の最適化を得ることができます。それを行う方法を身体が知っていますか? – user1020082

+1

ああ、私は誤解しました。上記より。申し訳ありませんがあなたの質問を誤って編集しました。 – trashgod

関連する問題