与最初用常量播种个体并通过遗传运算符改变它们相比,在内存寄存器中显式定义常量有哪些优点和缺点?
具体来说,是从我一本关于线性遗传编程的书中读到的:
在我们的实现中,所有寄存器都保存浮点值。在内部, 常量存储在写保护的寄存器中,即可能不会变成 目的地寄存器。因此,可能的常数集 保持固定。
我想知道的是,这是否比简单地最初随机生成常数并将它们集成到程序中,然后通过训练过程对其进行改进更好的方法。
谢谢
最佳答案
根据您对术语“内存寄存器”的使用,我假设您指的是内存增强遗传编程技术。
即使使用内存寄存器,使用常量也是不正常的。相反,像 Memory with memory in genetic programming 这样的技术可以让你慢慢地改变你的内存寄存器,而不是做出突然的改变,使内存变得无关紧要。尽管如此,引入随机初始化值是很常见的,这样您就可以随机重新启动以尝试逃避局部最优。
也许您正在考虑将所有内存寄存器设置为零或一些人类估计值?
编辑:
听起来他们有一些值(value)观希望不加修改地传承给后代。就我个人而言,假设您的 GA 所在的环境可以更好地体现这种值(value),假设它们在所有实例之间共享。
如果它们不在实例之间共享,那么这可能反射(reflect)了在设置中使用一些随机值来为群体播种的意图,这些随机值不应该允许进化(至少,在给定的运行期间不允许进化) )。
如果您需要在复杂的背景下发展,并且希望在尝试获得良好的结果之前首先适应固定的环境,那么第一种类型的常量(环境常量)可能会很有用。适合更复杂的可变环境情况。
第二种常量(每个 DNA 实例)不是我使用过的东西,但我想如果分析师已经识别出一些“ volatile ”变量,这些变量太困惑而无法持续进化,那么“保护”可能会很有用它们作为运行的常量。
关于artificial-intelligence - 线性遗传规划常数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10411859/