C#数值计算之模拟退火法简介(一)

原创 2004年04月20日 12:05:00

摘要<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

本文简介了模拟退火的基本思想,以于模拟时的主要参数的选择根据,然后给出一个求二维函数极值的具体问题和解法,并给出C#源代码。

 

 

l         概述

在管理科学、计算机科学、分子物理学和生物学以及超大规模集成电路设计、代码设计、图像处理和电子工程等科技领域中,存在大量组合优化瓿。其中许多问题如货郎担问题、图着色问题、设备布局问题以及布线问题等,至今没有找到有效的多项式时间算法。这些问题已被证明是NP完全问题。

1982,KirkPatrick将退火思想引入组合优化领域,提出一种解大规模组合优化问题的算法,对NP完全组合优化问题尤其有效。这源于固体的退火过程,即先将温度加到很高,再缓慢降温(即退火),使达到能量最低点。如果急速降温(即为淬火)则不能达到最低点.

在[1]中的解释为:Simulation Annealing is a technique which can be applied to any minimisation or learning process based on successive update steps (either random or deterministic) where the update step length is proportional to an arbitrarily set parameter which can play the role of a temperature. Then, in analogy with the annealing of metals, the temperature is made high in the early stages of the process for faster minimisation or learning, then is reduced for greater stability.

即:模拟退火算法是一种能应用到求最小值问题或基本先前的更新的学习过程(随机或决定性的)。在此过程中,每一步更新过程的长度都与相应的参数成正比,这些参数扮演着温度的角色。然后,与金属退火原理相类似,在开始阶段为了更快地最小化或学习,温度被升得很高,然后才(慢慢)降温以求稳定。

 

l         模拟退火算法的主要思想

就函数最小值问题来说,模拟退火的主要思想是:在搜索区间(二维平面中)随机游走(即随机选择点),再以Metropolis抽样准则,使随机游走逐渐收敛于局部最优解。而温度即是Metropolis算法中的一个重要控制参数,可以认为这个参数的大小控制了随时过程向局部或全局最优解移动的快慢。

冷却参数表、领域结构和新解产生器、接受准则和随机数产生器(即Metropolis算法)一起构成算法的三大支柱。

 

l         重点抽样与Metroplis算法:

Metropolis是一种有效的重点抽样法,其算法为:系统从能量一个状态变化到另一个状态时,相应的能量从E1变化到E2,概率为p = exp[ - (E2- E1)/kT ]。如果E2 < E1,系统接收此状态,否则,以一个随机的概率接收此或丢弃此状态。这种经常一定次数的迭代,系统会逐渐趋于一引稳定的分布状态。

重点抽样时,新状态下如果向下则接受(局部最优),若向上(全局搜索),以一定机率接受。模拟退火方法从某个初始解出发,经过大量解的变换后,可以求得给定控制参数值时组合优化问题的相对最优解。然后减小控制参数T的值,重复执行Metropolis算法,就可以在控制参数T趋于零时,最终求得组合优化问题的整体最优解。控制参数的值必须缓慢衰减。

其中温度是一个Metropolis的重要控制参数,模拟退火可视为递减控制参数什时Metroplis算法的迭代。开始T值大,可能接受较差的恶化解,随着T的减小,只能接受较好的恶化解,最后在T趋于0时,就不再接受任何恶化解了。

在无限高温时,系统立即均匀分布,接受所有提出的变换。T的衰减越小,T到达终点的时间越长;但可使马可夫链越小,到达准平衡分布的时间越短,

 

l         参数的选择:

我们称调整模拟退火法的一系列重要参数为冷却进度表。它控制参数T的初值及其衰减函数,对应的MARKOV链长度和停止条件,非常重要。

一个冷却进度表应当规定下述参数:

1.   控制参数t的初值t0;

2.   控制参数t的衰减函数;

3.   马尔可夫链的长度Lk。(即每一次随机游走过程,要迭代多少次,才能趋于一个准平衡分布,即一个局部收敛解位置)

4.   结束条件的选择

 

有效的冷却进度表判据:

一.算法的收敛:主要取决于衰减函数和马可夫链的长度及停止准则的选择

二.算法的实验性能:最终解的质量和CPU的时间

 

参数的选择:

一)控制参数初值T0的选取

一般要求初始值t0的值要充分大,即一开始即处于高温状态,且Metropolis的接收率约为1

 

二)衰减函数的选取 

衰减函数用于控制温度的退火速度,一个常用的函数为:T(n + 1) = K*T(n),其中K是一个非常接近于1的常数。

 

 

三)马可夫链长度L的选取

原则是:在衰减参数T的衰减函数已选定的前提下,L应选得在控制参数的每一取值上都能恢复准平衡。

 

四)终止条件

         有很多种终止条件的选择,各种不同的条件对算法的性能和解的质量有很大影响,本文只介绍一个常用的终止条件。即上一个最优解与最新的一个最优解的之差小于某个容差,即可停止此次马尔可夫链的迭代。

 

 

l         例题:

以上说明可能太过于抽象,下一节将以一个实际的例子来说明,其中所有的源码已贴出,可以从中了解到很多细节。

 

l         参考文献:

1.   http://www.computer-dictionary-online.org/index.asp?q=simulated+annealing 计算机词典

2.   Numeric Recipes in C

3.   计算方法丛书  非数值并行算法  (第一册)  模拟退火算法

模拟退火算法C#源码+实例

  • 2011年03月24日 11:25
  • 146KB
  • 下载

模拟退火算法

模拟退火算法来源于固体退火原理,将固体加温至充分高,再让其徐徐冷却,加温时,固体内部粒子随温升变为无序状,内能增大,而徐徐冷却时粒子渐趋有序,在每个温度都达到平衡态,最后在常温时达到基态,内能减为最小...
  • u011331383
  • u011331383
  • 2015年03月26日 16:41
  • 1788

模拟退火算法--求解货郎担问题(C#实现)

   具体原理已在前面已经介绍过了。下面是实现过程           退火过程由冷却进度表(Cooling Schedule)控制,包括控制参数的初值t及其衰减因子Δt、每个t值时的迭代次数L和停止...
  • derny
  • derny
  • 2004年11月30日 12:32
  • 6103

模拟退火算法

  • 2013年06月01日 15:58
  • 8KB
  • 下载

模拟退火算法

一. 爬山算法 ( Hill Climbing ) 介绍模拟退火前,先介绍爬山算法。爬山算法是一种简单的贪心搜索算法,该算法每次从当前解的临近解空间中选择一个最优解作为当前解,直到达到一个局部...
  • superxtong
  • superxtong
  • 2016年07月24日 21:50
  • 753

模拟退火算法

模拟退火算法模拟退火简单解释: 为了找出地球上最高的山,一群兔子们开始想办法用酒把自己灌醉,它们随机地跳了很长时间。在这期间,它们可能走向高处,也可能踏入平地。但是,随着时间的流逝,它们渐渐清醒...
  • chongshangyunxiao321
  • chongshangyunxiao321
  • 2016年03月28日 13:36
  • 1536

理解模拟退火算法

目录 目录 退火原理 爬山算法 模拟退火 模拟退火伪代码 使用模拟退火算法解决旅行商问题 算法评价 参考文献 退火原理模拟退火算法来源于固体退火原理,将固体加温至充分高,再让其徐徐冷却。加温时,固体内...
  • Ango_
  • Ango_
  • 2017年07月13日 11:25
  • 1019

C#数值计算之模拟退火法简介(二)

在上一篇文章中讲述了模拟退火的基本原理,以下以一个实际的例子来说明,其中所有的源码已贴出,可以从中了解到很多细节。使用模拟退火法求函数f(x,y) = 5sin(xy) + x2 + y2的最小值 解...
  • armylau
  • armylau
  • 2004年04月19日 00:01
  • 2973

C#模拟退火算法

  • 2008年04月30日 21:55
  • 33KB
  • 下载

Simulate Anneal Arithmetic (SAA,模拟退火算法)

模拟退火算法   模拟退火算法来源于固体退火原理,将固体加温至充分高,再让其徐徐冷却,加温时,固体内部粒子随温升变为无序状,内能增大,而徐徐冷却时粒子渐趋有序,在每个温度都达到平衡态,最后在常温时达到...
  • derny
  • derny
  • 2004年10月29日 00:09
  • 7392
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C#数值计算之模拟退火法简介(一)
举报原因:
原因补充:

(最多只允许输入30个字)