# Untitled

unknown
plain_text
a month ago
1.5 kB
3
Indexable
Never
```import math
import random

def get_random_number(x_min, x_max):
return random.uniform(x_min, x_max)

def is_acceptable(y, yt, temp):
p = math.exp((yt - y) / temp)
return p > random.uniform(0, 1)

def get_trial_interval(x, temp, x_min, x_max):
xt_min = max(x - 2 * temp, x_min)
xt_max = min(x + 2 * temp, x_max)
return xt_min, xt_max

def function(x):
pi = math.pi
return 3 * math.sin((pi * x) / 5) + math.sin(pi * x)

def simulated_annealing(epochs, trials, temp, alpha, x_min, x_max):
def print_epoch_info(epoch, x, y):
print(f"\n\nEpoch {epoch}/{epochs}, x={x}, f(x)={y}, T={temp}")

def print_trial_info(trial, xt, yt):
print(f"\n      Interval per trial {trial} = [{xt_min}; {xt_max}]")
print(f"      xt={xt}, f(xt)={yt}")

x = get_random_number(x_min, x_max)

for epoch in range(1, epochs + 1):
y = function(x)
print_epoch_info(epoch, x, y)

for trial in range(1, trials + 1):
xt_min, xt_max = get_trial_interval(x, temp, x_min, x_max)
print_trial_info(trial, *get_trial_result(x, xt_min, xt_max))

temp *= alpha

return x

def get_trial_result(x, xt_min, xt_max):
xt = get_random_number(xt_min, xt_max)
yt = function(xt)
return xt, yt

# Parameters
temp = 1.0
x_min, x_max = 0, 10
alpha = 0.9
epochs, trials = 5, 3

local_maximum = simulated_annealing(epochs, trials, temp, alpha, x_min, x_max)
print(f"\n\nLocal maximum of the function is {local_maximum}")
```