网站大量收购独家精品文档,联系QQ:2885784924

无约束条件的模拟退火算法-Read.DOC

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
无约束条件的模拟退火算法-Read

无约束条件的模拟退火算法 一.实验目的: 1.使用模拟退火算法解决连续函数优化问题。 2.使用C或C++语言编程环境实现模拟退火算法,并运行函数4得出函数的极值和极值点位置。 二.模拟退火算法介绍: 模拟退火算法是1982年,KirkPatrick将退火思想引入组合优化领域,提出的一种解大规模组合优化问题的算法,对NP完全组合优化问题尤其有效。它以优化问题的求解与物理系统的退火过程的相似性为基础,利用Metropolis算法并适当控制温度的下降过程式项模拟退火,从而达到求解全局优化问题的目的。模拟退火算法在有哪些信誉好的足球投注网站策略上与传统的随机有哪些信誉好的足球投注网站方法不同,它不仅引入了适当的随机因素,而且还引入了物理系统退火过程的自然机理。 这种自然机理的引入使模拟退火算法在迭代过程中不仅接受使目标函数值变好的试探点,而且还能够以一定的概率接受使目标函数值变差的试探点,接受概率随着温度的下降逐渐减少。模拟退火算法的这种有哪些信誉好的足球投注网站策略有利于避免有哪些信誉好的足球投注网站过程因陷入局部最优解而无法自拔的弊病,有利于提高求得全局最优解的可靠性。 三.无约束条件的模拟退火算法: 给定初始解和初始温度,给定产生随机向量的概率密 度函数和控制温度下降过程的温度更新函数,给定常数。计算,置 根据给定的概率密度函数产生一个随机向量,利用当前迭代点和随机向量产生一个新的试探点,即 计算 产生一个在(0,1)上均匀分布的随机数,计算在给定当前迭代点和温度下接受试探点的概率,即: 如果,则置,; 否则置。 如果,则置。 如果满足迭代终止条件,则算法结束,就作为近似的全局最优解,为相应的最优值;否则继续步骤6。 根据给定的温度更新函数产生一个新的温度,置,转步骤2。 四.核心问题: 冷却参数表、领域结构和新解产生器、接受准则和随机数产生器(即Metropolis算法)为退火算法过程的三大支柱。 冷却参数即的选取,新解产生器即由司机函数产生下一个解的一个变换,接受准则即为概率接受准则和随机数产生器(Metropolis算法),这里我们选取; 新解产生器为: x_next = x + -x * (rand() % 10000) / 10100.00 y_next = y + -y * (rand() % 10000) / 10100.00 z_next = z + -z * (rand() % 10000) / 10100.00 随机数产生器: r_rand = 0.01 * (rand() + 500) / 33000.00; 接受准则为: 时,接受下一个解,否则,继续寻找。 五.程序流程图: 六.实验结果: 实验初值:X(20,30,-25) 最终结果: f_max = 50, 这时 X_max(2.44036e-009,1.09176e-006,-3.95199e-010) 七.实验心得: 通过本次实验,了解了无约束模拟退火算法的思想,算法原理,结果流程,并实现了用所写的程序求解全局最优解,求得了实验函数的最大值。在编写程序的过程中,由于起初对算法有一定的误解,没能理解其实质,后来查资料,明白了其原理,经过认真地考虑,实现了算法。但是,由于原本的模拟退火算法有两层循环,在这里,我们简化了只有一层循环。在实验中,对参数的设置有较高的要求,需要经过多次的尝试,才能调到比较合适的结果。 附录:(源程序) #include iostream #include cmath #include ctime #include cstdlib using namespace std; const double b = 0.9; double u = 0; double Ifunc(double x, double y, double z) { double hsz = 0.0; hsz = 50 - pow(5 * x - 2 * y , 2) - pow(x - 7 * y * y + 2 * z * z , 4); return hsz; } double glfunc(double w1, double w2, double T) { double p; double u = 0; double w3 = - 1.00 * abs(w1 - w2); u = exp(w3 / (b * T)); if (u 1) p = u; else p = 1; return p; } void main() { double x = 0 , y = 0 , z = 0 , x_next = 0 , y_next = 0 , z_next = 0 , hsz = 0 , hsz_next = 0 , hsz_max = 0; dou

文档评论(0)

xiaozu + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档