假设我有一个名为foo
的程序。它接受一个参数(例如foo 42
),然后输出一行包含一个数值(例如2034
)。
我想找到输入参数的最优值,因此输出是最小的。目前,我通过(半)二进制搜索手工完成,但这很慢-特别是如果foo
很慢。
是否有一个自动工具来找到输入的最佳值?
我们假设值是连续的,并且可以找到一个局部最优,所以使用梯度下降的东西将是理想的(特别是如果它可以接受n个输入)。
作为一个例子,你可以使用foo
:
perl -e 'print (1+(shift() - 10203040506)**2)'
在示例中,我希望工具返回10203040506,因为它给出了最小的值。
第一个版本现在可用:https://gitlab.com/ole.tange/tangetools/-/tree/master/find-optimal
它使用的是Nelder-Mead,它只在浮动上有效。它在整数值上表现很差。
如果你知道一个"Nelder-Mead"对于整数,请告诉我-特别是如果有示例Python代码。