domingo, 28 de março de 2010

Subtree Mutation

Mais uma variante para o algoritmo de programação genética. Agora, o grupo formado pelo João Lopes, Nuno Lourenço e Ivo Gonçalves, oferece o algoritmo com recurso ao operador de mutação por substituição de uma sub-árvore.
A rotina que implementaram é a que se segue.

def sub_tree_mutation(parent,func_set,term_set,max_depth):
""" Return a mutated version of the parent."""
global count
# Choose crossover point (indepently)
size_1 = indiv_size(parent)
cross_point_1 = choice(range(size_1))
# identify subtrees to echange
sub_tree_1 = sub_tree(parent, cross_point_1)
method = choice(['grow','full'])
sub_tree_2 = gen_rnd_expr(func_set,term_set,max_depth,method)
# Exchange
new_par_1 = deepcopy(parent)
offspring = replace_sub_tree(new_par_1, sub_tree_1,sub_tree_2)
return offspring

Em relação ao código que me foi enviado, fiz uma pequena mudança: o operador não é estocástico. Assim, quando este operador é activado no programa principal (onde também fiz desaparecer o lado probabilístico) é porque já vai haver mutação.

O código completo pode ser obtido em: http://eden.dei.uc.pt/~ernesto/cevol/st_mut.py

Divirtam-se!

Ernesto Costa

Sem comentários:

Enviar um comentário