没有 objective 函数的进化算法

Evolutionary Algorithm without an objective function

我目前正在尝试为我的程序寻找合适的参数(大约 16 个参数,程序的执行大约需要一分钟)。进化算法似乎是个好主意,我想看看它们的表现。

不幸的是,我没有很好的适应度函数,因为我的 objective 函数的方差非常高(我不能经常 运行 直到 2016 年)。但是,我可以计算出哪一组参数更好(相互测试两个配置)。您知道是否存在仅使用该信息的进化算法?还有其他更合适的优化技术吗?对于这个项目,我使用 C++ 和 MATLAB。

// 更新:非常感谢您的回答。两者看起来都很有希望,但我需要几天时间来评估它们。抱歉耽搁了。

如果您的成对测试给出了正确的总排序,即如果 a >= b,并且 b >= c 意味着 a >= c,并且 some other conditions . Then maybe you can construct a ranking objective on the fly, and use CMA-ES 对其进行优化。 CMA-ES是一种进化算法,对函数值的保序变换和输入的保角变换具有不变性。此外,因为它是二阶方法,与其他无导数搜索启发式算法相比,它的收敛速度非常快,尤其是在像遗传算法这样的随机搜索需要永远进行的高维问题中。

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