文档章节

模拟退火示例

airxiechao
 airxiechao
发布于 2017/07/15 13:35
字数 304
阅读 6
收藏 0
点赞 0
评论 0

模拟退火是种寻找全局最优解的过程,在逐步寻找更优的时候按某种概率接受变差一点的情况,而且开始的时候探索的步子比较大,容忍变差的概率也大,最后步子变小,容忍变差的概率也变小。

import random
import math
import matplotlib.pyplot as plt
import matplotlib.animation as animation

LIMIT = 100000

def func(x):
    return -math.sin((4 * math.pi / LIMIT) * x) * math.sin((3 * math.pi / LIMIT) * x + math.pi / 1.5)

def initialize(L):
    return map(func, range(0, L))

def update_temperature(T, k):
    return T - 0.001

def make_move(x, A, T):
    nhb = random.choice(range(0, len(A))) # choose from all points

    delta = A[nhb] - A[x]

    if delta < 0:
        return nhb
    else:
        p = math.exp(-delta / T)
        return nhb if random.random() < p else x

def simulated_annealing(A):
    L = len(A)
    x0 = random.choice(range(0, L))
    T = 1.
    k = 1

    x = x0
    x_best = x0

    while T > 1e-3:
        yield x, T, x_best, x0
        
        x = make_move(x, A, T)
        if(A[x] < A[x_best]):
            x_best = x
        T = update_temperature(T, k)
        k += 1

    print("iterations:", k)
    while True:
        yield x, T, x_best, x0

#动画模拟
A = list(initialize(LIMIT))
sa = simulated_annealing(A)
x, T, x_best, x0 = next(sa)

def update_animation(frame_number):
    x, T, x_best, x0 = next(sa)
    line.set_data([x,x], [0,A[x]])
    text.set_text('T:'+str(round(T,3)))
    
fig = plt.figure(figsize=(7,7))
plt.plot(A)
plt.plot([0,LIMIT], [0,0], c='r')
line, = plt.plot([x0, x0], [0, A[x0]], c='r', marker='+')
text = plt.text(LIMIT*.8,max(A)*0.9,'T:'+str(round(T,3)))

animation = animation.FuncAnimation(fig, update_animation, interval=1)
plt.show()

© 著作权归作者所有

共有 人打赏支持
airxiechao
粉丝 1
博文 39
码字总数 8042
作品 1
成都
程序员
Python 实现 模拟退火算法

参考 https://blog.csdn.net/AIBigDatawh/article/details/77943787?locationNum=2&fps=1 https://blog.csdn.net/garfielder007/article/details/51038577 https://www.cnblogs.com/lytwajue......

阿豪boy
05/31
0
0
模拟退火算法

一. 爬山算法 ( Hill Climbing ) 作为对比,先介绍爬山算法。爬山算法是一种简单的贪心搜索算法,该算法每次从当前解的临近解空间中选择一个最优解作为当前解,直到达到一个局部最优解。 爬山...

技术mix呢
2017/11/09
0
0
模拟退火算法(SA)求解TSP 问题(C语言实现)

    这篇文章是之前写的智能算法(遗传算法(GA)、粒子群算法(PSO))的补充。其实代码我老早之前就写完了,今天恰好重新翻到了,就拿出来给大家分享一下,也当是回顾与总结了。    ...

lyrichu
2017/04/10
0
0
随机优化算法---爬山法VS模拟退火法

随机优化算法–爬山法VS模拟退火算法 随机优化算法,由于开始和过程都是随机的数值,所以每次产生的结果都不一样。但大致收敛方向是一致的。 爬山法是一种局部最优的算法(本质上属于贪心法)...

chenming_hnu
02/09
0
0
【工具使用系列】关于 MATLAB 神经网络优化,你需要知道的事

如何进行 MATLAB 神经网络优化 应用实例 支持向量机实例 遗传算法优化实例 什么是 MATLAB 神经网络优化 神经网络优化概述 神经网络优化分类 支持向量机 统计学习理论 支持向量机(SVM)理论 ...

AllenMoore
01/30
0
0
poj2420 A Star not a Tree?【模拟退火】

题目大意: 给定n个点,求一点到所有点距离的最小值。 解题思路: 模拟退火真是神, 一般的爬山算法就是先设置一个起始点较大的步长step(初始温度),每次随机向一个方向走step,若该点更优,...

cdsszjj
2017/12/25
0
0
D-Wave的量子计算机,到底能不能进行量子计算?

最近Google宣布在量子计算领域取得了突破性进展,他们用D-Wave量子计算机在解决某些问题上比传统计算机过程快了1亿倍。果真这样,它将带来人工智能技术的巨大进步。但也有专家对此表示质疑,...

雪花又一年
05/04
0
0
【数学建模】模拟退火算法丨BZOJ3680

最近在准备数学建模,就在学各种优化算法啊~看到书上模拟退火,看上去很高大上,看完之后发现这就是个玄学算法啊! 模拟退火 总的来说只需要知道它是一种启发式搜索算法,并且能以很大概率获...

m0_38076468
01/24
0
0
人生与算法

(说明:这是原来发表在科学博客上的博文,不知道能否适应这里的环境。问过了编辑,博文是个人日志,在一个地方发了,换一个地方还可以再发,不存在一高两投的问题) 读了今天发表的迟菲博文 ...

tangchangjie
2013/06/20
0
0
机器学习实战精读--------logistic回归

Logistic回归的主要目的:寻找一个非线性函数sigmod最佳的拟合参数 拟合、插值和逼近是数值分析的三大工具 回归:对一直公式的位置参数进行估计 拟合:把平面上的一些系列点,用一条光滑曲线...

付炜超
2017/08/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Python解析配置文件模块:ConfigPhaser

import configparser as pa# [SectionA]# a = aa# b = bb# c = cc# [SectionB]# optionint = 1# optionfloat = 1.1# optionstring = string#https://www.cnblogs.com/a......

易野
4分钟前
0
0
Java基础——面向对象

声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权;凯哥学堂旨在促进VIP学员互相学习的基础上公开笔记。 Object的方法: clone() Object 克隆 to Strin...

凯哥学堂
6分钟前
0
0
rabbitmq学习记录(八)消息发布确认机制

RabbitMQ服务器崩了导致的消息数据丢失,已经持久化的消息数据我们可以通过消息持久化来预防。但是,如果消息从生产者发送到vhosts过程中出现了问题,持久化消息数据的方案就无效了。 Rabbit...

人觉非常君
10分钟前
0
0
毕业5年,我是怎么成为年薪30W的运维工程师

#转载# 我在大学读的是计算机专业,但大学毕业之后,进入到一家私企进行工作,工作的内容类似于网管,会经常的去修电脑,去做水晶头等内容。刚开始工作,也没想太多,最想的是丰富自己的工作...

Py爱好
17分钟前
0
0
大数据基础知识,大数据学习,涉及的知识点

一、什么是大数据 一种规模大到在获取、存储、管理、分析方面大大超出了传统数据库软件工具能力范围的数据集合,具有海量的数据规模、快速的数据流 转、多样的数据类型和价值密度低四大特征。...

董黎明
33分钟前
0
0
Linux CentOS 7上安装极点五笔

话说几天前在新买的惠普笔记本上成功地安装了Linux CentOS 7操作系统、Nvidia Quandro P600驱动程序及X Window,并在VMware下安装Red Hat教学环境,彻底跳出Windows的苦海,但仍然有一件事不...

大别阿郎
45分钟前
10
0
2018年7月20日集群课程

一、集群介绍 集群,简单地说是指一组(若干个)相互独立的计算机,利用高速通信网络组成一个较大的计算机服务系统,每个集群节点(即集群中的每台计算机)都是运行各自服务的独立服务器。 ...

人在艹木中
48分钟前
0
0
spark开发机中调试snappy

目的 在Idea中的点击运行,使spark可以直接读取snappy 自己编译hadoop,以支持snappy的压缩。 自己编译的目的就是要得到支持snappy文件读写的动态链接库。如果可以在网上下载,可以跳过自行编...

benny周
今天
0
0
centos7 安装docker

1,查看系统版本 cat /etc/redhat-release 2,安装gcc yum -y install gccyum -y install gcc-c++ 3,卸载旧版本 yum remove docker \ docker-client \ ......

暗中观察
今天
0
0
[译]为什么(要使用)GNU Affero GPL?

#为什么(要使用)GNU Affero GPL? 作者信息:Copyright © 2010, 2013, 2014, 2015 Free Software Foundation, Inc. This page is licensed under a Creative Commons Attribution-NoDeriv......

ICE冰焰火灵X
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部