在内存寄存器中显式定义常量的利弊是什么,与最初为常量播种个体并通过遗传算子对其进行变异有什么不同?
具体来说,请从我有一本关于线性遗传编程的书中阅读:
在我们的实现中,所有寄存器都保存浮点值。在内部,
常数存储在具有写保护的寄存器中,即可能不会变为
目的寄存器。结果,可能的常数集
保持固定。
我想知道的是,这是比最初随机生成常量并将其集成到程序中,然后通过训练过程进行改进的方法更好的方法。
谢谢
最佳答案
通过使用术语“内存寄存器”,我将假设您是指内存增强的遗传编程技术。
即使使用内存寄存器,使用常量也是不正常的。取而代之的是,像Memory with memory in genetic programming这样的技术可以让您缓慢地更改内存寄存器,而无需进行突然更改以使内存不相关。不过,通常会在随机初始化中引入这些值,因此您可以执行随机重启以尝试摆脱局部最优值。
也许您正在考虑将所有内存寄存器设置为零或某些人工估计值?
编辑:
听起来,他们拥有希望保留在所有世代中的某些价值,而这些价值没有改变。就个人而言,假设您的GA所处的环境在所有实例中都是共享的,那会更好地代表您的GA所代表的那种价值。
如果没有在实例之间共享它们,那么这可能反映了一种意图,即在设置中使用一些随机值播种总体(至少在给定的运行期间内不应该允许其演化)。
如果需要在复杂的背景下进行演化,并且想要先对固定的环境进行拟合,然后再尝试对更复杂的可变环境进行拟合,则第一类常数(环境常数)会很有用。
第二种常量(每个DNA实例)不是我使用过的,但我想如果分析人员发现某些“易变”变量过于混乱而无法连续进化,那么将其作为常量“保护”可能会有用跑步。
关于artificial-intelligence - 线性遗传规划常数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10411859/