群智能算法之模拟退火算法

1.模拟退火算法简介:

2.模拟退火算法的关键点:

(1)随机的更新可行解x,判断可行解x对应的函数值和原来函数值之间的大小:如果优于原来的函数值,则让新的可行解x为问题的解;否则以一定的概率(大于某个随机的概率值时)去接受此可行解。

(2)温度T在不断的下降,对应的概率也在不断的变化。T较大时,对应的概率值也大,表明,接受差解的概率大,有利于跳出局部最优解;T较小时,对应的概率也小,表明,接受差解的概率小,此时,迭代进入后期,靠近最优解,有利于保存最优解。

3.代码:

'''
1.本文的算法是模拟退火算法
2.模拟退火算法的核心在于,对问题的差解以一定的概率去接受,此过程有利于跳出局部最优解
3.f=x*0.2*np.sin(x**2)
'''import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import mathdef f(x):   #求目标函数的最小值# return (x**2-5*x)*np.sin(x**2)# return x*0.002return 10 * math.sin(5 * x) + 7 * math.cos(4 * x)# return x*math.sin(x)*math.cos(2*x)-2*x*math.sin(3*x)+3*x*math.sin(4*x)T=100 #初始温度
T_end=0.01   #终止温度
coldrate=0.9  #温度下降速率x=np.random.uniform(0,5)    #为x随机赋一个初值best=[] #记录问题每一次迭代时问题的最优解
history=[]  #记录x的取值# history.append(x)while T > T_end :y=f(x)x_new=x+np.random.uniform(-1,1) #随机的更新x的取值# print(x)y_new=f(x_new)  #计算新解对应的函数值# history.append(x_new)   #记录x的取值# best.append(y_new)  #记录函数值if y_new < y:x=x_new #更新问题的解为新的取值# best.append(y_new)history.append(x_new)  # 记录x的取值best.append(y_new)  # 记录函数值else:p=np.exp(-(y_new-y)/T)r=np.random.uniform(0,1)    #随机生成比较的概率值if p > r:x=x_new #以一定的概率接受差解history.append(x_new)  # 记录x的取值best.append(y_new)  # 记录函数值# best.append(y_new)# else:   #拒绝差解:# best.append(y)T=T*coldrate    #温度下降,模拟退火
# x1=[i for i in np.linspace(0,5)]
# y1=map(f,x1)
plt.plot(history,best)
plt.plot(x,f(x),'om')
plt.show()
print('最优解和函数最小值分别为:',x,f(x))

4.运行结果:

5.模拟退火算法总结:

模拟退火算法是在可行解x小于最优解的情况时,以一定的概率T接受当前的可行解x,并继续运行。概率T在多态的变化,T较大时,对应的概率值也大,表明,接受差解的概率大,有利于跳出局部最优解;T较小时,对应的概率也小,表明,接受差解的概率小,此时,迭代进入后期,靠近最优解,有利于保存最优解。

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

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

相关文章

FL Studio21.2.0.3421最新汉化破解版中文解锁下载完整版本

音乐在人们心中的地位日益增高&#xff0c;近几年音乐选秀的节目更是层出不穷&#xff0c;喜爱音乐&#xff0c;创作音乐的朋友们也是越来越多&#xff0c;音乐的类型有很多&#xff0c;好比古典&#xff0c;流行&#xff0c;摇滚等等。对新手友好程度基本上在首位&#xff0c;…

【存储】lotusdb的原理及实现

最近看了lotusdb的源码。lotusdb是一个golang实现的嵌入式的持久化kv存储。 从整体设计上看&#xff0c;lotusdb采用了类似LSM树的架构&#xff0c;并采用了针对SSD的优化&#xff0c;将key和value分开存储。在此基础上&#xff0c;lotusdb将LSM树中存储key的SST使用B树或者ha…

WORD中的表格内容回车行距过大无法调整行距

word插入表格&#xff0c;编辑内容&#xff0c;换行遇到如下问题&#xff1a; 回车后行距过大&#xff0c;无法调整行距。 解决方法&#xff08;并行&#xff09;&#xff1a; 方法1&#xff1a;选中要调整的内容&#xff0c;菜单路径&#xff1a;“编辑-清除-格式” 方法2&am…

银河麒麟服务器版v4安装程序缺少依赖包,改为利用手机联网在线安装

1 将安卓手机连接使用usb转typec线连接到服务器的usb口。&#xff08;linux桌面版&#xff09;也可以类似的方法手机联网。 2 在手机热点中打开usb共享 3 使用ifconfig命令找到手机被服务器识别成的网卡名 4 使用dhclient “手机网卡名”命令&#xff0c;使服务器能上网。 5 变…

No173.精选前端面试题,享受每天的挑战和学习

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入…

Java SE 学习笔记(十八)—— 注解、动态代理

目录 1 注解1.1 注解概述1.2 自定义注解1.3 元注解1.4 注解解析1.5 注解应用于 junit 框架 2 动态代理2.1 问题引入2.2 动态代理实现 1 注解 1.1 注解概述 Java 注解&#xff08;Annotation&#xff09;又称Java标注&#xff0c;是JDK 5.0引入的一种注释机制&#xff0c;Java语…

Unity ScrollView最底展示

Unity ScrollView最底展示 问题方案逻辑 问题 比如在做聊天界面的时候我们肯定会使用到ScrollView来进行展示我们的聊天内容&#xff0c;那么这个时候来新消息的时候就需要最底展示&#xff0c;我认为这里有两种方案&#xff1b; 一种是通过算法每一条预制体的高度*一共多少…

NPMCM历年赛题汇总

题目来源:全国研究生数学建模大赛 2021–2023年 年份题号题目2022A移动场景超分辨定位问题2022B方形件组批优化问题2022C汽车制造涂装–总装缓存调序区调度优化问题2022DPIAS架构芯片资源排布问题2022E草原放牧策略问题2022FCOVID-19疫情期间生活物资的科学管理问题2021A相关…

Docker中Failed to initialize NVML: Unknown Error

参考资料 Docker 中无法使用 GPU 时该怎么办&#xff08;无法初始化 NVML&#xff1a;未知错误&#xff09; SOLVED Docker with GPU: “Failed to initialize NVML: Unknown Error” 解决方案需要的条件: 需要在服务器上docker的admin list之中. 不需要服务器整体的admin权限.…

驼峰命名法

文章目录 前言&#xff08;一&#xff09;大驼峰&#xff08;二&#xff09;小驼峰 前言 驼峰命名法 增加代码的可读性 &#xff08;一&#xff09;大驼峰 命名 类 所有单词的首字母都要大写 &#xff08;二&#xff09;小驼峰 命名 变量名 和 方法名 如果有一个单词&#…

汇编运算符和表达式

运算符&#xff1a; 汇编语言由表达式和运算符组成&#xff0c;运算符分为数值运算符和属性运算符。属性运算符面向变量或标号。 数值运算符&#xff1a; 算术运算符&#xff1a; 运算符类型 ✓ ( 正号 ) 、 -( 负号 ) ✓ ( 加 ) 、 -( 减 ) 、 *( 乘 ) 、 /( 除 ) 、 MO…

Linux下的IMX6ULL——开发板的第一个APP和驱动实验(三)

前言&#xff1a; 万事开头难&#xff0c;如果我们在开发板上开发出第一个应用程序&#xff0c;第一个驱动程序&#xff0c;那么后续的开发就会稍微简单点&#xff0c;下面让我们来进行第一个应用程序和第一驱动程序的开发吧。 目录 一、开发板的第1个APP实验 1.通过Git仓库…

批量去除pdf每一页相同未知的同样的内容

例如我想去除每一页右下角的www.alevelcollege.com ①打开acrobat pro ②编辑文件和图像 ③ctrlF输入字符串www.alevelcollege.com替换为空 ④鼠标点击替换 ⑤回车键按下不放&#xff0c;会自动翻页&#xff0c;直到翻页到最后一页。

算法训练|数据流中的中位数

LCR 160. 数据流中的中位数 - 力扣&#xff08;LeetCode&#xff09; 总结&#xff1a;这题自己最开始的想法是直接使用vector容器&#xff0c;每次取中位数的时候就进行一次排序&#xff0c;超时。题解很巧妙的利用大根堆和小根堆来解决问题&#xff0c;大根堆和小根堆各存一…

mac安装jenkins

1、安装jenkins之前确认是否安装了homebrew 2、开始安装jenkins 安装完如下图则安装完成 3、不想用默认ip和端口的自己改一下ip和端口 4、启动jenkins brew services restart jenkins 使用自己修改后的ip:port http://0.0.0.0:8088 根据提示信息&#xff0c;拿到管理员密码&…

nodejs处理图片的几种方法,使用sharp,jimp,webconvert

使用sharp Sharp是一款快速高效的Node.js图片处理库&#xff0c;支持图片格式转换、尺寸调整、压缩、裁剪、旋转、水印等功能。以下是使用Sharp库的基本步骤&#xff1a; 1. 安装Sharp库 安装Sharp库可以使用npm命令&#xff1a; npm install sharp2. 调用Sharp库 在代码中…

深度学习中Transformer的简单理解

Transformer 网络结构 Transformer也是由编码器和解码器组成的。 每一层Encoder编码器都由很多层构成的&#xff0c;编码器内又是self-attention和前馈网络构成的。Self-attention是用来做加权平均&#xff0c;前馈网络用来组合。 但是decoder有点不同&#xff0c;多了一层En…

从0到1之微信小程序快速入门(基础知识)

目录 JSON 配置文件 WXML 模板 WXSS 样式 JS 逻辑交互 微信小程序中&#xff0c;每个页面由4 个基本文件组成&#xff0c;它们分别是&#xff1a;js文件(页面的脚本文件&#xff0c;存放页面的数据、事件处理函数等)、json文件(当前页面的配置文件&#xff0c;配置窗口的外…

html2pdf

页面布局时将需要保存在同一页pdf的dom元素用div包裹&#xff0c;并为该div添加class类名&#xff0c;例如.convertPDF&#xff0c;如果有多页创建多个.convertPDF这个div&#xff0c;再循环保存pdf即可 用到了html2canvas和JsPdf这两个插件&#xff0c;自行站内搜索安装

两个Tomcat插件配置不同端口,session冲突,同时登录被挤下线问题的解决

如果是配置了两个Tomcat的插件&#xff0c;在同一ip有两个需要同时登录的项目&#xff0c;可以在其中一个web项目的web.xml文件里添加session命名的配置&#xff0c;如下&#xff1a; <!--配置不同的session&#xff0c;避免管理端和手机端两个同时登录被挤下线--><se…