【发布时间】:2018-03-16 02:04:04
【问题描述】:
我正在学习语法进化,但我似乎无法掌握的一件事是如何使用从语法进化而来的字符串来解决实际问题。它是转换成神经网络还是转换成方程,还是别的什么?它如何接收输入并打印输出?
【问题讨论】:
标签: genetic-algorithm evolutionary-algorithm
我正在学习语法进化,但我似乎无法掌握的一件事是如何使用从语法进化而来的字符串来解决实际问题。它是转换成神经网络还是转换成方程,还是别的什么?它如何接收输入并打印输出?
【问题讨论】:
标签: genetic-algorithm evolutionary-algorithm
语法进化 (GE) 区分基因型和表型 (genotype–phenotype distinction),这意味着进化的基因型本身并不是一个解决方案,而是映射到一个解决方案。
突变和交叉是在基因型上进行的,但要评估适合度,应首先将基因型转化为表型。在语法进化中,这意味着生成符合所选语法的字符串。然后应该执行此解决方案字符串,并评估执行结果以估计解决方案的适用性。
这在很大程度上取决于 GE 系统的实施。
如果它以某种真正的编程语言生成解决方案,则应使用相应的工具链对其进行编译和/或执行,使用一些测试输入运行,并评估输出以估计适合度。
如果 GE 系统能够在内部执行解决方案,则不涉及外部工具链。根据语法生成类似语法树的结构(而不是非结构化文本)可能会很方便,因为执行这样的结构非常容易。
存在一整类所谓的树遍历解释器——不是超级性能,但在实现上相当简单。通常这样的解释器首先解析源文本并构建语法树,然后执行它;但在GE系统中可以直接生成语法树,不涉及解析。
我可以推荐一本免费书籍"Crafting interpreters" 的"A tree-walk interpreter" 章节作为构建这种解释器的一个很好的例子。
【讨论】: