学习基于Java的模拟退火算法

学习基于Java的模拟退火算法

前言

智能优化方法通常包括进化计算和群智能等两大类方法,是一种典型的元启发式随机优化方法,已经广泛应用于组合优化、机器学习、智能控制、模式识别、规划设计、网络安全等领域,是21世纪有关智能计算中的重要技术之一。
以上描述出自山东大学陈竹敏教授的课件第6章 智能计算及其应用
在之前的博客里,初步学习了群智能算法,详情见:学习基于Java的高斯分布逃逸的粒子群算法。本篇,就来了解下另一类方法:进化算法。说到进化算法,典型代表就是遗传算法与模拟退火算法,下面就让我们学习下模拟退火算法

模拟退火算法

简要介绍

模拟退火算法来源于固体退火原理,是一种基于概率的算法,将固体加温至充分高,再让其徐徐冷却,加温时,固体内部粒子随温升变为无序状,内能增大,而徐徐冷却时粒子渐趋有序,在每个温度都达到平衡态,最后在常温时达到基态,内能减为最小。
以上出自百度百科对于《模拟退火算法》的解释。
算法主要涉及以下原理

  • 固体退火原理
  • Metropolis接受准则

首先是固体退火原理,其主要由三个过程组成

  • 加温过程:增强粒子的热运动,消除系统原先可能存在的非均匀态;
  • 等温过程:对于与环境换热而温度不变的封闭系统,系统状态的自发变化总是朝自由能减少的方向进行,当自由能达到最小时,系统达到平衡态;
  • 冷却过程:使粒子热运动减弱并渐趋有序,系统能量逐渐下降,从而得到低能的晶体结构;

然后是Metropolis准则:1953 年,Metropolis 提出重要性采样,即以概率来接受新状态,而不是使用完全确定的规则,称为 Metropolis 准则,可以显著减小计算量。
假设前一状态为x,系统受到一定扰动,状态变成y,相对的,系统能源也从E(x)变成E(y),定义系统接收新状态的概率为p
p = { 1 E ( y ) < E ( x ) e E ( x ) − E ( y ) T E ( y ) > = E ( x ) p=\begin{cases} 1 & E(y)<E(x) \\ e^\frac{E(x)-E(y)}{T} & E(y)>=E(x) \end{cases} p={1eTE(x)E(y)E(y)<E(x)E(y)>=E(x)

算法描述

算法涉及的符号说明如下

符号说明
n问题维度
top解空间的上界
down解空间的下界
tMax最大迭代次数
ts最高温度
te最低温度
d温度下降系数
t当前温度
x当前解
y当前解值
newx新解
newy新解值
bestx历史最优解
besty历史最优解值
rand()0-1的随机数
step扰动步长
f(x)目标函数

初始化阶段
初始解可以用下述公式表示
x = r a n d ( ) ∗ ( t o p − d o w n ) + d o w n x=rand()*(top-down)+down x=rand()(topdown)+down
y = f ( x ) y=f(x) y=f(x)
最优解等于初始解
b e s t x = x bestx=x bestx=x
b e s t y = y besty=y besty=y
当前温度
t = t s t=ts t=ts

迭代阶段
根据温度差与最大迭代次数,开始双重迭代,外层迭代温度,进行冷却过程,内层迭代次数,进行等温过程。
冷却过程
t = t ∗ d t=t*d t=td
等温过程
每次迭代,系统扰动生成新解,这里扰动方式要结合具体问题与解空间规模,这里考虑到全局搜索,设定步长
s t e p = ( u p − d o w n ) / t M a x step=(up-down)/tMax step=(updown)/tMax
n e w x = x + r a n d ( ) ∗ s t e p newx=x+rand()*step newx=x+rand()step
校验边界值,防止跑出解空间
n e w x = { t o p n e w x > = t o p n e w x d o w n < n e w x < t o p d o w n n e w x < = d o w n newx=\begin{cases} top & newx>=top \\ newx & down<newx<top \\ down & newx<=down \end{cases} newx= topnewxdownnewx>=topdown<newx<topnewx<=down
根据Metropolis准则,计算接受概率,函数是求最大值,与准则的符号相反,同时,算法上有改进,借助历史最优解的数值,替换当前解的数值,算法效果更佳。
p = { 1 n e w y > = y e n e w y − b e s t y t n e w y < y p=\begin{cases} 1 & newy>=y\\ e^\frac{newy-besty}{t} & newy<y \end{cases} p={1etnewybestynewy>=ynewy<y

x = { n e w x p > r a n d ( ) x p < = r a n d ( ) x=\begin{cases} newx & p>rand() \\ x & p<=rand() \end{cases} x={newxxp>rand()p<=rand()
同步更新y值
接着更新的历史最优解
b e s t x = { x y > = b e s t y b e s t x y < b e s t y bestx=\begin{cases} x & y>=besty \\ bestx & y<besty \end{cases} bestx={xbestxy>=bestyy<besty
当达到最大迭代次数时,算法结束,输出最优解bestx以及对应的值besty

示例

对于一个50维的sphere函数
y = ∑ i = 1 n x i 2 y=\sum_{i=1}^nx_i^2 y=i=1nxi2
( − 100 < x i < 100 ) (-100<x_i<100) (100<xi<100)
n = 50 n=50 n=50
求其最小值,一眼便知道其最小值为0,解为(0,0,0,0,0,0,0)
我们假设:初始温度10000 ,最低温度1,温度下降系数0.9,最大迭代次数4000
多次执行模拟退火算法,算法运行图如下:
算法运行图

后记

本期的内容对应的代码库:evolutionarycomputation
从运行结果图,对于连续单峰高维函数,模拟退火效果优于粒子群算法。

  • 17
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值