1

我有三个值 X、Y 和 Z。这些值的值范围介于 0 和 1 之间(包括 0 和 1)。当我调用函数 f(X,Y,Z) 时,它返回一个值 V(0 到 1 之间的值)。我的目标是选择 X,Y,Z 使返回值 V 尽可能接近 1。

选择过程应该是自动化的,并且 X、Y、Z 的正确值是未知的。

由于我的用例,可以将 Y 和 Z 设置为 1(值 1 对输出没有任何影响)并搜索 X 的最佳值。之后我可以用该值替换 X 并执行相同的操作对于 Y。对于 Z 的程序相同。

如何找到“函数的最大值”?是否有某种“梯度下降”或爬山算法或类似的东西?整个模块是用 perl 编写的,所以也许有一个 perl 包可以解决这个问题?

4

2 回答 2

2

您可以使用模拟退火。它是一种多变量优化技术。它还用于获得 Traveling Salesperson 问题的部分解决方案。它也是 Peter Norvig 的 Intro to AI 书中提到的搜索算法之一。

它是一种依赖于随机变量的爬山算法。此外,它不一定会给您“最佳”答案。您还可以根据您的计算/时间需求改变它所需的迭代。

http://en.wikipedia.org/wiki/Simulated_annealing http://www1bpt.bridgeport.edu/sed/projects/449/Fall_2000/fangmin/chapter2.htm

于 2012-06-02T17:16:37.723 回答
1

我建议你看看Math::Amoeba哪个实现了Nelder-Mead 方法来查找函数上的驻点。

于 2012-06-02T17:11:33.037 回答