用python实现模拟退火模型求解方程

代码

import math
import random

#需要求解的函数
def f(x):
    return x**3-60*x**2-4*x+6

#退火函数
def tui(x_min,x_max,z):   #z为1时,求最大值,0时求最小值
    T = 2000   #温度
    dt = 0.999  #每次退火百分比
    ep = 0.000000000000001
    x0 = (x_min+x_max)/2
    f0 = f(x0)
    
    while T>ep:
        #退火操作
        xn = x0+(4000*random.random()-2000)*dt   #生成随机数
        #判断是否在定义域内
        while(xn < x_min or xn>x_max):
            xn = x0 + (4000*random.random()-2000)*dt   #重新生成随机数
       
        fn = f(xn)
        
        if z == 1:   #求最大值
            if fn>f0:
                x0 = xn
                f0 = fn
            elif math.exp((fn-f0)/T)>random.random():     #按概率选择另一个结果
                x0 = xn
                f0 = fn
        else:   #求最小值
            if fnrandom.random():
                x0 = xn
                f0 = fn
            
        T = T*dt
    return [x0,f0]

求解结果

用python实现模拟退火模型求解方程_第1张图片

你可能感兴趣的:(python)