0

SuanShu 最適化ライブラリを使用して次の問題を解決しようとしましたが、成功しませんでした。

最適化問題は次のとおりです。

次の制約が成り立つような最大の積分 h を見つけます。

(h-2) * ArithmeticUtils.binomialCoefficient(b+h-2, h-1) -
        ArithmeticUtils.binomialCoefficient(b+h-3, h-3) +
        ArithmeticUtils.binomialCoefficientDouble(b+h-3,h-2)
        - 2*epsilon*N

ここで、b、epsilon、N が指定され、それぞれ int、double、int です。

どのオプティマイザとどの最適化機能を使用すればよいか教えてください。

これまでのコードは次のようになります。

    public void optimize(){
            //create the univariate function to be optimized
    UnivariateRealFunction functionToOptimize = new UnivariateRealFunction() {

        @Override
        public double evaluate(double h) {
            return -h;
        }
    };
    UnivariateRealFunction hConstraint = new UnivariateRealFunction() {

        public double evaluate(double h) {
                          (h-2) * ArithmeticUtils.binomialCoefficient(b+h-2, h-1) -
                                  ArithmeticUtils.binomialCoefficient(b+h-3, h-3) +
                                  ArithmeticUtils.binomialCoefficientDouble(b+h-3,h-2)
                                  - 2*epsilon*N
        }
    };

    List<RealScalarFunction> constraints = new ArrayList<RealScalarFunction>();
    constraints.add(hConstraint);

    ConstrainedOptimProblem problem = new ConstrainedOptimProblem(
            functionToOptimize, 
            null, 
            new GeneralLessThanConstraints(constraints));

    BFGS bfgs = new BFGS();

    PenaltyMethodMinimizer optim = new PenaltyMethodMinimizer(
            PenaltyMethodMinimizer.DEFAULT_PENALTY_FUNCTION_FACTORY, 
            1e30,
            bfgs);

    optim.solve(problem,1e-3,200);

    Vector xmin = optim.search(new DenseVector(new int[]{8}));
    double fxmin = functionToOptimize.evaluate(xmin.get(1));    
    System.out.println("fxmin: "+fxmin);
    System.out.println(String.format("f(%s) = %f",
            DoubleUtils.doubleArray2StringArray(xmin.toArray()), fxmin));

    }

私は Apache commons math library を調べましたが、この問題でそれを使用する方法についての手がかりがありません。

4

2 に答える 2

0

SuanShuを使用している場合は、ブルートフォースミニマライザーまたはDeOptimを試すことができます。DeOptimの場合、次のように、積分制約セルファクトリをコーディングする必要があります。IntegralCellFactory.java

于 2012-07-22T19:17:55.340 に答える
0

Apache commons を使用するという考えを断念しました。これは主に、非線形制約を伴う最適化問題にはあまり役に立たないためです。ブルートフォースミニマイザーを使用しましたが、うまくいきました。

于 2012-07-17T23:28:54.640 に答える