优化方法-模拟退火法
2015-11-23 15:31
176 查看
模拟退火法是针对爬山法只能求出局部最优解提出来的。模拟退火法其实也是一种贪心法,但是他搜寻最优解的过程中引入了随机因素,允许在中间的计算过程中按照一定的概率来接受相对较差的中间结果,因此它有可能调出局部最优解寻找到全局的最优解。
模拟退火法算法描述:
若J(Y(I+1)) >= J(Y(I)) (即移动后得到更优解)则总是接受该移动
若J(Y(I+1)) < J(Y(I)) (即移动后得到的解比当前解要差) 则以一定的概率接受该移动,并且这个概率随着时间的推移逐渐降低
上行中一定的概率参考了冶金中的退火过程,其计算公式如下:
p= exp(-(highcost-lowcost)/temperture) 因为温度(接收较差的解的意愿)开始非常高,指数总是接近于0,所以概率接近于1,随着温度的降低,高成本和低成本之间的差异越来越大,概率越低。因此该算法只倾向于稍微差的解而不会是非常差的解。
关键代码实现:
为了退火,函数需要创建一个合适长度的随机数,在每个属性的上下限阈值范围内。维度T和冷却率cool是两个可选的参数,函数每次迭代的时候将i设定为一个随机索引,并将dir设为介于-step和step之间的某个随机数。该函数会持续计算直到设定的温度退出条件。
模拟退火法算法描述:
若J(Y(I+1)) >= J(Y(I)) (即移动后得到更优解)则总是接受该移动
若J(Y(I+1)) < J(Y(I)) (即移动后得到的解比当前解要差) 则以一定的概率接受该移动,并且这个概率随着时间的推移逐渐降低
上行中一定的概率参考了冶金中的退火过程,其计算公式如下:
p= exp(-(highcost-lowcost)/temperture) 因为温度(接收较差的解的意愿)开始非常高,指数总是接近于0,所以概率接近于1,随着温度的降低,高成本和低成本之间的差异越来越大,概率越低。因此该算法只倾向于稍微差的解而不会是非常差的解。
关键代码实现:
def annealingoptimize(domain,costf,T=10000.0,cool=0.95,step=1): #随机初始化值 vec= [float(random.randint(domain[i][0],domain[i][1])) for i in range(len(domain))] while T>0.1: #选择一个索引值 i = random.randint(0,len(domain)-1) #选择一个改变索引的方向 dir = random.randint(-step,step) #创建一个代表题解的新列表,改变其中的一个值 vecb = vec[:] vecb[i] += dir if vecb[i] < domain[i][0]: vecb[i] = domain[i][0] elif vecb[i] > domain[i][1]: vech[i] = domain[i][1] #计算当前新成本和当前 ea = costf(vec) eb = costf(vecb) #是更好的解或者按照概率被接收 if (eb<ea or random.random()<pow(math.e,-(eb-ea)/T)) vec = vecb #降低温度 T = T*cool return vec
为了退火,函数需要创建一个合适长度的随机数,在每个属性的上下限阈值范围内。维度T和冷却率cool是两个可选的参数,函数每次迭代的时候将i设定为一个随机索引,并将dir设为介于-step和step之间的某个随机数。该函数会持续计算直到设定的温度退出条件。
相关文章推荐
- Js 正则表达式特殊字符含义
- GeoPandas官方中文文档--译著
- Jsp+Servlet+JavaBean经典MVC模式理解
- [IOS开发教程] IOS中用NSJSONSerialization来实现对JSON格式的解析
- 欢迎使用CSDN-markdown编辑器
- jquery自定义表格样式
- 形成20位存储单元的物理地址
- Java 回调的概念
- Linux目录结构和常用命令
- nginx配置
- Ubuntu 下安装 apt-get install npm 失败的解决方案
- Android中Bitmap和Drawable详解
- PHP POST CURL上传图片
- 使用Loadrunner 调用Webservice接口测试优化总结
- linux命令---cp 命令
- 生成汉子拼音首字母全部的
- android的HttpURLConnection实现post和get
- 学习站点记录
- ANY数据类型的使用
- php+apache配置