算法(四)退火算法

退火退火,核心在退,每次迭代,范围缩小

步骤:
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())})
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值