【问题标题】:Evolutionary Algorithm without an objective function没有目标函数的进化算法
【发布时间】: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


【解决方案1】:

如果您的成对测试给出了正确的总排序,即如果 a >= b,并且 b >= c 意味着 a >= c,并且 some other conditions 。然后也许您可以即时构建排名目标,并使用CMA-ES 对其进行优化。 CMA-ES是一种进化算法,对于函数值的保序变换和输入的保角变换是不变的。此外,由于它是二阶方法,与其他无导数搜索启发式算法相比,它的收敛速度非常快,特别是在遗传算法等随机搜索需要永远进行的高维问题中。

【讨论】:

  • 好的,所以我认为为了在我的排名中使用 CMA-ES,我必须记录所有参数评估的完整顺序。这意味着每当我得到一个新参数时,我都必须进行二进制搜索才能找到我在排序中的位置,这就是你的意思吗?这可能需要很长时间(对于 1000 次评估可能需要 10 倍),但它可能是值得的。如果您有更好/更快的方法,请告诉我。
  • @user667804 这是一种可能性,它更接近我最初的想法。但是现在查看en.wikipedia.org/wiki/CMA-ES 上的伪代码,我认为您不需要全局排名,而只需在每次迭代中采样时进行逐批排名。这通常是一个小的固定集,例如 10 号。
【解决方案2】:

如果您可以成对比较解决方案,那么某种tournament selection 方法可能会很好。 Wikipedia 文章描述了将其用于遗传算法,但它很容易应用于进化算法。您所做的是反复从人群中选择一小组解决方案并在其中进行比赛。为简单起见,锦标赛规模可以是 2 的幂。如果是 8,则将这 8 个随机配对并进行比较,选出 4 个获胜者。将它们配对并选择 2 个获胜者。在最后一轮 - 选择总冠军。然后可以将该解决方案突变 1 次或多次,以为下一代提供成员。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-16
    • 2016-09-13
    • 2021-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    相关资源
    最近更新 更多