【发布时间】:2016-01-24 16:05:29
【问题描述】:
我目前正在尝试为我的程序找到好的参数(大约 16 个参数,程序的执行大约需要一分钟)。进化算法似乎是个好主意,我想看看它们的表现如何。
不幸的是,我没有很好的适应度函数,因为我的目标函数的方差非常高(如果不等到 2016 年,我无法经常运行它)。但是,我可以计算出哪一组参数更好(相互测试两种配置)。你知道是否有只使用这些信息的进化算法吗?还有其他更适合的优化技术吗?对于这个项目,我使用 C++ 和 MATLAB。
// 更新:非常感谢您的回答。两者看起来都很有希望,但我需要几天时间来评估它们。抱歉耽搁了。
【问题讨论】:
-
进化算法可能是您想要使用的,但请记住,它们通常用作元启发式优化算法。我不一定了解您尝试做的事情的性质,但有这么多参数,您可以尝试 Naive Bayes 或 BayesNet 方法。
-
我认为 BayesNet 不是正确的方法。您可以将我的程序视为我想要优化的数学函数。只是它上面有很多噪音。所以如果我直接使用目标值,我想我可能会卡在噪音产生的小洞里......
-
你不能使用更经典的方法来优化,例如共轭梯度?
-
不,我不能,因为我不知道梯度是什么样的(它是多项式,对数,...),有多个最优值(我被困在),噪声使梯度的估计不可靠,估计 16d 函数的梯度需要大量的函数评估,这又需要很长时间。唯一起作用的是具有多项式函数的交叉熵搜索,请参阅en.wikipedia.org/wiki/Cross-entropy_method
-
在期望最大化中,我们曾经做过的事情之一是在达到完全收敛之前很久就停止迭代:这是一种尝试收敛到信号而不是噪声的方法。我想知道是否可以在这里应用类似的东西:-/
标签: c++ matlab mathematical-optimization evolutionary-algorithm