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=25, pc=0.5, pm=0.01, max_generations=200, seed=17, minimize=True, save_generations=[ 0, 1, 2, 3, 5, 7, 10, ], # поколения для сохранения графиков results_dir="results", # variance_threshold=1e-6, # порог дисперсии для остановки fitness_avg_threshold=-0.049, # порог среднего значения для остановки ) # Запускаем генетический алгоритм 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}")