模拟退火简述

模拟退火

本文提到的某些概念仅是个人的理解,并不意味着严格或主流的定义

算法简述

模拟退火是经典的乱搞搜索之一,用来找出系统的较优甚至最优状态,其主要思想是给予系统一定的“初始温度”,逐渐“降温”,直到降至“合适温度”,在此过程中用随机化的方法使系统找到一个合适的状态

模拟退火源自于物理上的退火,举两个例子:

1、在炼钢时,需要将高温的钢材冷却至常温,也就是退火,但是退火不能过快,否则会导致钢材品质下降,而如果慢慢退火,则能得到优质钢材,这是因为,在越高的温度下,分子的运动越活泼,缓慢的退火能给予分子充足的时间与活力去寻找一个合适的位置,并逐渐趋于稳定,而快速的退火则得不到充足的机会去调整自身状态。

2、在生物领域,我们可以在高温下使DNA分子失活,氢键断裂出现两个DNA单链,这时候缓慢退火,DNA分子则会重新合并,而快速的退火,最终得到的仍然是两个DNA单链,道理跟上一个例子相同,缓慢的退火使得DNA分子有充足的时间去配对或解除配对,最终恢复原状。

在计算机领域,我们可以模拟上述过程,去解决一些问题(这类问题使用非随机的算法往往得不到多项式时间复杂度)。

具体实现

参照上诉两则例子与流行资料,我们可以总结出下列通用过程:

0、设置系统的初始状态(往往是随机混乱的,也可使用贪心去得到一个较优初始状态,但在个别情况下这是不必要甚至不可取的)

1、设定一个初始温度 T = Tm

2、调整状态一次,调整的幅度与关于T单调递减如果状态比原来更优则采取,并保存,否则以 exp(-Δans/T) 的概率采取

3、降温, T = T * delta,如果T > eps 则重复 1 - 2 过程,否则跳出

4、将得到的当前最优解作为初始状态,多次重复 1 - 3

5、得到理想的解

解释上述几个参数:

1、Tm,初始温度,常量,这个值越大,退火需要时间越长,但也会导致系统活性过大。

2、T,实时温度,变量,影响的当前系统的活性(调整幅度以及接受当前较差解的概率)。

2、eps,最终跳出的温度,常量,也就是说,当 T < eps,退火结束。

4、delta,与降温速度相关的参数,常量,主流采取了一个小于且接近 1 的数字,每次 T *= delta。 不过,是否可以使用的一个较大的数字,使得每次 T -= delta,本人目前还不清楚。

5、ans 与 Δans,变量,ans 是对当前系统的一个混乱程度的评分(即解越差 ans 越高),Δans 则是在接受较差解后评分变化量,显然 Δans >= 0,在 exp(-Δans/T) 中,Δans 越接近 0 ,或 T 越大,函数值越接近 1。

关于常量参数的设置

刚才我们解释了五个参数的作用,其中变量是跟着常量的设置与系统状态走的,我们不能直接管控,但是在三个常量的设置上则多少需要花点心思了。

很明显的是,Tm(x) 与优秀程度(y)所成的函数是趋于平缓的,其导数趋近于 0 。 在不太严谨的意义下,我们可以认为 Tm 存在一个最适值,如果 Tm 大于了他的最适值,那么在他降温到最适值之前,系统始终是非常混乱的,因为在大于 Tm 最适值的温度下,系统总是接受任何一个调整,无论好坏。所以我们认为,在达到最适值之前的努力意义甚微,而且浪费了一定时间。 影响 Tm 最适值的有系统的复杂度 以及 delta 的设置。

delta 一般设置为0.997 到 0.999, 事实上这要跟着 Tm 与系统复杂度走。

eps 的设置不太重要,通常为 1e-15 或者更小,他与 Tm 不太一样,毕竟,eps 如果设置的小一点,万一能在最后忽然找到最优解呢

几个题目

入门级:[JSOI2004]平衡点 / 吊打XXX

进阶一:Coloring

进阶二:[HAOI2006]均分数据

最终极:[NOI2010]成长快乐 这道题洛谷的SPJ估计有问题,但是暂时没在其他OJ上找到,读者自己把 checker 下载下来本地评过了就好了。

题解什么的之后再说吧。

原文地址:https://www.cnblogs.com/cjrsacred/p/9136446.html

时间: 2024-10-30 07:19:19

模拟退火简述的相关文章

Hibernate简述及入门实例

一.Hibernate简述 总的概括,Hibernate是一个ORM的轻量级持久层框架,解决了对象和关系数据库中表的不匹配问题(阻抗不匹配)以及拥有开发代码不用去继承hibernate类或接口的优势(无侵入性).hibernate框架实现使得开发人员可以避免反复地编写javajdbc部分代码,应用面向对象的思维操作关系型数据库. 二.使用myeclipse创建hibernate实例两种方法(以hibernate3.5.2及mysql为例) a)手动编写hibernate.cfg.xml及*.hb

Struts2基本使用(二)--配置文件简述

配置文件简述 引入Struts2框架之后项目中多了一个struts.xml,以及web.xml也多了一些代码 web.xml只要的功能就是拦截用户的请求其多出的代码如下: <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class&

poj-2420 A Star not a Tree?(模拟退火算法)

题目链接: A Star not a Tree? Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 5219   Accepted: 2491 Description Luke wants to upgrade his home computer network from 10mbs to 100mbs. His existing network uses 10base2 (coaxial) cables that allo

POJ 3087 Shuffle&#39;m Up(模拟退火)

Description A common pastime for poker players at a poker table is to shuffle stacks of chips. Shuffling chips is performed by starting with two stacks of poker chips, S1 and S2, each stack containing C chips. Each stack may contain chips of several

简述23种软件设计模式

简述23种软件设计模式 一.设计模式分类 总体来说设计模式分为三大类: 五种创建型模式:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 七种结构型模式:适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组合模式.享元模式. 十一种行为型模式:策略模式.模板方法模式.观察者模式.迭代子模式.责任链模式.命令模式.备忘录模式.状态模式.访问者模式.中介者模式.解释器模式. 二.设计模式概述 创建型模式 1.工厂方法模式 工厂方法模式的创建是因为简单工厂模式有一个问题,在简单工厂模式

PKU 1379 Run Away(模拟退火算法)

题目大意:原题链接 给出指定的区域,以及平面内的点集,求出一个该区域内一个点的坐标到点集中所有点的最小距离最大. 解题思路:一开始想到用随机化算法解决,但是不知道如何实现.最后看了题解才知道原来是要用模拟退火算法解决. 不过个人感觉这个算法的实现过程中仍然采用了随机化算法.二者均属于概率算法.  参考链接 Point Goto_Rand_Dir(double key,Point temp)函数中,Point temp必须得定义在参数中,不能定义在函数内部, 否则temp没有初始值,无法进行后面的

[POJ2069]Super Star(模拟退火)

题目链接:http://poj.org/problem?id=2069 题意:求一个半径最小的球,使得它可以包围住所有点. 模拟退火,圆心每次都去找最远那个点,这样两点之间的距离就是半径,那么接下来移动的方向肯定就是朝着这个最远点移动,保证比例相同且在球内的情况下移动. 不看题解想不到,这个东西有点难啊... 1 #include <algorithm> 2 #include <iostream> 3 #include <iomanip> 4 #include <

Spark 学习: spark 原理简述与 shuffle 过程介绍

Spark学习: 简述总结 Spark 是使用 scala 实现的基于内存计算的大数据开源集群计算环境.提供了 java,scala, python,R 等语言的调用接口. Spark学习 简述总结 引言 1 Hadoop 和 Spark 的关系 Spark 系统架构 1 spark 运行原理 RDD 初识 shuffle 和 stage 性能优化 1 缓存机制和 cache 的意义 2 shuffle 的优化 3 资源参数调优 4 小结 本地搭建 Spark 开发环境 1 Spark-Scal

两种改进的模拟退火算法求解大值域约束满足问题1.0

0引言 约束满足问题(Constraint Satisfaction Problem,CSP)是人工智能研究领域中一个非常重要的分支,现已成为理论计算机科学.数学和统计物理学等交叉学科研究中的热点问题.人工智能.计算机科学和自动控制等领域中的许多问题都可以归结为约束满足问题.同时,约束满足问题在实际问题如模式识别.决策支持.物流调度及资源分配等领域也有着非常广泛的应用. CSP由一个变量集合和一个约束集合组成.每个变量都有一个非空的可能值域,每个约束描述了一个变量子集与子集内各变量的相容赋值,所