Python中的盆地跳跃(Basin Hopping)优化

盆地跳跃是一种全局优化算法。它是为解决化学物理学中的问题而开发的,尽管它是一种适用于具有多个最优条件的非线性目标函数的有效算法。

在本教程中,您将发现盆地跳跃全局优化算法。完成本教程后,您将知道:

  • 盆地跳跃优化是一种全局优化,它使用随机扰动来跳跃盆地,并使用局部搜索算法来优化每个盆地。

  • 如何在python中使用盆地跳跃优化算法API。

  • 使用流域跳跃来解决具有多个最优解的全局优化问题的示例。

教程概述

本教程分为三个部分:他们是:

  • 盆地跳跃优化

  • 盆地跳跃API

  • 盆地跳跃的例子 局部最优的多峰优化 具有多个全局最优的多峰优化

盆地跳跃优化

Basin Hopping是为化学物理领域开发的一种全局优化算法。局部优化是指旨在为单变量目标函数定位最优值或在认为存在最优值的区域中运行的优化算法。而全局优化算法旨在将单个全局最优定位在潜在的多个局部(非全局)最优之中。David Wales和Jonathan Doye在1997年的论文中描述了“盆地跳跃”,题目是“通过盆地跳跃进行的全局优化和包含110个原子的Lennard-Jones团簇的最低能级结构”。

该算法包括循环两个步骤,一个是好的候选解的扰动,另一个是将本地搜索应用于被扰动的解。

扰动允许搜索算法跳到搜索空间的新区域,并可能找到导致不同最优值的新盆地,例如技术名称中的“跳槽”。局部搜索使算法可以遍历新盆地达到最佳状态。新的最优值可以作为新的随机扰动的基础,否则将被丢弃。保留新解决方案的决策是由具有“温度”变量的随机决策函数控制的,这与模拟退火非常相似。温度根据算法的迭代次数进行调整。这样可以在高温时在运行的早期就接受任意解决方案,而更严格的策略是在低温时在搜索的后期仅接受质量更好的解决方案。这样,该算法非常类似于具有不同(扰动)起始点的迭代局部搜索。该算法运行指定的迭代次数或函数求值,并且可以多次运行以提高对找到全局最优值或找到相对好的解决方案的信心。

现在,我们已经从较高的层次熟悉了基本的跳变算法,下面让我们看一下Python中用于盆地跳变的API。

盆地跳跃API

在Python中,可以通过Basinhopping()SciPy函数来进行盆地跳跃。

# perform the basin hopping search
result = basinhopping(objective, pt)

另一个重要的超参数是通过“ niter”参数运行搜索集的迭代次数,默认为100。可以将其设置为数千次迭代或更多次迭代。

# perform the basin hopping search
result = basinhopping(objective, pt, niter=10000)

可以通过“步长”控制应用于候选解的扰动量,该“步长”定义了在问题域的边界范围内施加的最大变化量。默认情况下,将其设置为0.5,但应在域中将其设置为合理的值,以允许搜索找到新的盆地。例如,如果搜索空间的合理范围是-100到100,则步长为5.0或10.0个单位可能是合适的(例如,域的2.5%或5%)。

# perform the basin hopping search
result = basinh
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值