首页 > 其他分享 >模拟退火模型 —— 入门案例

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

时间:2024-08-29 11:36:41浏览次数:5  
标签:入门 新解 案例 算法 模拟退火 x0 x1 温度

简介

模拟退火算法(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 plt

T = 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 = x1
    elif math.exp((f1 - f0) / kT) > random.random():  # 概率接受更差解
        x0 = x1
    T *= 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()

标签:入门,新解,案例,算法,模拟退火,x0,x1,温度
From: https://www.cnblogs.com/marsh-mallow/p/18386348

相关文章

  • Stable Diffusion 系列教程 - 3 模型下载和LORA模型的小白入门
    前言**首先,一个比较广泛的模型下载地址为黄框是一些过滤器,比如checkpoints可以理解为比如把1.5版本的SD模型拷贝一份后交叉识别新的画风或场景后得到的模型,可以单独拿出来使用。Hypernetwork和lora在特定场景下都非常好用。我们以majicMIXrealistic麦橘写实模型为例子......
  • 强推!必看!!由中国信通院发布的汇聚99个大模型优秀应用案例集!附219页PDF文件下载
    2024年是大模型深入赋能千行百业,融入实体经济,助力科技创新的一年。截至今年5月,我国国产大模型的数量已经超过300个,预示着大模型在各行业场景的创新应用和深度拓展,对培育新质生产力、高水平赋能新型工业化、推动高质量发展发挥了重要作用。今年,国务院政府工作报告首次提出......
  • 优秀的网络安全工程师应该有哪些能力?零基础入门到精通,收藏这一篇就够了
    网络安全工程师是一个各行各业都需要的职业,工作内容属性决定了它不会只在某一方面专精,需要掌握网络维护、设计、部署、运维、网络安全等技能。目前稍有经验的薪资在10K-30K之间,全国的网络安全工程师还处于一个供不应求的状态,因此非常建议大家尝试学习一下咱们的网络安全工程......
  • 【私有云场景案例分享②】批量装包与冒烟测试的自动化实现
    此文章来源于项目官方公众号:“AirtestProject”版权声明:允许转载,但转载必须保留原链接;请勿用作商业或者非法用途一、前言在软件开发和测试过程中,批量装包和冒烟测试是两个关键环节。随着项目规模的扩大和测试需求的增加,传统的手动操作方式已经无法满足效率和质量的要求。通过......
  • PHP8面向对象快速入门三 类的继承 类方法属性重写和final关键字 parent调用父类的方法
    在PHP中,类的继承(继承)是一种机制,允许一个类继承另一个类的属性和方法,从而实现代码的重用和扩展。继承可以帮助你创建一个基于现有类的新类,保留原有类的特性并增加或修改其功能。classAnimal{public$name='dongwu';protected$age=1;private......
  • 两个月Crypto从入门到进阶专题第1天
    绪论:今天主要讲RSA的原理以及python的实现,RSA的历史这些就不讲了,RSA的历史你自己去搜视频看才有趣,三个大佬创造的RSA。1.RSA加密过程1.1选择p,q两个质数(为什么选质数,后面就知道了,这里说一下学习方法:有一些步骤不知道为什么的,先看下去,可能后面会给你解答,不要死板,后面闲聊就......
  • SpringBoot+Grafana+Prometheus+Docker-Compose 快速部署与JVM监控的快速入门的简单案
    1.Java项目1.1项目结构1.2pom.xml<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation=&q......
  • Qdrant官方快速入门和教程简化版
    Qdrant官方快速入门和教程简化版说明:首次发表日期:2024-08-28Qdrant官方文档:https://qdrant.tech/documentation/关于阅读Qdrant一小部分的官方文档,并使用中文简化记录下,更多请阅读官方文档。使用Docker本地部署Qdrantdockerpullqdrant/qdrantdockerrun-d-p6333:6......
  • C++入门基础(内容太干,噎住了)
    文章目录1.缺省参数2.函数重载2.1重载条件:1.参数类型不同2.参数个数不同3.参数类型顺序不同 2.2不做重载条件情况:1.返回值相同时2.当全缺省遇见无参数3.引用3.1引用特性:3.2引用的使用1.缺省参数1.缺省参数是声明或定义函数时为函数的参数指定⼀个缺省值。......
  • 硬件工程师入门笔记---电阻篇(来源--Trent带你学硬件)
    1、电阻封装类型:0075/0100/0201/0402/0603/0805/1206/1210/1218/2010/25122、不同的封装能承受的电流不一样,如下图:3、电阻的精度误差:4、贴片电阻读数:R33--0.33Ω  33R---33Ω   R10 R可看作小数点。102--10✖10*2=1000Ω=1k  103----10k1302-13k 色环......