gpt4 book ai didi

python - 使用 COBYLA 方法进行盆地跳跃似乎可以忽略约束

转载 作者:行者123 更新时间:2023-12-01 09:02:28 25 4
gpt4 key购买 nike

我在使用带有 method='COBYLA' 的 basshopping 来指定约束时遇到问题。这是一个出现问题的测试用例。本质上,约束被忽略,并且存在超出指定范围的功能试验。我指定一个简单的二次方程,最小值为 [0,0],搜索 -3<x[0] ,但正如您从输出中看到的,有很多搜索超出了该范围(我增加了步长以使其明显)

import numpy as np
from scipy.optimize import basinhopping

def f(x):
if x[0]<-3 :
print('outside range ',x[0])
return x[0]**2+x[1]**2

cons = [{'type':'ineq','fun': lambda x: x[0]+3}]
kwargs = {'method':'COBYLA','constraints':cons}

ret=basinhopping(f, [5,1],T=1,stepsize=1000,niter=1,minimizer_kwargs=kwargs)
print(ret)

runfile('py/cobyla_test', wdir='/py', post_mortem=True)
outside range -446.14581341127945
outside range -445.14581341127945
outside range -445.14581341127945
outside range -444.14581341127945
[etc... lots of output deleted]
[-4.81217825e-05 -5.23242054e-05] 5.0535284302996725e-09

最佳答案

scipy.optimize.basinhopping — SciPy v1.1.0 Reference Guide 所写,盆地跳跃是一个两步法:

  • 首先,完成随机跳转(take_step 回调)
  • 然后使用特定的最小化方法从该点找到局部最小值
  • 最后,决定是否接受该步骤(accept_test 回调)

您指定的约束是针对最小化方法的,它们不会影响跳跃步骤。对于跳跃步长,可以调整 stepsize(随机跳跃的最大位移),或者定义您自己的 take_step

<小时/>

“我认为约束的要点是它永远不会尝试约束之外的 x” - 数学问题中的约束,包括 constrained optimization problem ,不要那样工作。它们仅指定解决方案本身必须满足的条件。它们不限制在获得解决方案时可以使用哪些点,完全取决于算法来选择这些点。

限制数值方法搜索区域的方法是根据函数和方法的性质以某种特定的方式调整方法参数,以“引导”方法进入正确的方向。

关于python - 使用 COBYLA 方法进行盆地跳跃似乎可以忽略约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52359147/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com