2017-10-12 11 views
0

不等式制約を与えられた目的関数の最小値と最大値を計算する方法をapache commons math libraryはどのようにしますか? apacheのコモンライブラリは、このために適用されないものをアルゴリズムapache commons LinearObjectiveFunctionアルゴリズム

例えば

maximize 3x1+5x2 
given - 2x1+8x2<=13 
5x1-x2<=11 
x1>=0,x2>=0 

+0

あなたの質問に対する私の答えのフィードバックをお願いします。否定的または肯定的なフィードバックは非常に歓迎され、全くフィードバックよりも優れています。 –

答えて

1

Apacheコモンズの計算にはSimplexソルバーがあります。

あなたはこのライブラリを使用して、このようなあなたの問題を解決することができます:

@Test 
public void testMathStackOverflow() { 
    //  maximize 3x1+5x2 
    //  subject to 
    //   2x1+8x2<=13 
    //   5x1-x2<=11 
    //    x1>=0 
    // x2>=0 

    LinearObjectiveFunction f = new LinearObjectiveFunction(new double[] { 3, 5}, 0); 

    ArrayList<LinearConstraint> constraints = new ArrayList<>(); 

    constraints.add(new LinearConstraint(new double[] {2, 8}, Relationship.LEQ, 13)); 
    constraints.add(new LinearConstraint(new double[] {5, -1}, Relationship.LEQ, 11)); 

    double epsilon = 1e-6; 
    SimplexSolver solver = new SimplexSolver(); 
    PointValuePair solution = solver.optimize(f, new LinearConstraintSet(constraints), 
      GoalType.MAXIMIZE, 
      new NonNegativeConstraint(true), 
      PivotSelectionRule.BLAND); 
    System.out.printf("x1: %f; x2: %f; max: %f", solution.getPoint()[0], solution.getPoint()[1], solution.getValue()); 
} 

結果は次のとおりです。

x1: 2.404762; x2: 1.023810; max: 12.333333 

私はこれらの依存関係を使用している:より多くの例については

​​

をこのライブラリのSimplexソルバーの使用法は、ソースコードをダウンロードし、パッケージ:

org.apache.commons.math4.optim.linear 
関連する問題