文档章节

模拟退火示例

airxiechao
 airxiechao
发布于 2017/07/15 13:35
字数 304
阅读 6
收藏 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
博文 40
码字总数 8663
作品 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
【工具使用系列】关于 MATLAB 神经网络优化,你需要知道的事

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

AllenMoore
01/30
0
0
随机优化算法---爬山法VS模拟退火法

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

chenming_hnu
02/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

js 操作cookie

var cookie = {// 设置cookie方法 set:function(key,val,time){ var date = new Date(); //获取当前时间 var expiresDays = time; //将date设置为n天以后的时间...

小丶二
3分钟前
0
0
限制root远程登录 su和sudo命令

9月21日任务 3.7 su命令 3.8 sudo命令 3.9 限制root远程登录 对于Linux而言,权限的重要性毋庸置疑!对于普通用户而言无法执行那些只有root用户才能有效的命令,导致工作无法有效进行; 系统...

robertt15
5分钟前
0
0
MQTT协议的初浅认识之通讯级别和持久会话

背景 这是我最近了解MQTT协议的最后一部分内容了,MQTT协议里面的QOS和Keep Alive是两个比较重要的内容。QOS的设置,直接影响了订阅客户端与中间件之间的消息交互行为。而Keep Alive直接影响...

亚林瓜子
7分钟前
0
0
calc

width: calc(100% - 30px); 特别注意:减号左右空格,均不能去掉。 width: calc(100% - 30px);

柴高八斗之父
15分钟前
0
0
Spring Cloud Gateway全局过滤器GlobalFilter:返回消息和重定向

Spring Cloud Gateway的全局过滤器GlobalFilter,顾名思义,声明后会对所有的请求生效,可以用来做权限控制,这里简单记录一下拦截到非法请求后如何返回自定义信息和将请求重定向到指定URL。...

夜雨寄北09
17分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部