Simulated Annealing

news2024/11/28 0:32:07

模拟退火最大值算法:

  • 初始化起始解 x 0 x_0 x0 、温度 t 0 t_0 t0 以及迭代次数 steps,计算初始值 y 0 y_0 y0
  • 扰动产生新解 x 1 x_1 x1, 计算对应函数值 y 1 y_1 y1
  • 依据 Δ y = y 1 − y 0 \Delta y = y_1 - y_0 Δy=y1y0 决策是否接受新解,具体决策方式依据以下概率公式:

p = { 1 Δ y > 0 e Δ y / T Δ y < 0 p=\left\{ \begin{aligned} 1 & & \Delta y > 0 \\ e^{\Delta y/ T} & & \Delta y <0 \end{aligned} \right. p={1eΔy/TΔy>0Δy<0

  • 更新温度 T 1 = T 0 / l n ( 1 + t ) = T 0 / l n ( 1 + 1 ) T_1 = T_0 / ln(1 + t) = T_0 / ln(1 + 1) T1=T0/ln(1+t)=T0/ln(1+1)
  • 重复以上步骤直至达到退出条件

以求解函数 F ( x ) = x ⋅ c o s ( x ) + x , x ∈ ( 0 , 15 ) F(x) = x \cdot cos(x) + x, x\in(0, 15) F(x)=xcos(x)+xx(0,15) 最大值为例 :

import math
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt


def F(x):
    return np.power(x, 0.5) * np.cos(x) + x


num_of_samples = 64
X = np.linspace(0, 15, num_of_samples).reshape(-1, 1)
Y = F(X)
plt.plot(X, Y, label='F(x)')

请添加图片描述

算法实验如下:

def max_by_simulated_annealing(t0, steps):
    x0 = np.random.uniform(0, 15, 1)
    y0 = F(x0)
    
    x_max = x0
    y_max = y0
    
    for t in range(1, steps + 1):
        xt = np.random.normal(x0, 1, 1)
        while xt < 0 or xt > 15:
            xt = np.random.normal(x0, 1, 1)
        
        yt = F(xt)
        y_delta = yt - y0
        if y_delta > 0:
            x0 = xt
            y0 = yt
        else :
            p = math.exp(y_delta / t0)
            if np.random.uniform(0, 1) < p:
                x0 = xt
                y0 = yt
        if y0 > y_max:
            x_max = x0
            y_max = y0
            
        t0 = t0 / math.log(1 + t)
        
    return x_max, y_max

首先尝试初始温度 T 0 = 5 T_0 = 5 T0=5, 迭代次数 s t e p s = 1000 steps = 1000 steps=1000 :

row = 4
line = 4
plt.figure(figsize=(16, 12), dpi=80)
for i in range(1, row * line + 1):
    plt.subplot(row,line,i)
    x_hat, y_hat = max_by_simulated_annealing(5, 1000)
    plt.plot(X, Y, label='F(x)')
    plt.scatter([x_hat], [y_hat], marker='+', label='maximum')
    plt.legend()

16 次模拟中有 9次得到最大值,7次得到次优解:

请添加图片描述

尝试初始温度 T 0 = 10 T_0 = 10 T0=10, 迭代次数 s t e p s = 1000 steps = 1000 steps=1000

row = 4
line = 4
plt.figure(figsize=(16, 12), dpi=80)
for i in range(1, row * line + 1):
    plt.subplot(row,line,i)
    x_hat, y_hat = max_by_simulated_annealing(10, 1000)
    plt.plot(X, Y, label='F(x)')
    plt.scatter([x_hat], [y_hat], marker='+', label='maximum')
    plt.legend()

16 次模拟中有 6次得到最大值,10次得到次优解:

请添加图片描述

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

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

相关文章

element-ui输入框如何实现回显的多选样式?

废话不多说直接上效果&#x1f9d0; 效果图 <template><div><el-form:model"params"ref"queryForm"size"small":inline"true"label-width"68px"><el-form-item label"标签" prop"tag&q…

CurrentHashMap巧妙利用位运算获取数组指定下标元素

先来了解一下数组对象在堆中的存储形式【数组长度&#xff0c;数组元素类型信息等】 【存放元素对象的空间】 Ma 基础信息实例数据内存填充Mark Word,ClassPointer,数组长度第一个元素第二个元素固定的填充内容 所以我们想要获取某个下标的元素首先要获取这个元素的起始位置…

UEC++ 虚幻5第三人称射击游戏(二)

UEC++ 虚幻5第三人称射击游戏(二) 派生榴弹类武器 新建一个继承自Weapon的子类作为派生榴弹类武器 将Weapon类中的Fire函数添加virtual关键字变为虚函数让榴弹类继承重写 在ProjectileWeapon中重写Fire函数,新建生成投射物的模版变量 Fire函数重写逻辑 代码//生成的投射物U…

使用Spring Boot和自定义缓存注解优化应用性能

在现代应用开发中&#xff0c;缓存是提高系统性能和响应速度的关键技术之一。Spring Boot提供了强大的缓存支持&#xff0c;但有时我们需要更灵活的缓存控制。本文将介绍如何使用Spring Boot和自定义缓存注解来优化应用性能。 1. 为什么需要自定义缓存注解&#xff1f; Sprin…

CH12_函数和事件

第12章&#xff1a;Javascript的函数和事件 本章目标 函数的概念掌握常用的系统函数掌握类型转换掌握Javascript的常用事件 课程回顾 Javascript中的循环有那些&#xff1f;Javascript中的各个循环特点是什么&#xff1f;Javascript中的各个循环语法分别是什么&#xff1f;…

Android仿今日头条新闻(一)

新建一个侧边栏的文件&#xff0c;创建成功后直接运行。可以看到带滑动的侧边栏功能如图所示&#xff1a; 主体UI&#xff1a; 新闻UI的实现: 侧边栏&#xff1a; 更换一下颜色&#xff1a; 学习参考-浩宇开发

科研绘图系列:R语言两组数据散点分布图(scatter plot)

介绍 展示两组数据的散点分布图是一种图形化表示方法,用于显示两个变量之间的关系。在散点图中,每个点代表一个数据点,其x坐标对应于第一组数据的值,y坐标对应于第二组数据的值。以下是散点图可以展示的一些结果: 线性关系:如果两组数据之间存在线性关系,散点图将显示出…

【JVM系列】Full GC(完全垃圾回收)的原因及分析

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

IDA*——AcWing 180. 排书

IDA* 定义 IDA*&#xff08;Iterative Deepening A*&#xff09;是一种结合了深度优先搜索&#xff08;DFS&#xff09;的递归深度限制特性和A搜索的启发式估价函数的搜索算法。它主要用于解决启发式搜索问题&#xff0c;尤其是当搜索空间很大或者搜索成本不确定时。 IDA* 是…

分享大厂对于缓存操作的封装

hello&#xff0c;伙伴们好久不见&#xff0c;我是shigen。发现有两周没有更新我的文章了。也是因为最近比较忙&#xff0c;基本是993了。 缓存大家再熟悉不过了&#xff0c;几乎是现在任何系统的标配&#xff0c;并引申出来很多的问题&#xff1a;缓存穿透、缓存击穿、缓存雪崩…

markdown导入其它markdown文件

相应语法 [toc] # 测试不同功能 <p> 这是类似超链接的管理方式 </p>[链接测试0](./part0/uml_base.md)[链接测试1](./part1/math_base.md)---<p> 这是直接导入文件的管理方式 </p>import "./part0/uml_base.md"---import "./part1/mat…

arm64架构kvm情景分析 - type1型和type2型虚拟机管理器

内核版本&#xff1a;linux-v5.9 架构&#xff1a;arm64 1 type1型和type2虚拟机管理器 在arm64架构中&#xff0c;共有EL3到EL0四个异常级别&#xff0c;EL3异常级别最高。通常操作系统&#xff08;如linux&#xff09;运行在EL1&#xff0c;应用程序运行在EL0&#xff0c;EL…

S32DS S32 Design Studio for S32 Platform 3.5 代码显示行号与空白符

介绍 NXP S32DS&#xff0c;全称 S32 Design Studio&#xff0c;s32 系列芯片默认使用 S32 Design Studio for S32 Platform 作为 IDE 集成开发环境&#xff0c;当前版本 S32 Design Studio for S32 Platform 3.5&#xff0c;IDE 可以简称 s32DS 使用 S32DS&#xff0c;可以认…

python操作SQLite3数据库进行增删改查

python操作SQLite3数据库进行增删改查 1、创建SQLite3数据库 可以通过Navicat图形化软件来创建: 2、创建表 利用Navicat图形化软件来创建: 存储在 SQLite 数据库中的每个值(或是由数据库引擎所操作的值)都有一个以下的存储类型: NULL. 值是空值。 INTEGER. 值是有符…

JavaWeb开发基础7个Web术语解析

7个Web术语 Website: static vs dynamic HTTP HTTP Requests GET vs POST Servlet Container Server: Web vs Application Content Type Website: static vs dynamic 网站内容包括文本、图片、音频、视频&#xff0c;通过URL来访问。网站分为静态网站和动态网站。 静态网…

LLMs之gptpdf:gptpdf的简介、安装和使用方法、案例应用之详细攻略

LLMs之gptpdf&#xff1a;gptpdf的简介、安装和使用方法、案例应用之详细攻略 目录 gptpdf的简介 1、处理流程 第一步&#xff0c;使用 PyMuPDF 库&#xff0c;对 PDF 进行解析出所有非文本区域&#xff0c;并做好标记&#xff0c;比如: 第二步&#xff0c;使用视觉大模型&…

【数智化人物展】天云数据CEO雷涛:大模型连接数据库 为数智化提供高价值数据...

雷涛 本文由天云数据CEO雷涛投递并参与由数据猿联合上海大数据联盟共同推出的《2024中国数智化转型升级先锋人物》榜单/奖项评选。 大数据产业创新服务媒体 ——聚焦数据 改变商业 这几天&#xff0c;奥特曼讲SQL数据库和大模型结合起来会产生什么样的化学变化引起行业关注。为…

13.SQL注入-宽字节

SQL注入-宽字节 含义&#xff1a; MySQL是用的PHP语言&#xff0c;然后PHP有addslashes()等函数&#xff0c;这类函数会自动过滤 ’ ‘’ null 等这些敏感字符&#xff0c;将它们转义成’ ‘’ \null&#xff1b;然后宽字节字符集比如GBK它会自动把两个字节的字符识别为一个汉…

frp技术

说明&#xff1a;frp&#xff08;https://github.com/fatedier/frp&#xff09; 是一个专注于内网穿透的高性能的反向代理应用&#xff0c;支持 TCP、UDP、HTTP、HTTPS 等多种协议&#xff0c;且支持 P2P 通信。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露…

19.JWT

1►JWT博客推荐 阮老师讲得很好了&#xff0c;网址如下&#xff1a; http://www.ruanyifeng.com/blog/2018/07/json_web_token-tutorial.html 2►ry是怎么践行JWT的呢&#xff1f; 问题一&#xff1a;不登录的时候有token吗&#xff1f; 答&#xff1a;没有&#xff0c;所…