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

news2024/12/23 13:35:19

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 math

def f(x):   #求目标函数的最小值
    # return (x**2-5*x)*np.sin(x**2)
    # return x*0.002
    return 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.coloradmin.cn/o/1147925.html

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

相关文章

centos7 部署 Flink

1. 准备 安装的前提是虚拟机里已安装了jdk 去官网下载 Flink 所有版本下载地址&#xff1a;https://archive.apache.org/dist/flink/ 找到下图的安装包&#xff0c;下载即可 下载完后&#xff0c;将其上传至虚拟机的某个地方&#xff0c;本人将其放在 /home/flink/ 下 解压…

nacos面试题

Nacos中保证的是CP还是AP&#xff1f; 通常我们说&#xff0c;Nacos技能保证CP&#xff0c;也能保证AP&#xff0c;具体看如何配置&#xff0c;但其实只不过是Nacos中的注册中心能保证CP或AP&#xff0c;Nacos中的配置中心其实没什么CP或AP&#xff0c;因为配置中心的数据是存在…

2023.10.28 关于 synchronized 原理

目录 synchronized 特性 synchronized 优化机制 锁升级&#xff08;锁膨胀&#xff09; 其他优化机制 锁消除 锁粗化 synchronized 特性 开始时是乐观锁&#xff0c;如果锁冲突频繁&#xff0c;就转为悲观锁开始是轻量级锁&#xff0c;如果锁被持有的时间较长&#xff0c…

水果百科网站 vue+uniapp微信小程序设计与实现

设计并实现了鲜而廉水果微信小程序。系统选用java语言&#xff0c;应用Springboot框架&#xff0c; MySQL为后台数据库。系统主要包括用户、水果百科、水果视频、交流论坛等功能模块。 经过认真细致的研究&#xff0c;精心准备和规划&#xff0c;最后测试成功&#xff0c;系统可…

[导弹打飞机H5动画制作]飞机与导弹的碰撞检测

界面参考: 代码参考: this.btnShootTruck.addEventListener("click", startShoot); var _this = this; _this.ShootFire.stop(); _this.ShootFire.alpha = 0; //_this.AsyPlaneObj.gotoAndStop(0); _this.AsyPlaneObj.alpha = 1; _this.AsyPlaneObj.BombPlaneObj.al…

【vtk学习笔记2】vtk编程中的基本对象

一、VTK编程中的基本对象 数据可视化一般需要一个数据源&#xff0c;可以来说具体的算法&#xff0c;如有限元、边界元等&#xff0c;也可以是测量数据&#xff0c;如医学检测数据等。这些基础数据经过变换处理&#xff0c;变成计算机图形流水线支持的数据&#xff0c;最后显示…

redis实现分布式延时队列

文章目录 延时队列简介应用场景案例&#xff1a;考虑&#xff1a;实现&#xff1a;整体思路&#xff1a;具体实现生产者消费者 运行结果 redis分布式延时队列优势redis分布式延时队列劣势 延时队列简介 延时队列是一种特殊的消息队列&#xff0c;它允许将消息在一定的延迟时间…

【系统安全】等保二级、三级自查对比

目录 1、定义&#xff1a;二级 VS 三级 2、要求&#xff1a;二级 VS 三级 3、适用企业、单位 1、定义&#xff1a;二级 VS 三级 等保&#xff1a;全称网络安全等级保护&#xff0c;是指对信息系统进行分级&#xff0c;对不同等级的信息系统进行不同的安全保护和监管的工作。…

仿写知乎日报第二周

新学到的 新学到了WKWebView&#xff1a; WKWebView是是苹果推崇的一个新的类&#xff0c;它用于将一个网页嵌套在软件里。这里我是将点击cell后的内容中放入WKWebView对象。WKWebView的使用&#xff1a; 首先&#xff0c;要导入这个类&#xff1a; #import <WebKit/WebK…

3.7 移动端TB(D)R架构基础

一、各类电子设备功耗对比 桌面级主流性能平台&#xff0c;功耗一般为300W&#xff08;R7/I7X60级别显卡&#xff09;&#xff0c;游戏主机150-200W入门和旗舰游戏本平台功耗为100W主流笔记本为50-60W&#xff0c;超极本为15-25W&#xff0c;旗舰平板为8-15W旗舰手机为5-8W&am…

《python语言程序设计》(2018版)第5章编程题 第41题第3次路过。总结一下。没有走完的路

这道题最大的需要就是能够进行两个数值的对比&#xff0c;同时还能让更多的数值依次进入到对比中。 这道题的解题版本 这个版本只是能统计出谁是最大数。但是无法统计最大数出现了多少次。 number "" count 0 data_number 0 while number ! 0:number eval(inpu…

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

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

MinIO安装

Minio是一个开源的分布式对象存储服务器&#xff0c;它兼容Amazon S3服务接口。它可以用于构建私有云存储&#xff0c;为应用程序提供可扩展的对象存储功能。 安装 docker安装 docker run -d -p 9000:9000 -p 50000:50000 --name minio \ -e "MINIO_ROOT_USERadminpili…

泰州市旅游景点门票预订管理系统 vue+uniapp微信小程序

本文从管理员、用户的功能要求出发&#xff0c;泰州市旅游景点管理小程序中的功能模块主要是实现用户、景点类型、景区信息、门票预定。经过认真细致的研究&#xff0c;精心准备和规划&#xff0c;最后测试成功&#xff0c;系统可以正常使用。分析功能调整与泰州市旅游景点管理…

Leetcode—275.H指数II【中等】

2023每日刷题&#xff08;十三&#xff09; Leetcode—275.H指数II 算法思想 实现代码 int minValue(int a, int b) {return a < b ? a : b; }int hIndex(int* citations, int citationsSize){int left, right;left 0;right citationsSize - 1;while(left < right) …

AD教程(一)工程组成及创建

AD教程&#xff08;一&#xff09;工程组成及创建 工程组成 原理图库 绘制电阻模型、芯片模型、电容模型等&#xff0c;即将元件模型绘制出来。 原理图 将绘制的原件模型放置到原理图中&#xff0c;然后再添加连接的导线、网络标号。器件和器件之间的连接关系&#xff0c;在原…

粤嵌实训医疗项目--day04(Vue + SpringBoot)

往期回顾 粤嵌实训医疗项目--day03&#xff08;Vue SpringBoot&#xff09;-CSDN博客粤嵌实训医疗项目day02&#xff08;Vue SpringBoot&#xff09;-CSDN博客粤嵌实训医疗项目--day01&#xff08;VueSpringBoot&#xff09;-CSDN博客 目录 一、用户详细信息查询 (查询信息与…

业务设计——用户敏感信息展示脱敏及其反脱敏

业务需求 将用户敏感信息脱敏展示到前端是出于保护用户隐私和信息安全的考虑。 敏感信息包括但不限于手机号码、身份证号、银行卡号等&#xff0c;这些信息泄露可能导致用户个人信息的滥用、身份盗用等严重问题。脱敏是一种常用的保护用户隐私的方式&#xff0c;它的目的是减少…

华为云资源搭建过程

网络搭建 EIP&#xff1a; 弹性EIP&#xff0c;支持IPv4和IPv6。 弹性公网IP&#xff08;Elastic IP&#xff09;提供独立的公网IP资源&#xff0c;包括公网IP地址与公网出口带宽服务。可以与弹性云服务器、裸金属服务器、虚拟IP、弹性负载均衡、NAT网关等资源灵活地绑定及解绑…

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

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