【算法】模拟退火算法(SAA,Simulated Annealing Algorithm)

news2024/9/20 1:07:35

模拟退火算法(SAA)简介

模拟退火算法(SAA,Simulated Annealing Algorithm)的灵感来源于工艺铸造流程中的退火处理,随着铸造温度升高,分子运动趋于无序,徐徐冷却后,分子运动趋于有序。这是一种基于概率突跳特性(取决于温度状态)的算法,在解空间中概率寻找(或趋近于)最优解。它是跳出局部最优解的一个常用解决办法。在超大规模集成电路(Very Large Scale Integration Circuit,VLSI)、神经网计算机、计算机视觉、TSP和Knapsack问题等有重要且广泛的应用。

模拟退火算法采用了串行结构。

SAA步骤

模拟退火算法的三要素是解空间,目标函数和初始解。它的基本思想是:

  1. 初始化
    首先确定一个初始温度T,初始解状态S,每个T值的迭代次数L。
  2. 迭代
    在1-L次数中做这些操作:(2)
    产生新解S’。
    计算温度增量△t’=C(S’)-C(S)。(C(S)为评估函数)
    若Δt′<0则接受S′作为新的当前解,否则以概率exp(-Δt′/(KT))接受S′作为新的当前解(k为波尔兹曼常数)
    如果终止条件已经满足,则接受当前解作为最优解,并停止迭代计算。如果不是,则继续。
    T逐渐减少,且t趋近于0,则转到2.迭代。(1)
      在这里插入图片描述

SAA原理

模拟退火算法包含两个部分,即Metropolis和退火过程,分别对应着内循环和外循环。外循环将固体加热至较高的温度(初始温度T0),然后按照降温系数alpha使温度按照一定的比例下降,当达到终止温度Tf时,冷却结束,退火过程结束,对应上述的(1)过程。

Metropolis算法是内循环,即在每次更新的温度下迭代L次,并寻找该温度下能量的最小值(最优解)。对应的是上述的(2)过程。

用能量变化来解释模拟退火算法接受新解的情况:

Metropolis准则:
1953年提出。若在温度T时,由状态i转变为状态j,那么若Ej<Ei,则接受j状态为新状态。否则,进入新一轮判断:若概率P=exp(-(Ej-Ei)/KT)大于[0,1]区间的随机数,则接受j为新状态;若不成立,则保留i为新状态。
Metropolis算法是退火算法的基础,同样是在局部最优中选取全局最优。

在“退火”过程中,铸件徐徐冷却,分子运动趋于有序,每个分子都趋于平衡态,最终温度下降到常温时,达到基态,内能减为最小,能量减小原子趋于稳定。

在一定的某温度 T 0 T_0 T0下,存在状态变换(由一个波谷变化至下一个波谷),那么如果下一个波谷能量 E ( n + 1 ) E(n+1) E(n+1)大于原先的 E ( n ) E(n) E(n),就接受它成为新解,否则进入判断,设置一个概率P:

P = { 1 E ( n + 1 ) < E ( n ) e − ( E ( n + 1 ) − E ( n ) ) / T E(n+1)≥E(n) P= \begin{cases} \displaystyle1 & E(n+1)<E(n)\\e^{-(E(n+1)-E(n))/T} & \text{E(n+1)≥E(n)} \end{cases} P={1e(E(n+1)E(n))/TE(n+1)<E(n)E(n+1)≥E(n)

退火过程由冷却温度表(Cooling Schedule)控制,包括控制参数的初值t及其衰减因子Δt、每个t值时的迭代次数L和停止条件Tf。

在这里插入图片描述
接受状态的三条原则:

(1)在固定温度下,接受使目标函数下降的候选解的概率 > > >使目标函数上升的候选解概率;

(2)随着温度的下降,接受使目标函数上升的解的概率要逐渐减小;

(3)当温度趋于零时,只能接受目标函数下降的解。

可见参数的选择控制构成了模拟退火算法的重点和创新点。

SAA的参数选择控制

  1. 选择足够高的初始温度 T 0 T_0 T0意味着有更多的选择可以被触及,也就更接近全局最优解。
  2. 指数式下降的温度下降方式尤为便捷,而且收敛速度较慢。
  3. 终止温度的选取。

SAA的改进方向

模拟退火算法的缺点:

  1. 收敛速度慢
  2. 优化解和运行时间存在一定矛盾
  3. 难以判断是否达到最终平衡态

目前,已有一些高效的改进方案,比如并行模拟退火算法、快速模拟退火算法等。

改进的可行方案 :
采用并行搜索结构,并改进状态产生函数,改进退火历程,增加新的环节,例如增加升温/重升温过程,增加补充搜索过程,增加多次搜索策略等。

SAA简单应用实例

用模拟退火算法求解 f ( x ) = x 2 f(x)=x^2 f(x)=x2的最小值:

import math  
import random  
  
def simulated_annealing():  
    # 初始化  
    x = 20*(random.random()-0.5)  # 初始解  
    T = 1000  # 初始温度  
    T_min = 1e-3  # 温度下限,当T小于此值时,停止迭代  
    alpha = 0.99  # 温度衰减系数  
    y = x**2  # 初始解的质量  
  
    while T > T_min:  
        # 在当前解附近随机选择一个新解  
        delta_x = (random.random()-0.5)  
        new_x = x + delta_x  
        new_y = new_x**2  
  
        # Metropolis准则:若新解比旧解好,或者根据概率接受不良解,以避免陷入局部最小值  
        if new_y < y:  
            x = new_x  
            y = new_y  
        else:  
            p = math.exp((y - new_y) / T)  
            if random.random() < p:  
                x = new_x  
                y = new_y  
  
        # 降温  
        T *= alpha  
  
    return x, y  
  
if __name__ == "__main__":  
    x, y = simulated_annealing()  
    print(f"最优解: x = {x}, y = {y}")

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【数据分享】2014-2022年我国淘宝村点位数据(Excel格式/Shp格式)

电子商务是过去一二十年我国发展最快的行业&#xff0c;其中又以淘宝为代表&#xff0c;淘宝的发展壮大带动了一大批服务淘宝电子商务的村庄&#xff0c;这些村庄被称为淘宝村&#xff01; 截至到目前&#xff0c;阿里研究院梳理并公布了2014-2022年共9个年份的淘宝村名单&…

2.AUTOSAR SWC设计概述

1.SWC概述 SWC,全称Software Components,运行在RTE之上,属于应用算法逻辑这一层,如下图: 由1.AUTOSAR的架构及方法论中我们了解到该框架的提出就是为了减少平台移植成本、加快研发效率;这也就是说在AUTOSAR框架下,SWC作为组件是需要被重用的,意味着一个…

数据预处理(超详细)

import pandas as pd import numpy as np【例5-1】使用read_csv函数读取CSV文件。 df1 pd.read_csv("sunspots.csv")#读取CSV文件到DataFrame中 print(df1.sample(5))df2 pd.read_table("sunspots.csv",sep ",")#使用read_table&#xff0c;…

人工智能基础_机器学习003_有监督机器学习_sklearn中线性方程和正规方程的计算_使用sklearn解算八元一次方程---人工智能工作笔记0042

然后我们再来看看,如何使用sklearn,来进行正规方程的运算,当然这里 首先要安装sklearn,这里如何安装sklearn就不说了,自己查一下 首先我们还是来计算前面的八元一次方程的解,但是这次我们不用np.linalg.solve这个 解线性方程的方式,也不用 直接 解正规方程的方式: 也就是上面…

接口自动化测试实践

接口自动化概述 Python接口自动化测试零基础入门到精通&#xff08;2023最新版&#xff09; 众所周知&#xff0c;接口自动化测试有着如下特点&#xff1a; 低投入&#xff0c;高产出。 比较容易实现自动化。 和UI自动化测试相比更加稳定。 如何做好一个接口自动化测试项目呢…

华媒舍:怎样利用KOL出文营销推广打造出超级影响力?

利用KOL&#xff08;Key Opinion Leader&#xff09;出文营销推广已成为很多个人和企业提高影响力的重要方法。根据恰当的思路与技巧&#xff0c;你也能轻松吸引大批粉丝并打造无敌的存在影响力。下面我们就以科谱的形式详细介绍怎样利用KOL 出文营销推广&#xff0c;帮助自己做…

SD-WAN让跨境网络访问更快、更安全!

目前许多外贸企业都面临着跨境网络不稳定、不安全的问题&#xff0c;给业务合作带来了很多困扰。但是&#xff0c;现在有一个解决方案能够帮助您解决这些问题&#xff0c;让您的跨境网络访问更快、更安全&#xff0c;那就是SD-WAN&#xff01; 首先&#xff0c;让我们来看看SD-…

微机原理:逻辑运算指令、移位指令

文章目录 一、逻辑运算指令1、取反运算指令2、与运算指令3、或运算指令4、异或运算 二、移位指令1、开环移位指令算术左移&#xff1a;SHL、SAL算术右移&#xff1a;SAR逻辑右移&#xff1a;SHR 2、闭环移位指令含进位的循环左移&#xff1a;RCL含进位的循环右移&#xff1a;RC…

lunar-1.5.jar

公历农历转换包 https://mvnrepository.com/artifact/com.github.heqiao2010/lunar <!-- https://mvnrepository.com/artifact/com.github.heqiao2010/lunar --> <dependency> <groupId>com.github.heqiao2010</groupId> <artifactId>l…

使用文件附件

文件附件在peoplesoft中非常常见 This chapter provides an overview of the file attachment functions and discusses: Developing applications that use file attachment functions. Application development considerations. Application deployment and system configu…

基于 Appium 的 Android UI 自动化测试!

自动化测试是研发人员进行质量保障的重要一环&#xff0c;良好的自动化测试机制能够让开发者及早发现编码中的逻辑缺陷&#xff0c;将风险前置。日常研发中&#xff0c;由于快速迭代的原因&#xff0c;我们经常需要在各个业务线上进行主流程回归测试&#xff0c;目前这种测试大…

Kafka入门04——原理分析

目录 01理解Topic和Partition Topic(主题) Partition(分区) 02理解消息分发 消息发送到分区 消费者订阅和消费指定分区 总结 03再均衡(rebalance) 再均衡的触发 分区分配策略 RangeAssignor(范围分区) RoundRobinAssignor(轮询分区) StickyAssignor(粘性分区) Re…

软件测试面试1000问(含文档)

前前后后面试了有20多家的公司吧&#xff0c;最近抽空把当时的录音整理了下&#xff0c;然后给大家分享下 开头都是差不多&#xff0c;就让做一个自我介绍&#xff0c;这个不用再给大家普及了吧 同时&#xff0c;我也准备了一份软件测试视频教程&#xff08;含接口、自动化、…

进阶课4——随机森林

1.定义 随机森林是一种集成学习方法&#xff0c;它利用多棵树对样本进行训练并预测。 随机森林指的是利用多棵树对样本进行训练并预测的一种分类器&#xff0c;每棵树都由随机选择的一部分特征进行训练和构建。通过多棵树的集成&#xff0c;可以增加模型的多样性和泛化能力。…

MTK AEE_EXP调试方法及user版本打开方案

一、AEE介绍 AEE (Android Exception Engine)是安卓的一个异常捕获和调试信息生成机制。 手机发生错误(异常重启/卡死)时生成db文件(一种被加密过的二进制文件)用来保存和记录异常发生时候的全部内存信息,经过调试和仿真这些信息,能够追踪到异常的缘由。 二、调试方法…

深度学习_6_实战_点集最优直线解_代码解析

问题描述&#xff1a; 上述题目的意思为&#xff0c;人工造出一些数据点&#xff0c;对我们的模型y Xw b ∈进行训练&#xff0c;其中标准模型如下&#xff1a; 其中W和X都为张量&#xff0c;我们训练的模型越接近题目给出的标准模型越好 训练过程如下&#xff1a; 人造数…

订水商城H5实战教程-04用户注册

目录 1 用户注册2 创建模型应用3 开发审核功能4 配置菜单5 发布预览最终效果 我们上一篇讲解了用户协议的功能&#xff0c;如果用户同意协议&#xff0c;就可以跳转到注册页面&#xff0c;要求用户录入个人基本信息&#xff0c;本篇我们介绍一下用户注册功能。 1 用户注册 用户…

Python-自动化绘制股票价格通道线

常规方案 通过将高点/低点与其 2 个或 3 个相邻点进行比较来检测枢轴点,并检查它是否是其中的最高/最低点。对所有枢轴点进行线性回归以获得上方和下方趋势线。价格离开通道后建仓。通过这样做,我们得到如下所示的价格通道。我认为我们可以利用给定的数据取得更好的结果。

OkHttp网络框架深入理解-SSL握手与加密

OkHttp简介 由Square公司贡献的一个处理网络请求的开源项目&#xff0c;是目前Android使用最广泛的网络框架。从Android4.4开始HttpURLConnection的底层实现采用的是OkHttp。 特点&#xff1a; 支持HTTP/2并允许对同一主机的所有请求共享一个套接字通过连接池,减少了请求延迟…

基于XML的Web服务Java接口(JAX-WS)、Jakarta XML Web Services Eclipse 实现

简介 JAX-WS&#xff08;Java API for XML-Based Web Services&#xff09;&#xff0c;是创建web服务的Java编程接口&#xff0c;特别是SOAP服务。是Java XML编程接口之一&#xff0c;是Java SE 和Java EE 平台的一部分。 JAX-WS 2.0 规范是代替JAX-RPC 1.0的下一代Web服务AP…