我必须应用启发式算法来从函数中找到最小值或最大值。
我理解启发式意味着什么,但我在哪里可以找到在Rosenbrock function上应用它的算法。
(C ++,JAVA,C#甚至伪代码可能非常有用)。
答案 0 :(得分:2)
最简单,最明显的解决方案是使用随机漫步算法。它的工作原理是从搜索空间中的随机点开始,然后访问它的随机邻居。
类似但更合理的算法是爬山。再次,你从一个随机点开始,但这次你选择了最好的邻居。
另一个技术上,启发式算法是随机抽样,这意味着从搜索空间中挑选任何一点并记住你找到的最佳点。
随机采样的改进是模拟退火算法。它是随机采样和爬山的融合:你首先在搜索空间中挑选随机点,但随着时间的推移,你倾向于坚持使用更高质量的点。
您可以在维基百科上找到上述所有内容的更多信息和伪代码示例。
完整不同类别的解决方案是遗传算法。您可以通过阅读http://www.obitko.com/tutorials/genetic-algorithms/index.php开始了解它们。不幸的是它似乎没有任何代码示例。
答案 1 :(得分:1)
您参考的维基百科文章提到了adaptive coordinate descent这是一种最先进的进化算法,作为一种最小化Rosenbrock函数的技术。谷歌搜索找到几篇包含伪代码和算法的论文,包括this one。该论文甚至包括对actual code in Matlab的引用。
你也可以使用随机重启的期望最大化,尽管这可能比自适应坐标下降效率低得多。