“模拟退火算法的并行化”之“什么是模拟退火算法”

本文介绍了模拟退火算法的概念,通过退火过程的类比解释了算法的工作原理。模拟退火算法在解决多维非凹函数优化问题时表现出优势,包括易于实现和加入约束,但在处理大规模问题时可能存在运行时间长、难以并行化等缺点。文章末尾提及模拟退火算法的并行化将是后续讨论的重点。
摘要由CSDN通过智能技术生成

退火,Annealing,高温物体经降温形成晶体的过程。其过程可以看做是在晶格空间求解最优解的过程。

模拟退火,Simulated Annealing,模拟自然界退火过程而求解多维非凹函数最优解的算法[1]。

[1] S. Kirkpatrick, C. D. Gelatt, Jr., and M. P. Vecchi, “Optimization by Simulated Annealing,”
Science, May 13, 1983, pp. 671 - 680.

不好理解,确实有点。
直接看伪码:

/*
 * Initialize Problem.
 */
solution = randomSolution();
temperature = initialTemperature();
searchRegion = initialSearchRegion();

/*
 * Solve by Simulated Annealing.
 */
while (outerLoopExitCriterion() == false) { // Outer Loop
  while (innerLoopExitCriterion() == false) { // Inner Loop
    newSolution = generateNewSolution(solution, searchRegion);
    deltaCost = cost(newSolution) - cost(solution);
    randomNumber = random(0, 1);
    if (randomNumber < exp(-deltaCost/temperature)) {
      solution = newSolution;
    }
  } // End of Inner Loop
  temperature = updateTemperature();
  searchRegion = updateSearchRegion();
} // End of Outer Loop

cost(const Solution&)是成本函数,即我们试图最小化的函数。其余通过注释和函数及变量名就可猜出一二。

外层循环就是对温度,temperature和搜索范围,searchRegion的更新操作,一般有指定的计划方案,schedule,也会根据当前内部循环和解的情况做相应的调整。

这里要讲讲内层循环:

  1. 我们通过变换旧的解得到新的解,searchRegion指可变换的范围,不出所料,随着迭代的次数增多,searchRegion应该趋向缩小;

  2. deltaCost即 Δcost ,用于衡量新解对旧解的改进程度, Δcost>0 表明解退步, Δcost<0 表明解进步, Δcost=0 表明解不进不退;

  3. 下面生成一个随机数,用于当解退步时判断是否接受此解;

  4. 判断是否接受新解的关键一步:
    if (randomNumber < exp(-deltaCost/temperature

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值