61 lines
1.8 KiB
Python
61 lines
1.8 KiB
Python
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.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}")
|