gpt4 book ai didi

python - scipy 优化 - fmin Nelder-Mead 单纯形

转载 作者:太空宇宙 更新时间:2023-11-04 01:35:55 24 4
gpt4 key购买 nike

我正在尝试使用 scipy Nelder-Mead 单纯形搜索函数来查找非线性函数的最小值。看来我的单纯形被卡住了,因为它从一个太小的初始单纯形开始。不幸的是,我在 scipy 中看不到可以更改某些单纯形参数(例如初始单纯形大小)的任何地方。有办法吗?我错过了什么吗?还是有 NM 单纯形的其他实现?

谢谢

最佳答案

给 Nelder-Mead 的两条建议:

1) 在函数内部将所有 x 对齐到一个网格,比如 .01:

x = np.round( x / grid ) * grid
f = ...

这充当高维度的简单噪声过滤器(在 2d 或 3d 中,不要打扰)。

2) 从附近 2d+1 个点中最好的 d+1 个点开始,而不是通常的 d+1:

def neard1( func, x, h, verbose=1 ):
""" eval func at 2d+1 points x, x +- h
sort
-> f[ d+1 best values ], X[ d+1 ]
to start or restart Nelder-Mead
"""
dim = len(x)
I = np.eye(dim)
np.fill_diagonal( I, h ) # scalar or vec
X = x + np.vstack(( np.zeros(dim), I, - I ))
fnear = np.array([ func( x ) for x in X ]) # 2d+1
f0 = fnear[0]
up = np.argsort( fnear ) # vec func: |fnear|
if verbose:
print "neard1: f %g +- %s around x %s" % (
f0, fnear[up] - f0, x )
bestd1 = up[:dim+1]
return fnear[bestd1], X[bestd1]

在 Nelder-Mead 之后查看 neard1() 值也不是一个坏主意,了解 func() 在那里的样子。
如果有任何邻居比 N-M“最佳”更好,则从该新单纯形重新启动 N-M。(可以交替使用 neard1、N-M、neard1、N-M:简单但非常依赖问题。)

你有多少个变量,你的函数有多少噪声?

希望对你有帮助

关于python - scipy 优化 - fmin Nelder-Mead 单纯形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9788378/

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