Excelで進化計算(1)


2022年 06月 06日

この記事では,Microsoft社の製品であるExcelの進化計算を紹介します.

  • Excelで進化計算を実装しようという話ではありません
  • VBAは利用せず,プログラムも書きません
  • 初めから,Excelには進化計算が実装されています
  • 進化計算は,Excelのソルバー機能の1つです

Excelの隠れた機能である進化計算を呼び出し,実行する方法を紹介します.
※ Windows 10,Excel 2016 環境で説明しますが,他の環境でも実行可能なはずです.

ソルバーを有効にする

最初に,以下の手順でソルバーを有効にします.
1. Excelを起動し,空白のブックを開きます.
2. 「ファイル」,「オプション」,「アドイン」を順番にクリックします.
3. 「ソルバーアドイン」を選択し,「設定(G)…」をクリックします.

4. 「ソルバーアドイン」にチェック☑を入れて,「OK」をクリックします.

5. 「データ」をクリックしたとき,一番右に「ソルバー」「分析」の項目があることを確認します.

問題を準備する

ソルバーで解くための最適化問題を準備します.
A2のセルに変数の下限値「-5.12」,B2のセルに変数の上限値「5.12」を書き込みます.
E2のセルに目的関数「=20+C2^2+D2^2-10*(COS(2*PI()*C2)+COS(2*PI()*D2))」を書きます.
これは,2変数の Rastrigin function と呼ばれる最適化のベンチマーク問題です.

Rastrigin functionは,次式で定義されます.

    $\text{Minimize }\qquad f(\boldsymbol{x}) = 10n + \sum_{i=1}^n [x_i^2 – 10\cos(2\pi x_i)]$
    $\text{Subject to}\quad-5.12\leq x_i \leq 5.12,\quad$ for $i = 1,2,\dots,n.$

この問題は,目的関数値$f(\boldsymbol{x})$が最少となる変数$\boldsymbol{x}$を見出すことが目標となります.
($\boldsymbol{x}=(0,0,\dots,0)$のとき,最小値(最適値)$f(\boldsymbol{x})=0$をとります)

今回は,変数の次元数$n$=2,$x_1$=C2セルの値,$x_2$=D2セルの値,$f(\boldsymbol{x})$=E2セルの値としています.

変数の次元数$n$=1のとき,変数$\boldsymbol{x}$と目的関数値$f(\boldsymbol{x})$は,以下の関係性になります.

変数の次元数$n$=2のとき,変数$\boldsymbol{x}$と目的関数値$f(\boldsymbol{x})$は,以下の関係性になります.

進化計算を実行する

実際に進化計算を実行します.
1. 「データ」,「ソルバー」を順番にクリックします.
2. 以下の画像を参考に,「目的セル」,「目標値」,「変数セル」,「制約条件」を設定します.

3. 解決方法をエボリューショナリー (= evolutionary)に変更したうえで,「解決(S)」をクリックします.
以上で進化計算が実行されます.90秒くらい待つと,実行が終了します.

手元の実行では,極めて最適解に近い値を獲得することができました.
上の図,C2,D2,E2セルの値が最適化の実行結果です.
変数は小数第6位,目的関数値は小数第10位まで,最適解と同じ値を得ることができました.

終わりに

「Excelで進化計算」初回である今回は,Excelで進化計算を実行する方法を紹介しました.
次回は,「ソルバーのパラメーター」について紹介します.お楽しみに.