import math import os from gen import GARunConfig, genetic_algorithm def target_function(x: float) -> float: """f(x) = sin(x)/x^2""" return math.sin(x) / (x * x) # Запуск эксперимента с генетическим алгоритмом config = GARunConfig( x_min=3.1, x_max=20.0, fitness_func=target_function, precision_digits=3, pop_size=15, pc=0.7, pm=0.01, max_generations=200, seed=17, minimize=True, save_generations=[ 0, 1, 2, 3, 10, 25, 49, 99, 150, 199, ], # поколения для сохранения графиков results_dir="results", # variance_threshold=1e-6, # порог дисперсии для остановки fitness_avg_threshold=-0.048, # порог среднего значения для остановки ) # Запускаем генетический алгоритм result = genetic_algorithm(config) # Выводим результаты print(f"Лучшее x: {result.best_x:.4f}") print(f"Лучшее f(x): {result.best_f:.6f}") print(f"Количество поколений: {result.generations}") print(f"Время выполнения: {result.time_ms:.2f} мс") print(f"Количество бит: {result.L}") # Выводим информацию о сохраненных графиках поколений if config.save_generations: print( f"\nГрафики для поколений {config.save_generations} сохранены в папку '{config.results_dir}/'" ) for gen in config.save_generations: if gen < result.generations: filename = f"generation_{gen:03d}.png" filepath = os.path.join(config.results_dir, filename) print(f" - Поколение {gen}: {filepath}")