Как получить результат оптимизации для каждой итерации в генетическом алгоритме?

avatar
roudan
9 августа 2021 в 01:07
83
1
0

Я использую генетический алгоритм. График оптимизации генерируется автоматически. Я хотел бы настроить график, поэтому мне интересно, как получить результат оптимизации для каждой итерации.

enter image description here

algorithm_param={'max_num_iteration': None, 'population_size':100,   #None
'mutation_probability':0.1,'elit_ratio': 0.1,
'crossover_probability': 0.5,'parents_portion': 0.2,
'crossover_type':'uniform','max_iteration_without_improv':100}

model=ga(function=f,dimension=len(x_coef),variable_type='real',
         variable_boundaries=varbound, algorithm_parameters=algorithm_param)

model.run()
convergence=model.report
solution=model.output_dict
Источник
Amir Charkhi
9 августа 2021 в 01:20
1

Таким образом, model.report дает вам значения целевой функции, а model.iterate печатает количество итераций, это то, что вы пытаетесь настроить?

roudan
9 августа 2021 в 01:31
0

Спасибо, Амир, да, model.report — это то, что я хотел. Вы решили это. Спасибо

Amir Charkhi
9 августа 2021 в 02:11
0

Просто добавил полный пример.

Ответы (1)

avatar
Amir Charkhi
9 августа 2021 в 02:10
1

Таким образом, model.report дает вам значения целевой функции, а model.iterate печатает количество итераций.

Думаю, используя эти значения, вы можете настроить график так, как вам нужно.

Вот пример:

import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd

dataframe = pd.DataFrame(model.report)
dataframe.columns = ["report"]
dataframe["iteration"] = list(range(model.iterate+1))
dataframe

enter image description here

sns.set_theme(style="darkgrid")

g = sns.relplot(x="iteration", y="report", kind="line", data=dataframe)

enter image description here

roudan
9 августа 2021 в 04:22
0

Спасибо, Амир. Это действительно здорово! я ценю его

roudan
9 августа 2021 в 05:48
0

Спасибо, Амир, можно ли во время прогона показать лучшее решение, найденное на завершенных итерациях, а не ждать окончания прогона?