From 1e34db4bebfa0b4c98b731684b479e896678e11e Mon Sep 17 00:00:00 2001 From: Arity-T Date: Wed, 10 Sep 2025 16:05:18 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9A=D1=80=D0=B8=D1=82=D0=B5=D1=80=D0=B8?= =?UTF-8?q?=D0=B9=20=D0=BE=D1=81=D1=82=D0=B0=D0=BD=D0=BE=D0=B2=D0=BA=D0=B8?= =?UTF-8?q?=20=D0=BF=D0=BE=20=D0=B4=D0=B8=D1=81=D0=BF=D0=B5=D1=80=D1=81?= =?UTF-8?q?=D0=B8=D0=B8=20=D1=84=D0=B8=D1=82=D0=BD=D0=B5=D1=81=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lab1/gen.py | 26 +++++++++++++++++++++++++- lab1/main.py | 1 + 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/lab1/gen.py b/lab1/gen.py index 05b44ac..ebdaaeb 100644 --- a/lab1/gen.py +++ b/lab1/gen.py @@ -145,6 +145,9 @@ class GARunConfig: None # индексы поколений для сохранения графиков ) results_dir: str = "results" # папка для сохранения графиков + variance_threshold: float | None = ( + None # порог дисперсии для остановки (если None - не используется) + ) @dataclass @@ -194,6 +197,27 @@ def genetic_algorithm( history_populations_x.append(xs[:]) history_populations_f.append(fits[:]) + # Проверка критерия остановки по дисперсии + 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 + # Сохранение графика для указанных поколений if config.save_generations and generation in config.save_generations: plot_generation_snapshot( @@ -224,7 +248,7 @@ def genetic_algorithm( return GARunResult( best_x, best_f, - config.max_generations, + len(history_best_x), # реальное количество поколений history_best_x, history_best_f, history_populations_x, diff --git a/lab1/main.py b/lab1/main.py index 02e263e..f149115 100644 --- a/lab1/main.py +++ b/lab1/main.py @@ -25,6 +25,7 @@ config = GARunConfig( 199, ], # поколения для сохранения графиков results_dir="results", + variance_threshold=1e-6, # порог дисперсии для остановки ) # Запускаем генетический алгоритм