python で geneticalgorithm2 を用いて遺伝的アルゴリズム(GA: Genetic Algorithm)で
パラメータの最適化を試してみました。
インストール方法は以下の通りです。
numpy を利用していますので、numpy がインストールされていなければ、numpy もインストールします。
今回は、z = (x-2)(x-4)+(y-6)(y-8) を最小とする (x, y) を GA で求めてみました。
この関数の形状は以下の GeoGebra のサイトで確認することができます。
https://www.geogebra.org/3d?lang=ja
(3, 7) で最小値となります。
■プログラム
■実行結果
ほぼ (3, 7) が得られています。
パラメータの最適化を試してみました。
インストール方法は以下の通りです。
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) が得られています。