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

这篇具有很好参考价值的文章主要介绍了【智能算法1】模拟退火算法_Python实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、模拟退火算法(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】模拟退火算法_Python实现

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

1 示例求解的函数:

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

2 函数图像:

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

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 运行结果:

【智能算法1】模拟退火算法_Python实现文章来源地址https://www.toymoban.com/news/detail-450094.html

到了这里,关于【智能算法1】模拟退火算法_Python实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【人工智能】—局部搜索算法、爬山法、模拟退火、局部剪枝、遗传算法

    在某些规模太大的问题状态空间内,A*往往不够用 问题空间太大了 无法访问 f 小于最优的所有状态 通常,甚至无法储存整个边缘队列 解决方案 设计选择更好的启发式函数 Greedy hill-climbing (fringe size = 1) Beam search (limited fringe size) 瓶颈:内存不足,无法存储整个边缘队列 爬山搜

    2023年04月22日
    浏览(52)
  • 【遗传模拟退火算法的Java实现及其应用】

    遗传模拟退火算法是一种基于遗传算法和模拟退火算法的启发式优化算法。它的基本思路是在解决优化问题时模拟生物进化的过程,利用遗传算法的遗传操作和模拟退火算法的搜索策略。 初始化种群 :初始化种群包含解和目标函数值。 适应度评估 :使用目标函数对种群中的

    2024年02月08日
    浏览(70)
  • Matlab实现模拟退火算法(附上完整仿真源码)

    模拟退火算法(Simulated Annealing,SA)是一种全局优化算法,其基本思想是通过一定的概率接受劣解,以避免陷入局部最优解。它模拟了物质固体退火时的过程,即将物质加热至高温状态,然后缓慢冷却,使其达到稳定状态。在优化问题中,这个过程被用来搜索全局最优解。

    2024年02月15日
    浏览(40)
  • Matlab实现模拟退火算法(附上10个完整仿真源码)

    模拟退火算法(Simulated Annealing,SA)是一种全局优化算法,其基本思想是通过一定的概率接受劣解,以避免陷入局部最优解。它模拟了物质固体退火时的过程,即将物质加热至高温状态,然后缓慢冷却,使其达到稳定状态。在优化问题中,这个过程被用来搜索全局最优解。

    2024年02月10日
    浏览(42)
  • 带约束条件的运筹规划问题求解(模拟退火算法实现)

    超级简单的模拟退火算法实现ε٩(๑ ₃ )۶з搭配最简单的线性规划模型进行讲解!但是如果需要的话,可以直接修改程序求解非线性问题哦(´つヮ⊂︎) [max,f(x)=10x_1+9x_2] (s.t.) [6x_1+5x_2leq{60}tag{1}] [10x_1+20x_2leq{150}tag{2}] [0leq{x_1}leq{8}tag{3}] [0leq{x_2}leq{8}tag{4}] 对约束

    2023年04月18日
    浏览(46)
  • 模拟退火算法与遗传算法求解多目标优化问题的算法实现(数学建模)

    模拟退火算法是一种全局优化算法,解决的问题通常是找到一个最小化(或最大化)某个函数的全局最优解。它通过模拟物理退火的过程来搜索解空间,在开始时以一定的温度随机生成初始解,然后一步步降低温度,同时在当前解的周围随机搜索新的解,并根据一定概率接受

    2024年02月02日
    浏览(57)
  • 超详细 | 模拟退火-粒子群自适应优化算法及其实现(Matlab)

    作者在前面的文章中介绍了经典的优化算法——粒子群算法(PSO),各种智能优化算法解决问题的方式和角度各不相同,都有各自的适用域和局限性,对智能优化算法自身做的改进在算法性能方面得到了一定程度的提升,但算法缺点的解决并不彻底。 为了克服使用单一智能优化

    2024年02月05日
    浏览(74)
  • 回归预测 | MATLAB实现SA-SVM模拟退火算法优化支持向量机多输入单输出回归预测(多指标,多图)

    效果一览 基本介绍 回归预测 | MATLAB实现SA-SVM模拟退火算法优化支持向量机多输入单输出回归预测(多指标,多图),输入多个特征,输出单个变量,多输入单输出回归预测; 多指标评价,代码质量极高;excel数据,方便替换,运行环境2018及以上。 程序设计 完整源码和数据

    2024年02月12日
    浏览(39)
  • 回归预测 | MATLAB实现SA-ELM模拟退火算法优化极限学习机多输入单输出回归预测(多指标,多图)

    效果一览 基本介绍 回归预测 | MATLAB实现SA-ELM模拟退火算法优化极限学习机多输入单输出回归预测(多指标,多图),输入多个特征,输出单个变量,多输入单输出回归预测; 多指标评价,代码质量极高;excel数据,方便替换,运行环境2018及以上。 程序设计 完整源码和数据

    2024年02月11日
    浏览(62)
  • 【算法】模拟退火

    1.模拟退火介绍 ​ 模拟退火是模拟物理上退火方法,通过N次迭代(退火),逼近函数的上的一个 最值 (最大或者最小值)。比如在下面函数去逼近最大值C点 1.1模拟退火的可行性 ​ 模拟退火算法得益于材料统计力学的研究成果。 ​ 鉴于固体的退火原理,当固体的 温度很

    2024年02月12日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包