Критерий остановки по среднему значению фитнес функции
This commit is contained in:
46
lab1/gen.py
46
lab1/gen.py
@@ -148,6 +148,9 @@ class GARunConfig:
|
||||
variance_threshold: float | None = (
|
||||
None # порог дисперсии для остановки (если None - не используется)
|
||||
)
|
||||
min_fitness_avg: float | None = (
|
||||
None # порог среднего значения фитнес функции для остановки
|
||||
)
|
||||
|
||||
|
||||
@dataclass
|
||||
@@ -197,26 +200,41 @@ 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}"
|
||||
)
|
||||
# Сохраняем график последнего поколения
|
||||
if config.save_generations:
|
||||
plot_generation_snapshot(
|
||||
history_best_x,
|
||||
history_best_f,
|
||||
history_populations_x,
|
||||
history_populations_f,
|
||||
generation,
|
||||
config.x_min,
|
||||
config.x_max,
|
||||
config.results_dir,
|
||||
)
|
||||
break
|
||||
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,
|
||||
history_best_f,
|
||||
history_populations_x,
|
||||
history_populations_f,
|
||||
generation,
|
||||
config.x_min,
|
||||
config.x_max,
|
||||
config.results_dir,
|
||||
)
|
||||
break
|
||||
|
||||
# Сохранение графика для указанных поколений
|
||||
if config.save_generations and generation in config.save_generations:
|
||||
|
||||
Reference in New Issue
Block a user