« 餃子の王将で8月限定の温玉中華カレーラーメン(フェアセットB)をいただく。 | トップページ | からやまで赤カリ合盛り定食をいただく。見かけほど辛くなくてピリ辛くらいで美味しいです。 »

2022年8月25日 (木)

Visual C# (C_sharp)の数値計算ライブラリ MathNET Numericsを使う(6) OptimizationのNelder-Mead SimplexでRosenbrock関数(5パラメータ)を最小になる点を探す。

今回はMath.NET Numericsを使った最適化。

Python(SciPy)の例題を使おう。

https://docs.scipy.org/doc/scipy/tutorial/optimize.html

アルゴリズムは導関数などが不要なNelder-Mead SimplexでRosenbrock関数の5パラメータ版を使う。
ObjectiveFunction.Valueに関数を与える必要がある、というのがよくわからなくて悩んだ…

プログラムはこんな感じで、

C_sharp_optimization01

結果はこちら。

C_sharp_optimization02

プログラムのテキスト:

 


using System;
using MathNet.Numerics.LinearAlgebra;
using MathNet.Numerics.Optimization;

namespace OptimizationTest01
{
    class Program
    {
        static void Main(string[] args)
        {
            var objFunc = ObjectiveFunction.Value(Rosenbrock);
            var solver = new NelderMeadSimplex(1.0E-9, 1000);
            var initialGuess = Vector.Build.DenseOfArray(new []{ 1.3, 0.7, 0.8, 1.9, 1.2 });

            var results = solver.FindMinimum(objFunc, initialGuess);

            for (int i = 0; i < initialGuess.Count; i++) {
                Console.WriteLine($"x[{i}] = {results.MinimizingPoint[i]}");
            }


        }

        static double Rosenbrock(Vector x)
        {
            double sum = 0.0;
            for (int i = 0; i < x.Count - 1; i++)
            {
                sum += 100.0 * (x[i+1] - x[i] * x[i]) * (x[i+1] - x[i] * x[i]) + (x[i] - 1.0) * (x[i] - 1.0);
            }
            return sum;
        }
    }
}

 

過去のもの:

 

Visual C# (C_sharp)の数学ライブラリ Math.NET Numericsを使う(1) 複素行列を定義して一次方程式や逆行列、行列式などを計算する。

Visual C# (C_sharp)の数学ライブラリ Math.NET Numericsを使う(2) 補間を行う(Interpolate) リニア、3次スプライン、有理関数などいろいろ使える。

Visual C# (C_sharp)の数学ライブラリ Math.NET Numericsを使う(3) 高速フーリエ変換(FFT)を実行する。FourierOptionsにMatlabとNumerical Recipesがあるのが意外。

Visual C# (C_sharp)の数学ライブラリ Math.NET Numericsを使う(4) 多項式フィッティングをして、Array.ConvertAllで一括でフィッティングデータを得る。

Visual C# (C_sharp)の数学ライブラリ Math.NET Numericsを使う(5) 常微分方程式の数値解法、4段4次のルンゲクッタ法がRungeKutta.FourthOrderの一文でできる。ローレンツ方程式を例としてやってみる

« 餃子の王将で8月限定の温玉中華カレーラーメン(フェアセットB)をいただく。 | トップページ | からやまで赤カリ合盛り定食をいただく。見かけほど辛くなくてピリ辛くらいで美味しいです。 »

パソコン・インターネット」カテゴリの記事

学問・資格」カテゴリの記事

日記・コラム・つぶやき」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

« 餃子の王将で8月限定の温玉中華カレーラーメン(フェアセットB)をいただく。 | トップページ | からやまで赤カリ合盛り定食をいただく。見かけほど辛くなくてピリ辛くらいで美味しいです。 »

最近の記事

最近のコメント

2024年12月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        
フォト
無料ブログはココログ