【智能算法1】模拟退火算法_Python实现

news2024/12/23 17:16:02

一、模拟退火算法(SA)

1.1 固体退火的原理

加热使得固体融化,然后缓慢地降低温度,以此来让固体内部的粒子排布更加均匀。

分为四个阶段:

升温阶段、降温阶段、等温阶段、达到目标温度退火完成

等温阶段就是在塑造形状。

1.2 Metropolis准则

概率接受新状态,称为Metropolis准则。

假设前一状态为 f(n),系统受到一定扰动,状态变为 f(n+1),相应地,系统能量由 f(n) 变为 f(n+1)。 定义系统由 f(n) 变为 f(n+1) 的接收概率为 p(probability of acceptance):
p = { 1 f(n+1) < f(n) e − f ( n + 1 ) − f ( n ) T f(n+1) >= f(n) p = \begin{cases} 1& \text{f(n+1) < f(n)} \\ e^{-\frac{f(n+1) - f(n)}{T}}& \text{f(n+1) >= f(n)} \end{cases} p={1eTf(n+1)f(n)f(n+1) < f(n)f(n+1) >= f(n)

1.3 算法流程

在这里插入图片描述

1.4 python代码求解f(x)的最小值点

1 示例求解的函数:

f ( x ) = ∣ x ∣ + ∣ x ∣ 2 f(x) = \sqrt{|x|} + |x| ^ 2 f(x)=x +x2

2 函数图像:

在这里插入图片描述

3 代码:

import math
import random
import numpy as np
import matplotlib.pyplot as plt

def cal_expression(x):
    return np.sqrt(np.absolute(x)) + np.sin(np.absolute(x))

def Metropolis(delta_f, T):
    if delta_f < 0:
        return True
    else:
        return True if np.exp(-(delta_f/T)) >= random.uniform(0, 1) else False

# 初始化
T = 100 # 初始温度
MAX_EPOCH = 200 # 迭代次数
LAMBDA = 0.99    # 退火速率
END_TEMP = 0.1  # 结束温度
CHANGE_NEIGHBORHOOD = 100 # 改变的邻域

# 存储结果
result = {}

while T > END_TEMP: # 未到达目标时
    # 随机一个解
    x = new_x = random.randint(-10000, 10000)
    y = cal_expression(x)
    for epoch in range(MAX_EPOCH):
        # 生成新的解
        new_x += random.uniform(-CHANGE_NEIGHBORHOOD, CHANGE_NEIGHBORHOOD)
        new_y = cal_expression(new_x)

        if Metropolis(new_y - y, T):
            x = new_x
            y = new_y
    # 记录当前温度的结果
    result[x] = y
    # 降温
    T *= LAMBDA

result_x, result_y = sorted(result.items(), key=lambda x:x[1])[0]
print("求解得到的最小值点为(", result_x, ",", result_y, ")")

# 图像绘图代码
def show_line_chart(data_x, data_y):
    # 这两行代码解决 plt 中文显示的问题
    plt.rcParams['font.sans-serif'] = ['SimHei']
    plt.rcParams['axes.unicode_minus'] = False
    plt.figure(figsize=(15, 8))
    plt.plot(data_x,  # x轴数据
             data_y,  # y轴数据
             linestyle='-',  # 折线类型
             linewidth=2,  # 折线宽度
             color='steelblue',  # 折线颜色
             marker='o',  # 折线图中添加圆点
             markersize=6,  # 点的大小
             markeredgecolor='black',  # 点的边框色
             markerfacecolor='brown')  # 点的填充色
    plt.savefig("函数图像.png")
    plt.show()

# x = np.arange(-100, 100, 0.1)
# y = cal_expression(x)
# show_line_chart(x, y)

4 运行结果:

在这里插入图片描述

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

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

相关文章

chatgpt赋能Python-python3_8安装scrapy

Python3.8 安装 Scrapy 如果你是 Python 开发者&#xff0c;你可能已经听说过 Scrapy&#xff1a;一个开源框架&#xff0c;用于快速高效地抓取和提取网页数据。在本篇文章中&#xff0c;我们将介绍如何在 Python3.8 环境下安装 Scrapy&#xff0c;并解释该过程的每一个步骤。…

chatgpt赋能Python-python3_6怎么算

Python 3&6怎么算&#xff1f;—— Python版本的比较 Python是一款广泛使用的高级编程语言&#xff0c;已经有好几个版本了&#xff0c;其中比较常用的是Python 3和Python 2.7。近年来&#xff0c;Python 3越来越受欢迎&#xff0c;那么Python 3和6怎么算呢&#xff1f;本…

Doxygen源码分析: 根目录文件简要介绍

2023-05-18 22:54:02 ChrisZZ imzhuofoxmailcom Hompage https://github.com/zchrissirhcz 文章目录 1. doxygen 版本2. 文件介绍DockerfileLICENSE.dockerignore.codedocsVERSION.editorconfigLANGUAGE.HOWTOBUILD.txtINSTALL.gitignoreREADME.mdCMakeLists.txt 1. doxygen 版…

一图看懂 chardet 模块:字符编码检测器,兼容 Python2 和 Python3,资料整理+笔记(大全)

本文由 大侠(AhcaoZhu)原创&#xff0c;转载请声明。 链接: https://blog.csdn.net/Ahcao2008 一图看懂 chardet 模块&#xff1a;字符编码检测器&#xff0c;兼容 Python2 和 Python3&#xff0c;资料整理笔记&#xff08;大全&#xff09; &#x1f9ca;摘要&#x1f9ca;模块…

【1++的C++初阶】之内存管理

&#x1f44d;作者主页&#xff1a;进击的1 &#x1f929; 专栏链接&#xff1a;【1的C初阶】 文章目录 一&#xff0c;C/C的内存分布二&#xff0c;malloc&#xff0c;realloc&#xff0c;calloc的区别三&#xff0c;C的内存管理- -new和delete初识new和deletenew和delete操作…

宝塔面板webhook 使用教程

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 背景1、介绍一下Webhook2、使用步骤1.安装git2.安装WebHook3.添加WebHook4.配置git 钩子 &#xff08;码云示例&#xff09;5.私有项目还需要做以下操作 背景 最近…

C语言算法--桶排序

1-什么是桶排序法 什么是桶排序法&#xff1f;其实说白了就是把需要排列的元素分到不同的桶中&#xff0c;然后我们对这些桶里的元素进行排序的一种方式&#xff0c;然后我们在根据桶的顺序进行元素的合并。&#xff08;不过前提是要确定桶的数量以及大小&#xff09; 按照稍…

[数字图像处理]第四章 频率域滤波

文章目录 第四章 频率域滤波笔记&#xff1a;4.1 背景4.1.1 傅里叶级数和变换简史 4.2 基本概念4.2.1 复数4.2.2 傅里叶级数4.2.3 冲激及其取样特性4.2.5 卷积 4.3 取样和取样函数的傅里叶变换4.3.1 取样4.3.2 取样函数的傅里叶变换4.3.3 取样定理4.3.4 混淆4.3.5 有取样后的数…

微服务—Redis实用篇-黑马头条项目-附近商户功能(使用GEO实现)

微服务—Redis实用篇-黑马头条项目-附近商户功能(使用GEO实现) 1、附近商户 1.1、附近商户-GEO数据结构的基本用法 GEO就是Geolocation的简写形式&#xff0c;代表地理坐标。Redis在3.2版本中加入了对GEO的支持&#xff0c;允许存储地理坐标信息&#xff0c;帮助我们根据经纬…

【C++】设计模式

目录 设计模式概述 单例模式 饿汉模式 懒汉模式 工厂模式 简单工厂模式 工厂方法模式 抽象工厂模式 观察者模式 设计模式概述 设计模式&#xff1a;一套反复被人使用、多数人知晓的、经过分类编目的代码设计经验的总结。一种固定的写代码的思维逻辑方式&#xff0c;一…

chatgpt赋能Python-python3_8降级3_7

Python 3.8降级至3.7&#xff1a;为什么需要这么做&#xff1f; Python 3.8是Python编程语言的最新版本&#xff0c;拥有许多令人兴奋的新功能和改进。但是&#xff0c;在某些情况下&#xff0c;您可能需要降级Python版本&#xff0c;特别是当某些库或框架不兼容Python 3.8时。…

AI绘图实战(十一):将纸质儿童画修改为电子照片/3D Openpose插件使用 | Stable Diffusion成为设计师生产力工具

S&#xff1a;AI能取代设计师么&#xff1f; I &#xff1a;至少在设计行业&#xff0c;目前AI扮演的主要角色还是超级工具&#xff0c;要顶替&#xff1f;除非甲方对设计效果无所畏惧~~ 预先学习&#xff1a; 安装及其问题解决参考&#xff1a;《Windows安装Stable Diffusion …

在vscode调试c++代码报错

在vscode调试c代码报错 一、我在vscode调试c代码,报错:错误原因&#xff1a;解决办法: 二、上面的问题解决之后&#xff0c;报错问题变了错误原因&#xff1a;路径中的“随笔”是中文&#xff0c;路径中不能出现中文&#xff01;解决办法&#xff1a;将路径中的“随便”改成英文…

『python爬虫』25. 接入超级鹰处理验证码(保姆级图文)

目录 1. 验证码平台的使用1.1 下载demo程序1.2 注册后生成软件id1.3 查验证码类型1.4 demo文件中填写我们的用户参数测试效果 2. 分析超级鹰的登录3. 完整代码总结 欢迎关注 『python爬虫』 专栏&#xff0c;持续更新中 欢迎关注 『python爬虫』 专栏&#xff0c;持续更新中 1.…

Golang每日一练(leetDay0070) 移除链表元素、计数质数

目录 203. 移除链表元素 Remove Linked-list Elements &#x1f31f; 204. 计数质数 Count Primes &#x1f31f;&#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Rust每日一练 专栏 Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每…

chatgpt赋能Python-python3_8安装pyqt5

Python3.8安装PyQt5教程 介绍PyQt5 PyQt5是一个用于创建桌面应用程序的Python模块。它利用Qt框架的本地GUI应用程序开发工具包&#xff0c;为Python开发者提供了一种方便的方式来创建跨平台的应用程序。PyQt5支持在Windows&#xff0c;MacOS和Linux等主要桌面操作系统上构建G…

ChatGPT api 接口调用测试

参考文档&#xff1a; https://platform.openai.com/docs/quickstart/build-your-application示例说明&#xff1a; 本示例会生成一个简单的ChatGPT api接口调用server程序&#xff0c;该程序可以给用户输入的宠物类别为宠物取三个名字。打开网页后&#xff0c;会看到用户输入…

chatgpt赋能Python-python3_8_5怎么保存

Python 3.8.5&#xff1a;什么是它&#xff0c;为什么它重要&#xff0c;以及如何安装和保存&#xff1f; Python是当今世界上最受欢迎的编程语言之一。Python 3.8.5是该语言的最新版本&#xff0c;它引入了一些重要的改进和新特性。这篇文章将介绍Python 3.8.5并向您展示如何…

macOS Ventura 13.4 (22F66) Boot ISO 原版可引导镜像下载

本站下载的 macOS 软件包&#xff0c;既可以拖拽到 Applications&#xff08;应用程序&#xff09;下直接安装&#xff0c;也可以制作启动 U 盘安装&#xff0c;或者在虚拟机中启动安装。另外也支持在 Windows 和 Linux 中创建可引导介质。 macOS Ventura 13.4 包括以下增强功…

[创业之路-68]:科创板上市公司符合哪些条件

上交所发布《关于在上交所设立科创板并试点注册制相关情况答记者问》。上交所将认真落实习指示&#xff0c;在证监会的指导下&#xff0c;积极研究制订科创板和注册制试点方案&#xff0c;向市场征求意见并履行报批程序后实施。科创板是独立于现有主板市场的新设板块&#xff0…