※現在、ブログ記事を移行中のため一部表示が崩れる場合がございます。
順次修正対応にあたっておりますので何卒ご了承いただけますよう、お願い致します。

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で進化計算を実行する方法を紹介しました.
次回は,「ソルバーのパラメーター」について紹介します.お楽しみに.