Javaの数値計算ライブラリApache Commons Mathを使う(6) OptimizationのNelder-Mead SimplexでRosenbrock関数(5パラメータ)を最小になる点を探す。今回からGoogle Geminiも使ってみる。
今回はこの例題。
Apache Commons MathにはNelderMeadSimplexというクラスはあるのだが全然使い方がわからん…検索してもこれ、というのがない。
そこでGoogle Gemini 2.5 Proに聞いてみた。一発で動くのができた。
コードはこんな感じで。
|
import org.apache.commons.math3.analysis.MultivariateFunction;
import org.apache.commons.math3.optim.InitialGuess;
import org.apache.commons.math3.optim.MaxEval;
import org.apache.commons.math3.optim.PointValuePair;
import org.apache.commons.math3.optim.nonlinear.scalar.GoalType;
import org.apache.commons.math3.optim.nonlinear.scalar.ObjectiveFunction;
import org.apache.commons.math3.optim.nonlinear.scalar.noderiv.NelderMeadSimplex;
import org.apache.commons.math3.optim.nonlinear.scalar.noderiv.SimplexOptimizer;
import java.util.Arrays;
public class RosenbrockOptimizer {
public static void main(String[] args) {
// 1. 目的関数の定義 (5パラメータのRosenbrock関数)
// MultivariateFunctionインターフェースをラムダ式で実装します。
MultivariateFunction rosenbrock = (double[] x) -> {
double sum = 0.0;
// N次元のRosenbrock関数の公式に従って計算
for (int i = 0; i < x.length - 1; i++) {
double term1 = x[i+1] - x[i] * x[i];
double term2 = 1.0 - x[i];
sum += 100.0 * term1 * term1 + term2 * term2;
}
return sum;
};
// 2. オプティマイザの準備 (Nelder-Mead法)
// コンストラクタの引数は収束判定のための許容誤差です。
// (relative threshold, absolute threshold)
SimplexOptimizer optimizer = new SimplexOptimizer(1e-12, 1e-12);
// 3. 最適化の実行
System.out.println("5次元Rosenbrock関数の最小化を開始します...");
System.out.println("アルゴリズム: Nelder-Mead Simplex");
// 初期値 (原点から開始)
double[] startPoint = new double[]{1.3, 0.7, 0.8, 1.9, 1.2};
// Nelder-Meadシンプレックスを5次元で初期化
int dimension = 5;
NelderMeadSimplex simplex = new NelderMeadSimplex(dimension);
// 最適化を実行し、結果を取得
PointValuePair result = optimizer.optimize(
new MaxEval(20000), // 最大評価回数(終了条件)
new ObjectiveFunction(rosenbrock), // 目的関数
GoalType.MINIMIZE, // 目的(最小化)
new InitialGuess(startPoint), // 初期推測値
simplex // 使用するアルゴリズム(シンプレックス)
);
// 4. 結果の表示
System.out.println("----------------------------------------");
System.out.println("計算完了");
System.out.println("評価回数: " + optimizer.getEvaluations());
System.out.println("反復回数: " + optimizer.getIterations());
System.out.println("最小値 (f(x)): " + result.getValue());
System.out.println("その時の点 (x): " + Arrays.toString(result.getPoint()));
System.out.println("----------------------------------------");
System.out.println("理論上の最小値は f(1,1,1,1,1) = 0 です。");
}
}
|
結果:
5次元Rosenbrock関数の最小化を開始します...
アルゴリズム: Nelder-Mead Simplex
----------------------------------------
計算完了
評価回数: 617
反復回数: 386
最小値 (f(x)): 1.129924260917651E-12
その時の点 (x): [1.0000000580197625, 1.0000001155585465, 1.0000002391902205, 1.0000004894555592, 1.0000008896018324]
----------------------------------------
理論上の最小値は f(1,1,1,1,1) = 0 です。
すごいな。もう人間いらない…
« マクドナルドからの暗号をGoogle ColabのJulia言語で解く。 | トップページ | 高周波・RFニュース 2025年9月30日 Next G Allianceの6Gウェビナーは10月14日、Ansysのアレーアンテナ設計ウェビナーは本日、QualcommのWi-Fi 8解説記事、Huaweiが5G-AとAIの講演、Marvell、Semtechらが1.6T光インターコネクト発表 »
「パソコン・インターネット」カテゴリの記事
- RF Weekly Digest (Codexで作ったOllama経由のgemma4-26B-A4B QAT、DuckDuckGo Searchを使った高周波・RF情報の週刊まとめアプリ)2026/6/7-6/14(2026.06.14)
- ゼロから作るDeep Learning 6 LLM編を買った。めちゃくちゃわかりやすい。事後学習がこんなに重要とは知らなかった。KVキャッシュって何やってるか等も。Interface誌の7月号特集が作りながら学ぶTransformer/LLMなので一緒に読みながらだとより理解が深まる。(2026.06.11)
- Gemma 4 QATがOllama経由で使えるようになっていた。そこで今度はGoogle Antigravity(Gemini 3.5 Flash)にローカルLLMでRF情報一週間分まとめて日本語で要約するアプリ(gemma4-26B-A4B QAT、DuckDuckGo Search、Flask使用)を作ってもらう。画面デザインはこっちがいいな。(2026.06.15)
- Gemma 4 QATがOllama経由で使えるようになっていた。そこでCodex(GPT-5.5)に、これまでいまいちだったローカルLLMでRF情報一週間分まとめて日本語で要約するアプリ(gemma4-26B-A4B QAT、DuckDuckGo Search、Flask使用)を作ってもらうと相当いい出来で使えそう。(2026.06.10)
- RF Weekly Digest (Gemini 3.5 Flash・Google AI Studio BuildによるAIで高周波・RF情報の週刊まとめアプリ)2026/5/31-6/7(2026.06.07)
「学問・資格」カテゴリの記事
- RF Weekly Digest (Codexで作ったOllama経由のgemma4-26B-A4B QAT、DuckDuckGo Searchを使った高周波・RF情報の週刊まとめアプリ)2026/6/7-6/14(2026.06.14)
- FIFAワールドカップ2026で使われているボールTriondaにはカタールの時と同様にKinexonのUWBモジュール(ICはQorvo)と慣性センサが入っているが、カタールが中央につるされて入っている感じなのがボールの裏側に貼りつくかたちで入るようになった。FCCでチェック。(2026.06.14)
- 高周波・RFニュース 2026年6月12日 アンリツがAI対応のTensor VNA発表、Qualcommが5G NR NTN解説、iFixitがTrump phoneを分解・やっぱりHTC U24 Proとほぼ同じ、6G Worldの3GPPミーティング解説記事など(2026.06.12)
- ゼロから作るDeep Learning 6 LLM編を買った。めちゃくちゃわかりやすい。事後学習がこんなに重要とは知らなかった。KVキャッシュって何やってるか等も。Interface誌の7月号特集が作りながら学ぶTransformer/LLMなので一緒に読みながらだとより理解が深まる。(2026.06.11)
- 高周波・RFニュース 2026年6月11日 QorvoがXバンドレーダ用フロントエンドモジュール発表、3GPPがRel.21のタイムライン発表、NI(Emerson)が雑音指数測定のウェビナー開催、MIPI A-PHYのSerDesが4社で相互運用性確認、Menlo Microが高信頼性ミリ波スイッチ発表など(2026.06.11)
「日記・コラム・つぶやき」カテゴリの記事
- RF Weekly Digest (Codexで作ったOllama経由のgemma4-26B-A4B QAT、DuckDuckGo Searchを使った高周波・RF情報の週刊まとめアプリ)2026/6/7-6/14(2026.06.14)
- 高周波・RFニュース 2026年6月12日 アンリツがAI対応のTensor VNA発表、Qualcommが5G NR NTN解説、iFixitがTrump phoneを分解・やっぱりHTC U24 Proとほぼ同じ、6G Worldの3GPPミーティング解説記事など(2026.06.12)
- 高周波・RFニュース 2026年6月11日 QorvoがXバンドレーダ用フロントエンドモジュール発表、3GPPがRel.21のタイムライン発表、NI(Emerson)が雑音指数測定のウェビナー開催、MIPI A-PHYのSerDesが4社で相互運用性確認、Menlo Microが高信頼性ミリ波スイッチ発表など(2026.06.11)
- Gemma 4 QATがOllama経由で使えるようになっていた。そこで今度はGoogle Antigravity(Gemini 3.5 Flash)にローカルLLMでRF情報一週間分まとめて日本語で要約するアプリ(gemma4-26B-A4B QAT、DuckDuckGo Search、Flask使用)を作ってもらう。画面デザインはこっちがいいな。(2026.06.15)
- 高周波・RFニュース 2026年6月10日 Microwave Magazineはチューナブルフィルタ特集、Antenna and Propagation Magazineは電磁波解析パート2、Atisが北米の5G-SAホワイトペーパー発行、NXPが新1チップミリ波レーダ発表(2026.06.10)
« マクドナルドからの暗号をGoogle ColabのJulia言語で解く。 | トップページ | 高周波・RFニュース 2025年9月30日 Next G Allianceの6Gウェビナーは10月14日、Ansysのアレーアンテナ設計ウェビナーは本日、QualcommのWi-Fi 8解説記事、Huaweiが5G-AとAIの講演、Marvell、Semtechらが1.6T光インターコネクト発表 »


コメント