从函数中寻找最小值的启发式算法

时间:2014-10-09 15:48:43

标签: c++ algorithm

我必须应用启发式算法来从函数中找到最小值或最大值。

我理解启发式意味着什么,但我在哪里可以找到在Rosenbrock function上应用它的算法。

(C ++,JAVA,C#甚至伪代码可能非常有用)。

2 个答案:

答案 0 :(得分:2)

最简单,最明显的解决方案是使用随机漫步算法。它的工作原理是从搜索空间中的随机点开始,然后访问它的随机邻居。

类似但更合理的算法是爬山。再次,你从一个随机点开始,但这次你选择了最好的邻居。

另一个技术上,启发式算法是随机抽样,这意味着从搜索空间中挑选任何一点并记住你找到的最佳点。

随机采样的改进是模拟退火算法。它是随机采样和爬山的融合:你首先在搜索空间中挑选随机点,但随着时间的推移,你倾向于坚持使用更高质量的点。

您可以在维基百科上找到上述所有内容的更多信息和伪代码示例。

完整不同类别的解决方案是遗传算法。您可以通过阅读http://www.obitko.com/tutorials/genetic-algorithms/index.php开始了解它们。不幸的是它似乎没有任何代码示例。

答案 1 :(得分:1)

您参考的维基百科文章提到了adaptive coordinate descent这是一种最先进的进化算法,作为一种最小化Rosenbrock函数的技术。谷歌搜索找到几篇包含伪代码和算法的论文,包括this one。该论文甚至包括对actual code in Matlab的引用。

你也可以使用随机重启的期望最大化,尽管这可能比自适应坐标下降效率低得多。