使用python ast进行一点子树交叉

时间:2017-11-02 09:28:20

标签: python abstract-syntax-tree genetic-programming

目前,我们正在使用遗传编程中的python程序的ast表示,我们无法使用python ast模块执行一点子树交叉。

这是代码 node_to_be_replaced是一个元组,第0个元素包含从父元素中随机选择的节点,第1个元素包含该列表中该节点的索引。

collector_two是来自第二个父级的引用列表。

def modify_node_using_parent(self, node_to_be_replaced, parent_two): size = len(self.collector_two.statements) if(self.get_the_node_type(node_to_be_replaced[0]) == "Assign") or (self.get_the_node_type(node_to_be_replaced[0]) == "AnnAssign") or (self.get_the_node_type(node_to_be_replaced[0]) == "AugAssign"): j = random.randint(0, size - 1) node_to_be_replaced_with = self.collector_two.statements[j] self.collector_one.all_changable_nodes[node_to_be_replaced[1]] = node_to_be_replaced_with self.collector_two.statements[j] = node_to_be_replaced[0]

Collector类是一个遍历树的类,它创建了相同类型节点的引用列表,如语句和表达式等。 现在我从一个父节点中选择一个节点,并从另一个父节点中选择相同类型的节点,最后,我从列表中交换这些节点。 但是当我将这些AST转换回源代码时,那个不成熟的类会引发AttributetypeError。

任何帮助将不胜感激

0 个答案:

没有答案