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