C 遗传算法使用哪种编码?
我想用C编写一个遗传算法,用于优化10个变量(x1到x10)的函数。但是,我无法确定应该使用哪种编码。我在示例中主要看到使用二进制编码,但我的示例中的变量可以取实际值。另外,对于这些类型的问题,值编码是一个很好的选择吗 当两个非常接近最优的答案组合起来会使其他答案非常接近最优时,最好使用遗传算法。纯二进制编码的问题在于,如果不检查交叉,最终会得到两个答案,而这两个答案可能与原始答案没有多大关系 也就是说,只有当变量的数量非常少,并且变量中的数据量很大时,这才是真正的问题。至于选择一种编码,与其说是一门科学,不如说是一门艺术,这取决于你的问题。我建议使用适合您所需精度的编码。有了10个变量,无论您如何编码,都不会错得太多,8位ASCII编码器可能可以正常工作C 遗传算法使用哪种编码?,c,genetic-algorithm,C,Genetic Algorithm,我想用C编写一个遗传算法,用于优化10个变量(x1到x10)的函数。但是,我无法确定应该使用哪种编码。我在示例中主要看到使用二进制编码,但我的示例中的变量可以取实际值。另外,对于这些类型的问题,值编码是一个很好的选择吗 当两个非常接近最优的答案组合起来会使其他答案非常接近最优时,最好使用遗传算法。纯二进制编码的问题在于,如果不检查交叉,最终会得到两个答案,而这两个答案可能与原始答案没有多大关系 也就是说,只有当变量的数量非常少,并且变量中的数据量很大时,这才是真正的问题。至于选择一种编码,与其说
希望有帮助。对于实值问题,我建议尝试CMA-ES或其他ES变体。CMA-ES无疑是实值问题的最新技术。它的目的是在多维问题中快速找到好的解决方案。上有可用的实现。在这项工作中,还有一个C#实现。进化策略是专为实值优化问题设计的算法。它们与遗传算法非常相似(两者都是在同一时间发明的,但在不同的地方)。主要区别在于,对于ES而言,主要驱动因素是突变,并且它具有对突变强度的巧妙适应。没有这种自适应,就无法及时定位(局部)最优。CMA-ES易于配置,它只需要初始标准偏差和可选的总体规模(否则,有一个公式可以在给定问题规模的情况下对此进行估计) 当然,遗传算法也可以应用,但你必须使用一些特定的算子,这些算子只能以很小的程度变异变量。例如,穆伦宾的育种家遗传算法。但一般来说,遗传算法更适合于需要正确组合的问题。例如,背包问题中应包含哪些项目,或将哪些函数和终端组合到公式中(遗传编程)。如果你需要为某件事找到合适的价值,那么问题就少了。当然,虽然有遗传算法的变体可以解决这些问题,但请寻找实数编码遗传算法(RCGA或RGA) 另一种适用于实值问题的算法是粒子群优化算法,但在我看来它更难配置。我从2011年的标准PSO开始
如果您的问题包含整数变量,那么选择将变得更加困难。当变量是离散变量时,进化策略的性能并不好,因为整数变量的适应方案是不同的。遗传算法再次成为一种有趣的首选算法。感谢您提供的详细答案!!