2016-09-03 4 views
0

commons-math(ver.2.2)にはLPソルバがありました。apache.commons.math3 - 線形プログラミングの使い方

Here私は従うサンプルコードが見つかりました:しかし

import java.util.ArrayList; 
import java.util.Collection; 

import org.apache.commons.math.optimization.GoalType; 
import org.apache.commons.math.optimization.OptimizationException; 
import org.apache.commons.math.optimization.RealPointValuePair; 
import org.apache.commons.math.optimization.linear.LinearConstraint; 
import org.apache.commons.math.optimization.linear.LinearObjectiveFunction; 
import org.apache.commons.math.optimization.linear.Relationship; 
import org.apache.commons.math.optimization.linear.SimplexSolver; 

@SuppressWarnings("deprecation") 
public class Main { 
    @SuppressWarnings({ "rawtypes", "unchecked"}) 
    public static void main(String[] args) { 
     //describe the optimization problem 
     LinearObjectiveFunction f = new LinearObjectiveFunction(new double[] { 3, 5}, 0); 

     Collection 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)); 

     constraints.add(new LinearConstraint(new double[] { 1, 0}, Relationship.GEQ, 0)); 
     constraints.add(new LinearConstraint(new double[] { 0, 1}, Relationship.GEQ, 0)); 

     //create and run solver 
     RealPointValuePair solution = null; 
     try { 
      solution = new SimplexSolver().optimize(f, constraints, GoalType.MAXIMIZE, false); 
     } 
     catch (OptimizationException e) { 
      e.printStackTrace(); 
     } 

     if (solution != null) { 
      //get solution 
      double max = solution.getValue(); 
      System.out.println("Opt: " + max); 

      //print decision variables 
      for (int i = 0; i < 2; i++) { 
       System.out.print(solution.getPoint()[i] + "\t"); 
      } 
     } 
    } 
} 

を、最新の数学のバージョン(3.6.1)

のMavenの依存関係を追加するとき、私は最も関連するクラスが廃止されて表示され、I更新されたバージョンのコード例は見つかりませんでした。

私のLP問題に3.6.1を使用してうれしいです - 誰かがここで助けてくれますか?バージョン内のリンクから

+0

、それがお役に立てば幸いです。しかしおそらく理由があると言われています**なぜ彼らは非難されているのですか?読書を続けると、その図書館の秘密を学ぶことができます。 – Kayaman

+0

おそらくあなたがやろうとしていることの例(非難されたAPIを使って)を投稿した場合、非難される方法を見つけるのを助けるかもしれません。 – alexbt

答えて

2

コモンズ・数学にバージョン2.

を使用しているコモンズの数学のメインパッケージはorg.apache.commons.math3にバージョン2 org.apache.commons.mathから変更すると思われる3

に使用されるクラス例はorg.apache.commons.math.optimizationパッケージです。このコンセントの場合、新しいバージョンのパッケージはorg.apache.commons.math3.optimです。

バージョン3へバージョン2からのサンプルコードは、次のようになります。

package commons.math; 

import java.util.ArrayList; 
import java.util.Collection; 

import org.apache.commons.math3.optim.PointValuePair; 
import org.apache.commons.math3.optim.linear.LinearConstraint; 
import org.apache.commons.math3.optim.linear.LinearConstraintSet; 
import org.apache.commons.math3.optim.linear.LinearObjectiveFunction; 
import org.apache.commons.math3.optim.linear.Relationship; 
import org.apache.commons.math3.optim.linear.SimplexSolver; 
import org.apache.commons.math3.optim.nonlinear.scalar.GoalType; 

public class MathTest { 

    public static void main(String[] args) { 
     //describe the optimization problem 
     LinearObjectiveFunction f = new LinearObjectiveFunction(new double[] { 3, 5}, 0); 

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

     constraints.add(new LinearConstraint(new double[] { 1, 0}, Relationship.GEQ, 0)); 
     constraints.add(new LinearConstraint(new double[] { 0, 1}, Relationship.GEQ, 0)); 

     //create and run solver 
     PointValuePair solution = null; 
     solution = new SimplexSolver().optimize(f, new LinearConstraintSet(constraints), GoalType.MAXIMIZE); 

     if (solution != null) { 
      //get solution 
      double max = solution.getValue(); 
      System.out.println("Opt: " + max); 

      //print decision variables 
      for (int i = 0; i < 2; i++) { 
       System.out.print(solution.getPoint()[i] + "\t"); 
      } 
     } 
    } 
} 

は何かが廃止されましたからといって、それを使用することができないという意味ではありません

+0

ご協力いただきありがとうございます。 –

関連する問題