dak ブログ

python、rubyなどのプログラミング、MySQL、サーバーの設定などの備忘録。レゴの写真も。

python での遺伝的アルゴリズムによるパラメータの最適化

2022-03-19 12:35:37 | python
python で geneticalgorithm2 を用いて遺伝的アルゴリズム(GA: Genetic Algorithm)で
パラメータの最適化を試してみました。

インストール方法は以下の通りです。
numpy を利用していますので、numpy がインストールされていなければ、numpy もインストールします。
pip install numpy
pip install geneticalgorithm2


今回は、z = (x-2)(x-4)+(y-6)(y-8) を最小とする (x, y) を GA で求めてみました。
この関数の形状は以下の GeoGebra のサイトで確認することができます。
https://www.geogebra.org/3d?lang=ja
(3, 7) で最小値となります。

■プログラム
import numpy as np
from geneticalgorithm2 import geneticalgorithm2 as ga

# 最小化する関数
def f(p):
    x = p[0]
    y = p[1]
    z = (x - 2) * (x - 4) + (y - 6) * (y - 8)
    return z

# x, y のそれぞれの探索範囲
varbound = np.array([[0, 10], [0, 10]])

# パラメータ(指定しなければデフォルト)
params = {
    'max_num_iteration': 100,
    'population_size': 100,
}

model = ga(function=f,
           dimension=2,
           variable_type='real',
           variable_boundaries=varbound,
           algorithm_parameters=params
)

model.run()
convergence = model.report
solution = model.output_dict
print(solution['variable']) # x, y の最適値
print(solution['function']) # x, y の最適値での関数の値

■実行結果
 Average time of function evaluating (secs): 0.00015092323999997824
                                                                                                                                                                   
 The best found solution:
 [2.99003011 6.99942143]

 Objective function:
 -1.999900266599648

 Used generations: 101
 Used time: 0 seconds
[2.99003011 6.99942143]
-1.999900266599648

ほぼ (3, 7) が得られています。

この記事についてブログを書く
« .bash_profile での pyenv の... | トップ | Typescript で chevrotain に... »

python」カテゴリの最新記事