Критерий остановки по среднему значению фитнес функции
This commit is contained in:
22
lab1/gen.py
22
lab1/gen.py
@@ -148,6 +148,9 @@ class GARunConfig:
|
||||
variance_threshold: float | None = (
|
||||
None # порог дисперсии для остановки (если None - не используется)
|
||||
)
|
||||
min_fitness_avg: float | None = (
|
||||
None # порог среднего значения фитнес функции для остановки
|
||||
)
|
||||
|
||||
|
||||
@dataclass
|
||||
@@ -197,14 +200,29 @@ def genetic_algorithm(
|
||||
history_populations_x.append(xs[:])
|
||||
history_populations_f.append(fits[:])
|
||||
|
||||
# Проверка критерия остановки по дисперсии
|
||||
# Проверка критериев остановки
|
||||
stop_algorithm = False
|
||||
|
||||
# Критерий остановки по дисперсии
|
||||
if config.variance_threshold is not None:
|
||||
fitness_variance = np.var(fits)
|
||||
if fitness_variance < config.variance_threshold:
|
||||
print(
|
||||
f"Остановка на поколении {generation}: дисперсия {fitness_variance:.6f} < {config.variance_threshold}"
|
||||
)
|
||||
# Сохраняем график последнего поколения
|
||||
stop_algorithm = True
|
||||
|
||||
# Критерий остановки по среднему значению фитнес функции
|
||||
if config.min_fitness_avg is not None:
|
||||
mean_fitness = np.mean(fits)
|
||||
if mean_fitness > config.min_fitness_avg:
|
||||
print(
|
||||
f"Остановка на поколении {generation}: среднее значение {mean_fitness:.6f} > {config.min_fitness_avg}"
|
||||
)
|
||||
stop_algorithm = True
|
||||
|
||||
# Сохраняем график последнего поколения при досрочной остановке
|
||||
if stop_algorithm:
|
||||
if config.save_generations:
|
||||
plot_generation_snapshot(
|
||||
history_best_x,
|
||||
|
||||
@@ -7,7 +7,7 @@ config = GARunConfig(
|
||||
x_min=3.1,
|
||||
x_max=20.0,
|
||||
precision_digits=3,
|
||||
pop_size=5,
|
||||
pop_size=15,
|
||||
pc=0.7,
|
||||
pm=0.01,
|
||||
max_generations=200,
|
||||
@@ -25,7 +25,8 @@ config = GARunConfig(
|
||||
199,
|
||||
], # поколения для сохранения графиков
|
||||
results_dir="results",
|
||||
variance_threshold=1e-6, # порог дисперсии для остановки
|
||||
# variance_threshold=1e-6, # порог дисперсии для остановки
|
||||
min_fitness_avg=0.015, # порог среднего значения для остановки
|
||||
)
|
||||
|
||||
# Запускаем генетический алгоритм
|
||||
|
||||
Reference in New Issue
Block a user