模拟退火+粒子群算法寻找最小值点

模拟退火+粒子群算法寻找最小值点

原理简述

1 模拟退火

和最简单的爬山法相比,模拟退火多了一个选择更差的解的概率,假设当前寻找到的解是 x o r g x_{org} xorg,迭代一轮找到的新解为 x n e w x_{new} xnew,适应度(简单问题中就是函数值)分别为 f ( x o r g ) , f ( x n e w ) f(x_{org}),f(x_{new}) f(xorg),f(xnew),如果新解的适应度比原来的适应度小,那么直接进行更新,进入下一轮迭代,否则以一定概率P
P = e − ( f ( x o r g ) − f ( x n e w ) ) / T P=e^{-(f(x_{org})-f(x_{new}))/T} P=e(f(xorg)f(xnew))/T
接受新解,其中 T T T是当前温度, f ( x o r g ) − f ( x n e w ) f(x_{org})-f(x_{new}) f(xorg)f(xnew)是能量差。
之所以使用 e − x e^{-x} ex函数是因为它在(0,+∞)上的函数值在0,1之间。 能量差值越大,选取该新解的可能性就越小。

y=

下面给出模拟退火算法代码的基本流程:
1.设定模拟退火的参数,如初始温度 T 0 T_0 T0,温度衰减率 α \alpha α,每个温度下的迭代次数 L k Lk Lk,整体最大迭代次数max_iters
2.外层循环max_iters次。
3.内层循环Lk次,每次按照一定规则进行新解的产生,更新等,这个按照任务需求来。
4.将温度衰减,回到2。
5.输出最值点的信息。

Py代码

import numpy as np
import pandas as pd
import sklearn
import matplotlib as mlp
import seaborn as sns
import matplotlib.pyplot as plt
import random

def f(x):
    return 11*np.sin(x)+7*np.cos(5*x)

#模拟退火的初始值
narvs = 1 #变量个数
T0 = 100  # 初始温度
T = T0 # 迭代中温度会发生改变,第一次迭代时温度就是T0
maxgen = 200  # 最大迭代次数
Lk = 100  # 每个温度下的迭代次数
alfa = 0.95  # 温度衰减系数
x_lb = np.array([-3]) # x的下界
x_ub = np.array([3]
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值