我无法理解遗传编程的AI如何确定最终方程中应该出现常数。如果我使用公式F(m) = ma;F(m) = m9.8,AI如何知道9.8这个实数的实际值?我明白,与其在二叉树中直接放入最终数字,不如放入一个描述常数的符号,然后再以某种方式计算或猜测其值。
谢谢
回答:
给定一组预定义的常数(终端集的一部分),它们将被组合形成新的常数(使用树表示法,任何只有数字常数作为叶子的子树本身可以被视为一个新的数字常数)。
即使只有一个常数(c
),系统也会创建:
- 1.0常数(常数除以自身:
c / c
); - 2.0常数(
1.0 + 1.0
即c / c + c / c
); - 0.5常数(
1.0 / 2.0
即c / c / (c / c + c / c)
); - 以这种方式会创建许多常数(如果幸运的话…
9.8
)。
有时会使用称为“短暂随机常数”(Koza)的特殊终端。对于初始种群中的每个短暂常数,会生成一个在指定范围内的随机数。然后这些随机常数会被移动和组合。
无论如何,即使使用了短暂随机常数,遗传编程在生成正确常数方面仍然可能面临挑战(Koza说“寻找数字常数是遗传编程的骷髅在衣橱里”)。
因此,在进化过程中或之后可以使用其他技术,例如数字突变、爬山法…
这些混合系统通常在成功率上会有显著的改进(至少对于回归问题)。