文档章节

模拟退火示例

airxiechao
 airxiechao
发布于 2017/07/15 13:35
字数 304
阅读 7
收藏 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
粉丝 2
博文 41
码字总数 9266
作品 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

没有更多内容

加载失败,请刷新页面

加载更多

windows下让 jar 在后台运行的办法

windows下 运行 java jar 不出现 命令行 窗口 新建一个披处理 run.bat,内容如下 @echo off start javaw -jar xx.jar exit 双击运行即可。...

glen_xu
15分钟前
1
0
jdk1.8 lambda stream 指定的对象属性进行去重

原因:因为Stream提供的distinct()方法只能去除重复的对象,无法根据指定的对象属性进行去重,可以应付简单场景。 解决方案: //去重,共同信息保存到bizPledgeSupplierVOs里bizPledgeSupp...

INSISTQIAO
18分钟前
0
0
vue nextTick深入理解---vue性能优化、DOM更新时机、事件循环机制

定义[nextTick、事件循环] nextTick的由来: 由于vue的数据驱动视图更新是异步的,即修改数据的当下,视图不会立即更新,而是等同一事件循环中的所有数据变化完成之后再统一进行视图更新。...

JamesView
26分钟前
1
0
常用汉字编码

GB2312 仅包含大部分的常用简体汉字,但已经不能适应现在的需要; GB13000 由于GB2312的局限性,国家标准化委员会制定了GB13000编码; 但由于当时的硬件和软件都已经支持了GB2312,而GB13000...

晨猫
28分钟前
1
0
纳尼?我的Gradle build编译只要1s

https://juejin.im/post/5c00ec39e51d4555ec0394f6

SuShine
29分钟前
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部