模拟退火算法实现寻找函数最值

博客介绍了模拟退火算法思想,该算法从较高初温出发,随温度下降,结合概率突跳特性在解空间找目标函数全局最优解,能从局部最优跳出。还给出求解f(x)=x+5sin(5x)+2cos(4x)在区间上函数最值的代码实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

模拟退火的算法思想

模拟退火算法从某一较高初温出发,伴随温度参数的不断下降,结合概率突跳特性在解空间中随机寻找目标函数的全局最优解,即在局部最优解能概率性地跳出并最终趋于全局最优。

模拟退火算法模板:

初始温度
T=100
冷却速率
rate=0.99
while T>1:
    随机生成一个解
    x=random
    随机解的适应度
    y=f(x)
    如果当前适应度大于最佳适应度,则保存新解
    if y>Y:
        X=x
        Y=y
    else:
*算法核心如果当前适应度小于最佳适应度,则以一定概率保存新解,这个概率由适应度差值和当前温度决定,差值越小,温度越大,概率越大
        if exp(-(Y-y)/T)>random():
            X = x
            Y = y
    冷却
    T*=rate

例子:

求解f(x)=x+5sin(5x)+2cos(4x)在区间上的函数最值。

代码

import numpy as np
import matplotlib.pyplot as plt
import math
import random

def aimFunction(x):
    y=x+5*math.sin(5*x)+2*math.cos(4*x)
    return y

start=0
end=10

X=random.uniform(start,end)
Y=aimFunction(X)

T=100
rate=0.99
while T>1:
    x=random.uniform(start,end)
    y=aimFunction(x)
    if y>Y:
        X=x
        Y=y
    else:
        if math.exp(-(Y-y)/T)>random.random():
            X = x
            Y = y
    T*=rate

print(X,Y)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值