最適化
粒子群最適化法による大域的最適化を行うクラスを実装します。粒子群最適化法は ハイパーパラメータが少ないので扱いやすい 単峰性が強い関数の最適化に向いている といった特徴を持っています。最適化問題は慣例として"目隠しした登山家が山の頂上をどうに…
という制約条件付きで、関数を最小化する、という問題をラグランジュの未定乗数法を使って解きます。ここでは例として、以下の制約条件下で目的関数を最小化するを探す、という問題を解きます。 目的関数 : 制約条件1: 制約条件2: 解き方は以下の手順に…
制約条件が付いた最適化問題をペナルティ法を使って解いてみます。ここでは例として 制約条件: を満たす上で 目的関数: の最小値を与えるを求めます。 まずは目的関数、制約条件、ペナルティ係数から新しい目的関数を作成するクラスを作成します。 public …
共役勾配法を利用して多変数関数の最適化を行うクラスを実装します。共役勾配法ではここ(【C#】 勾配ベクトルを計算するクラス - 旅行好きなソフトエンジニアの備忘録)で作成したGradientというクラスを利用します。 public class ConjugateGradientMethod…
最急降下法を利用して多変数関数の最適化を行うクラスを実装します。最急降下法ではここ(【C#】 勾配ベクトルを計算するクラス - 旅行好きなソフトエンジニアの備忘録)で作成したGradientというクラスを利用します。 public class SteepestDescentMethodMV…
今回は黄金分割法を使って一変数関数の最適化を行う方法をメモします。 public class GoldenSectionSearch { private static readonly double _ratio = (3.0 - Math.Sqrt(5.0))/2.0; /// <summary> /// 黄金分割法による最適化を行うメソッド /// </summary> /// <param name="f">一変数関数</param> /// <param name="minX"></param>…
最急降下法を利用して一変数関数の最適化を行うクラスを実装します。最急降下法ではここ(【C#】 微分を計算するクラス - 旅行好きなソフトエンジニアの備忘録)で作成したDerivativeというクラスを利用します。 public class SteepestDescentMethod1V { pri…