退火退火,核心在退,每次迭代,范围缩小
步骤:
1 初始解
2 开始while循环退火,当前范围T = T/(t) 其中t为循环累加的值,T为初始值,每次迭代减小
3 每层迭代50次寻找这一层的最小值,如果比当前值大,概率性保存。方式是使用邻近解的函数值与当前解的函数值做比较
代码如下:
import math
import random
def function(x):
return x**3-60*x**2-4*x+6
def main():
T = 1000
t_min = 10
range_num = (0,100)
t = 1
frist_x = random.uniform(0, 100)
while T > t_min:
for i in range(50):
new_x = frist_x + random.uniform(-0.5,0.5)*T
if new_x > range_num[0] and new_x < range_num[1]:
if function(frist_x) > function(new_x):
frist_x = new_x
else:
rank = random.random()
p = math.exp((function(frist_x) - function(new_x))/T)
if rank < p:
frist_x = new_x
t += 1
T = T/(1+t)
return frist_x
if __name__=='__main__':
print({main():function(main())})