3

MATLAB の fminsearch() が行うことを Java で実現する簡単な方法を探しています。fminsearch ほど一般的である必要はありません。私の場合は、単一変数の非線形関数の最小値 (最小の関数とパラメーター値) を見つけたいだけです。関数の解析式はわかりませんが、簡単に評価できます。

これを実行するライブラリ、または再実装できる簡単なアルゴリズムを知っていますか?

注: Apache の共通演算にはこのようなもの (UnivariateOptimizer) があるように見えますが、ほとんどのメソッドは廃止されているようで、使用方法についての適切な説明が見つかりませんでした。それに関連するヒントも大歓迎です。

ありがとう!

4

1 に答える 1

4

Apache Commons Mathは、通常、Java での数値計算を開始するのに適した場所です。使用方法は、 API ドキュメントと、さまざまなクラスとメソッドの単体テスト ソース コードを参照して、例から学ぶのが最適です。

ご指摘のとおり、ユーザー ガイドで参照されている最適化クラスは非推奨です。それらは引き続き呼び出すことができますが、最終的にはもちろんライブラリから段階的に廃止されます。理由は不明ですが、進行中の最適化開発は現在、最適化サブパッケージではなく最適化で行われています。

一変量関数 (局所最適) の最小化のために、Apache Commons MathはBrentメソッドの実装を提供します。使用法は、の単体テストで概説されており、そこから次のBrentOptimizer抜粋をコピーしました。

@Test
public void testSinMin() {
    UnivariateFunction f = new Sin();
    UnivariateOptimizer optimizer = new BrentOptimizer(1e-10, 1e-14);

    Assert.assertEquals(3 * Math.PI / 2, 
        optimizer.optimize(new MaxEval(200),
                           new UnivariateObjectiveFunction(f),
                           GoalType.MINIMIZE,
                           new SearchInterval(4, 5)).getPoint(), 1e-8);

    Assert.assertTrue(optimizer.getEvaluations() <= 50);
    Assert.assertEquals(200, optimizer.getMaxEvaluations());
    ...
}
于 2013-04-15T05:53:22.583 に答える