模拟退火模型 —— 入门案例

news/2024/9/20 23:27:44/文章来源:https://www.cnblogs.com/marsh-mallow/p/18386348

简介

模拟退火算法(Simulated Annealing, SA) 是一种概率型全局优化算法,它受到物理退火过程的启发。在固体材料的退火过程中,材料被加热到一定温度后缓慢冷却,其内部结构逐渐趋于稳定,最终达到能量最低的平衡状态。模拟退火算法正是模仿这一过程,用于寻找数学问题中的全局最优解。

特点

  • 跳出局部最优:通过一定概率接受较差解,算法能够跳出局部最优陷阱。
  • 全局搜索能力:高温度下的大范围搜索使得算法具有较好的全局搜索能力。
  • 自适应性:随着温度的降低,搜索过程逐渐聚焦于解空间中的优质区域。

模拟退火与梯度下降的区别

应用上的区别
模拟退火:适用于解决复杂的优化问题,特别是当问题具有多个局部最优解时。它可以用于连续或离散的优化问题。
梯度下降:主要用于机器学习和深度学习中的参数优化,特别是在目标函数是连续且可微的情况下。

特点上的区别
模拟退火:通过概率接受更差的解,可以跳出局部最优,但计算成本可能较高,因为它可能需要多次迭代才能找到好的解。
梯度下降:通常收敛速度快,但在面对非凸优化问题时可能会陷入局部最优解

基本思想

  • 初始状态:算法从某个初始解开始,通常是一个随机解
  • 温度参数:设定一个初始温度,这个温度参数控制着算法搜索解空间的随机性。
  • 迭代过程:在每次迭代中,算法在当前解的邻域内随机选择一个新的解,步幅与当前温度有关,温度越大,步幅越大。
  • 接受准则:如果新解比当前解更优,那么接受新解作为当前解。如果新解更差,以一定的概率接受新解,这个概率随着解的质量下降而降低,且随着温度的降低而减小。这个概率通常由以下公式决定:$ P(accept worse solution)=exp(− \frac{ΔE}{k·T}) $
    其中:
    • $ ΔE $ 是新解的能量与当前解能量的差值(在优化问题中,可以理解为目标函数值的差值)。
    • $ k $ 是一个常数,通常在模拟退火中可以设为1。
    • $ T $ 是当前的系统温度。
  • 降温过程:在一定的迭代次数后降低温度,使搜索过程逐渐集中到更优解的区域。

算法步骤

  • 初始化:选择一个初始解和初始温度。
  • 迭代:对每一个温度值,重复以下过程直到满足终止条件:
    • 产生一个新解。
    • 计算新解与当前解的目标函数值差。
    • 如果新解更优或随机概率接受准则允许,则接受新解。
  • 降温:根据预设的降温方案降低温度。
  • 终止:当温度降至某一阈值或达到最大迭代次数时,算法终止。

运行截图

image

Full Code

import math
import random
import numpy as np
import matplotlib.pyplot as pltT = 1.0  # 初始温度
delta = 0.99  # 变化率
eps = 1e-3  # 出口阈值
k = 1.0  # 计算是否接受更差解时的系数kT = k * T  # k与T的乘积W = 2  # 定义域半径(-W, W)# 函数f(x)
f = lambda x: 11 * np.sin(x) + 7 * np.cos(5 * x)# 初始解为定义域内的随机数
x0 = random.uniform(-W, W)
# 计算部分
while T > eps:x1 = x0 + T * 2 * random.uniform(-W, W)while x1 > W or x1 < -W:# 确保x1落在定义域内x1 = x0 + T * 2 * random.uniform(-W, W)f0 = f(x0)f1 = f(x1)if f1 > f0:  # 新解更优,无条件接受x0 = x1elif math.exp((f1 - f0) / kT) > random.random():  # 概率接受更差解x0 = x1T *= delta# 绘制点plt.scatter(x0, f(x0), c='r', s=10)  # 过程点为红色# 绘图部分
X = np.linspace(-W, W, 100)
plt.plot(X, f(X), label="func")
plt.scatter(x0, f(x0), c='g', s=10)  # 最终点为绿色
plt.show()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/789040.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HarmonyOS SDK实况窗服务

HarmonyOS SDK实况窗服务(Live View Kit)作为一个实时呈现应用服务信息变化的小窗口,遍布于设备的各个使用界面,它的魅力在于将复杂的应用场景信息简洁提炼并实时刷新,在不影响当前其他应用操作的情况下,时刻向用户展示最新的信息动态,用户也可以点击实况窗卡片或胶囊进…

通讯协议

UART通用异步收发器,串行、全双工、异步通信总线。重点是异步,和同步相对应,意思是不需要同步的时钟,通信两端预先约定好波特率(每秒传多少bit),而不是由时钟触发的。波特率:用于描述UART通信时的通信速度,其单位为bps 即每秒钟传送的bit的数量。串口一次发送一个字节…

Oracle同一台服务器创建多个数据库

有时候我们需要再同一台机器上创建多个数据库服务(不是单纯的数据库实例),每一个数据库可以有单独的服务运行,只是在一个机器环境而已。可以在不同的端口上监听,也可以在相同端口监听创建多个数据库步骤 安装完Oracle数据库后,会自动安装很多工具,这里我们使用Database …

kubeflow部署与主要功能使用方案

本文简要介绍kubeflow,以及他的部署使用方式。最近在调研kubeflow平台,发现网上资料较少,加上它版本迭代较快有些调用使用方式变化,由于工作内容相关跑通了一些他的主要功能如katib参数调优,kubeflow pipline搭建,多用户创建等具体案例。 kubeflow介绍 Kubeflow 是一个专…

selenium爬虫学习1

简介 Selenium是广泛使用的模拟浏览器运行的库,它是一个用于Web应用程序测试的工具。 Selenium测试直接运行在浏览器中,就像真正的用户在操作一样,并且支持大多数现代 Web 浏览器。 函数介绍重点方法 1.find_element方法是 Selenium WebDriver 提供的一种用于查找页面上某个…

DCN V2 Improved Deep Cross Network and Practical Lessons for Web-scale Learning to Rank Systems

目录概DCN-v2Wang R., Shivanna R., Cheng D. Z., Jain S., Lin D., Hong L. and Chi E. D. DCN V2: Improved deep & cross network and practical lessons for web-scale learning to rank systems, 2020.概 DCN 的升级版. DCN-v2DCN-v2 的 cross/deep 的结合方式上有上述…

非结构化文档解析

参考:RAG效果优化:高质量文档解析详解知识库 RAG的核心之一就是知识库的离线存储,如何将非结构化文档存储是非常重要的。PDF和Word文件结构word文件解析pdf文件解析Papermage介绍总结阿里云上的文件解析方法示例准确率参考

ChatMoney让你变成HR高手!

本文由 ChatMoney团队出品在快节奏的现代职场中,招聘是每一个企业都绕不开的重要环节。然而,传统的招聘流程往往繁琐而低效,从海量简历的筛选,再到后续的评估与决策,每一个环节都耗费着HR人员大量的时间和精力。幸运的是,随着人工智能技术的飞速发展,AI人力资源顾问正逐…

告别繁琐招聘,AI人力资源顾问让你秒变HR高手!

本文由 ChatMoney团队出品在快节奏的现代职场中,招聘是每一个企业都绕不开的重要环节。然而,传统的招聘流程往往繁琐而低效,从海量简历的筛选,再到后续的评估与决策,每一个环节都耗费着HR人员大量的时间和精力。幸运的是,随着人工智能技术的飞速发展,AI人力资源顾问正逐…

【整理】【网络基础知识】数字签名

数字签名的特点: 接收者能够核实发送者对报文的签名。报文鉴别 接收者确信所收到的数据和发送者发送的完全一样没有被篡改过。报文的完整性 发送者事后不能抵赖对报文的签名。不可否认秘钥分配(KDC,CA):参考🔗: https://mp.weixin.qq.com/s/e7jBXV2ukLqIj6l42jew7A

24 个很棒的开源 Rust 项目

【转】https://devpress.csdn.net/opensource/62f483cd7e668234661885ef.html 24 个很棒的开源 Rust 项目 Rust 有一个非常活跃和快节奏的开源生态系统,有大量的贡献者致力于大量的很棒的项目。 如果你问——我可以在 Rust 中构建什么?答案几乎是一切。 本文将介绍一些开源 Ru…

【Visual Studio】安装SVN插件

前期准备 已有SVN服务器路径账号、密码或本机上已安装SVN Server 在本机安装TortoiseSVN(即SVN客户端) 网址 安装地址:https://www.visualsvn.com/visualsvn/download/ 。选择自己的Visual Studiod对应的版本。关闭VS。按步骤安装好,即可 有志者,事竟成,破釜沉舟,百二秦…