数学建模--退火算法求解最值的Python实现

目录

1.算法流程简介

2.算法核心代码

3.算法效果展示

1.算法流程简介

"""
1.设定退火算法的基础参数
2.设定需要优化的函数,求解该函数的最小值/最大值
3.进行退火过程,随机产生退火解并且纠正,直到冷却
4.绘制可视化图片进行了解退火整体过程
"""

2.算法核心代码

#利用退火算法求解函数的极值(优化问题)
import numpy as np
from random import random
import random
import math
import matplotlib.pyplot as plt
#设定退火算法的基础参数
x_min,x_max=(-3,3)#x的取值范围
alpha=0.99#降温系数为0.99
bg_temp=100#起始温度
ed_temp=0.01#最终温度(可设可不设)
cycle_number=500#循环次数
#设定需要优化的函数,求解该函数的最小值
"""
需要运用的化直接修改函数即可.
不过需要注意定义域的问题,主动修改一下定义域就行
"""
def opt_fun(x):y=11*np.sin(2*x)+7*np.cos(5*x)return y
#由于没有具体的数据,我们直接随机设置值就行随机产生初始值#随机产生本次退火解
def new_result(x):x1=x+bg_temp*random.uniform(-1,1)#退火解的合理性检查并且纠正:if  x_min<=x1<=x_max:return x1elif x1<x_min:add_min=random.uniform(-1,1)return add_min*x_min+(1-add_min)*xelse:add_max=random.uniform(-1,1)return add_max*x_max+(1-add_max)*x
def draw_picture(x):plt.cla()#绘图的时候这里可以进行修改#注意这里y的取值范围[-25,25]要大体预估一下plt.axis([x_min-1,x_max+1,-25,25])m=np.arange(x_min,x_max,0.0001)plt.plot(m,opt_fun(m),color='red')plt.plot(x,opt_fun(x),marker='*',color='b',markersize='8')plt.title('Current Temperature={}'.format(T))plt.pause(0.1)#设定接受概率函数
def p(x,x1):return math.exp(-abs(opt_fun(x)-opt_fun(x1))/T)#循环退火过程,直到冷却求出最优解
def Annealing_cycle():global Tcount_number=0T=bg_tempx=random.uniform(x_min,x_max)print("*******************************************************************************************************************")while T>ed_temp:draw_picture(x)for i in range(cycle_number):x1=new_result(x)#求解最小值的过程if opt_fun(x)>=opt_fun(x1):x=x1else:if random.random()<=p(x,x1):x=x1else:continueT=T*alphacount_number=count_number+1print("当前执行第{}".format(count_number),"次退火过程","  当前退火温度为:{}".format(T),"  当前最优值:{}".format(opt_fun(x)))print("*******************************************************************************************************************")print("本次退火优化过程共执行{}".format(count_number),"次求得的最优解为:{}".format(opt_fun(x)))print("*******************************************************************************************************************")
Annealing_cycle()

3.算法效果展示

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

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

相关文章

安防监控/视频汇聚/云存储/AI智能视频融合平台页面新增地图展示功能

AI智能分析网关包含有20多种算法&#xff0c;包括人脸、人体、车辆、车牌、行为分析、烟火、入侵、聚集、安全帽、反光衣等等&#xff0c;可应用在安全生产、通用园区、智慧食安、智慧城管、智慧煤矿等场景中。将网关硬件结合我们的视频汇聚/安防监控/视频融合平台EasyCVR一起使…

MATLAB 动态图GIF

MATLAB 动态图GIF 前言一、创建动态图&#xff08;动态曲线、动态曲面&#xff09;1. 创建动画曲线&#xff08;MATLAB animatedline函数&#xff09;2. 创建动画曲面 二. 保存动态图三、完整示例1. 动态曲线&#xff08; y s i n ( x ) ysin(x) ysin(x)&#xff09;2. 动态曲…

bash: cmake: command not found...+++++++lsb_release: command not found

一 .bash: cmake: command not found… centos中安装那个cmake。 1、问题 [rootPC3 home]# cmake bash: cmake: command not found... Similar command is: make当前系统&#xff1a; [rootPC3 home]# lsb_release -a LSB Version: :core-4.1-amd64:core-4.1-noarch:cxx…

mysql索引为什么提高查询速度(底层原理)

一、索引原理图 二、索引数据存储到硬盘而不是内存&#xff1f; 硬盘内存 成本低成本高 容量大容量小 读写速度一般读取速度快 断电后数据永久存储断电后数据清空 三、硬盘数据为什么要读取到内存&#xff1f;为啥不直接…

HarmonyOS—UI开发性能提升的推荐方法

注&#xff1a;本文转载自HarmonyOS官网文档 开发者若使用低性能的代码实现功能场景可能不会影响应用的正常运行&#xff0c;但却会对应用的性能造成负面影响。本章节列举出了一些可提升性能的场景供开发者参考&#xff0c;以避免应用实现上带来的性能劣化。 使用数据懒加载 开…

rpm打包

文章目录 rpm打包 1. rpm打包步骤0&#xff09;准备工作&#xff1a;安装打包工具rpm-build和rpmdevtools&#xff08;1&#xff09;在线安装&#xff08;2&#xff09;离线安装 1&#xff09;创建初始化目录2&#xff09;准备打包内容3&#xff09;编写打包脚本 spec文件4&…

Android Studio 汉化

一、汉化&#xff1a; 查看版本号&#xff0c;查看Android Studio版本&#xff0c;根据版本下载对应的汉化包。例如我的是223。 下载汉化包&#xff1a; 中文语言包下载地址 找到对应的版本 回到Android Studio 1、进入设置 2、从磁盘安装插件 3、选择下载好的包点击OK 4、…

【计算机网络】http协议

目录 前言 认识URL URLEncode和URLDecode http协议格式 http方法 GET POST GET与POST的区别 http状态码 http常见header 简易的http服务器 前言 我们在序列化和反序列化这一章中&#xff0c;实现了一个网络版的计算器。这个里面设计到了对协议的分析与处…

QT 一个简易闹钟

1 效果图 pro QT core gui texttospeechgreaterThan(QT_MAJOR_VERSION, 4): QT widgetsCONFIG c11# The following define makes your compiler emit warnings if you use # any Qt feature that has been marked deprecated (the exact warnings # depend on your c…

测试理论与方法----测试流程第三个环节:设计测试用例

测试流程第三个环节&#xff1a;设计测试用例&#xff1a;怎么测<——>测试需求的提取&#xff1a;测什么 ### 5、测试用例 描述&#xff1a;测试用例(TestCase)&#xff1a;是一份关于【具体测试步骤】的文档&#xff0c;是为了达到最佳的测试效果或高效揭露软件中潜藏的…

使用C++操作Redis客户端

"Who can say where the path will go?" 前面我们花了很大的篇幅&#xff0c;讲解了redis中常见常使用的五种数据结构&#xff0c;以及五种数据结构的操作和redis命令。不过在日常开发中&#xff0c;我们的这些操作都是在redis为我们提供的客户端中的&#xff0c;就…

Xilinx UltraScale架构之可配置逻辑块CLB

目录 一、概览 二、UltraScale架构 2.1 UltraScale/UltraScale特点 2.2 与7系列CLB差异 三、 CLB结构 3.1 LUT 3.2 FF 3.3 多路选择器Multiplexers 3.4 进位链Carry Chain 四、应用 4.1 分布式RAM 4.2 移位寄存器 4.3 进位链Carry Chain 五、参考资料 一、概览 二…