【发布时间】:2021-12-07 20:11:43
【问题描述】:
我发现这篇旧的 stackoverflow 文章基本上正是我想要的。
Algorithm to optimize multiple variables more efficiently than trial-and-error
不幸的是,我的高级数学有点欠缺,我对 ElKamina 的答案有一些疑问,如果有人可以看看并建议一些这些基本的数学概念,希望它能帮助我。
我指的答案如下:
def simAnneal( w, seed_x, numSteps=100000, sigma=0.01 ):
optimal_x = [i for i in seed_x]
optimal_w = w(optimal_x)
cur_w = w(seed_x)
for i in range(numSteps):
new_x = [i+random.gauss(0, sigma) for i in seed_x]
new_w = w(new_x)
if (new_w > cur_w) or (random.random() > new_w / cur_w) :
cur_x = new_x
cur_w = new_w
if cur_w > optimal_w:
optimal_w = cur_w
optimal_x = cur_x
return optimal_x
我不熟悉 seed_x、sigma 和高斯分布,所以我不确定他们是如何提出 new_x 的。
我正在尝试根据许多变量 (>10) 求解一个值,并且我正在尝试优化而不是随机猜测,因为这将花费很长时间。
谢谢!
【问题讨论】:
-
你最好把这个发到math.stackexchange.com。
-
你能分享一个(小例子)你的多变量函数吗?此外,您所知道的所有信息。
-
您所指的算法是“模拟退火” - 最好先阅读该算法,然后再深入了解实际实现。
-
pypi.org/project/frigidum 是为你做退火的包
标签: python algorithm math multivariate-testing