terça-feira, 16 de março de 2010

No princípio era a representação...

Disse nas aulas que quando estamos a desenvolver uma solução baseada em algoritmos evolucionários, a primeira coisa que fazemos é pensar na representação. seguem-se os operadores de variação adequados ao problema. No que diz respeito à representação, as mais comuns são:

- cadeias binárias
- permutações de inteiros
- vectores de reais

Definida a representação um outro aspecto a resolver é o da geração da população inicial, o que é feito em geral de modo aleatório. Vejamos como se pode fazer isso em Python. Comecemos pelas cadeias binárias:


def generate_pop_bin(tam_pop, tam_chromo):
return [(generate_bit_string(tam_cromo),0) for j in range(tam_pop)]

def generate_bit_string(size):
return [randint(0,1) for i in range(size)]


Como se vê precisamos do método randint do módulo random ,que terá que ser importado. Por outro lado note-se o uso, nas duas funções, de listas por compreensão. Finalmente, atente-se ao facto da nossa representação conter também um campo para o mérito de cada indivíduo.

E se for uma permutação de inteiros? Também não é complexo:


def generate_pop_perm_int(tam_pop, tam_chromo):
return [(generate_permutation_int(tam_cromo),0) for j in range(tam_pop)]

def generate_permutation_int(tam_cromo):
caminho = range(tam_cromo)
shuffle(caminho)
return caminho

Aqui é o método shuffle do módulo random que vem em nosso auxílio. Admitimos que a permutação é formada pelos inteiros de 0 até ao comprimento especificado menos um. Uma vez mais: listas por compreensão.

E finalmente o caos dos números reais.

def generate_pop_reals(pop_size, domain, sigma):
return [generate_vector_reals(domain, sigma) for i in range(pop_size)]


def generate_vector_reals(domain, sigma):
return [[uniform(domain[i][0], domain[i][1]), sigma[i]]for i in range(len(domain))]

E desta vez o que é que random nos deu? O método uniform. E mais listas por compreensão... E os parâmetros estratégicos na representação.

Atente-se no que têm em comum todas estas alternativas. E as diferenças?

Ernesto Costa

Sem comentários:

Enviar um comentário