Pergunta

Eu estou enfrentando um problema de seleção de parâmetro, o que eu gostaria de resolver utilizando Algoritmo Genético (GA). Eu deveria selecionar não mais de 4 parâmetros de saída de 3000 possíveis. Usando a representação cromossomo binário parece uma escolha natural. A função de avaliação pune muitas "selecionado" atributos e se o número de atributos é aceitável, em seguida, avalia a selecção.

O problema é que nestas condições esparsas o GA dificilmente pode melhorar a população. Nem o custo fitness médio, nem a aptidão do "pior" indivíduo melhora ao longo das gerações. Tudo o que vejo é ligeira (mesmo pequena) melhoria na pontuação do melhor indivíduo, que, suponho, é um resultado da amostragem aleatória.

Codificação o problema usando índices dos parâmetros não quer trabalhar. Isto é mais provavelmente, devido ao facto de que os cromossomas são direccionais, ao passo que o problema de escolha não é (ou seja, cromossomas [1, 2, 3, 4]; [4, 3, 2, 1]; [3, 2, 4, 1], etc, são idênticos)

O representação problema que você sugere?

P.S Se isso importa, eu uso PyEvolve .

Foi útil?

Solução

Eu não estou familiarizado com com PyEvolve, mas pelo que eu lembro sobre algoritmos genéticos, você está preocupado com 4 etapas,

  1. Chormosome Evalutation (você provavelmente já tem isso descobri)
  2. Chromosome inicialização
  3. Chromosome Crossover
  4. Chromosome Mutation

Eu acho que você pode fazer isso com listas muito bem. Você vai precisar de sobrecarregar alguns operadores, mas parece que PyEvolve permite fazer isso uma coisa simples seria a de manter a representação lista, apenas uma espécie los numericamente antes de devolver o cromossomo.

Eu preciso saber mais sobre o seu problema, mas aqui estão as minhas sugestões. Desde que você tem um número variável de parâmetros, você precisa vir para cima com algum tipo de distribuição de probabilidade para o número de parâmetros em um cromossomo. Eu vou assumir um uniforme aleatória em 1,2,3,4 aqui, mas você pode tentar algo mais se você gosta desse melhor. Vou chamar essa distribuição p_n.

  1. Inicialização. Semear a sua população com (pelo menos) 3000 cromossomos. Chamar esses c_1, ..., c_3000. Desenhe n_j de p_n. j colocar em C_J. Escolha o n_j restante -. 1 Parâmetros com uma distribuição aleatória uniforme dos parâmetros restantes
  2. Crossover. Vamos supor que temos dois cromossomos. C_1 e C_2. Nós vamos criar (e regresso) cromossomo C_3. Escolha n_3 de {n_1, n_2} cada um com probabilidade 1/2. Agora coloque os parâmetros de C_1 e C_2 em uma lista (e única deles, por isso, se ambos C_1 e C_2 conter o parâmetro 1, é apenas na lista de uma vez). Desenhe parâmetros n_3 da lista conjunta e colocá-los em C_3 cromossomo.
  3. Mutation. Dada C_1 Cromossoma, desenhar * n_1 de p_n. se n_1 * é n_1 adicionar aleatoriamente elementos para C_1 até é tem o tamanho n_1 *.

Agora, há muitas maneiras de fazer isso, então faça o que faz mais sentido para o seu problema.

Outras dicas

Eu acho que a decomposição em valores singulares ( http://en.wikipedia.org/wiki/Singular_value_decomposition ) pode ser mais apropriado aqui por conta do limite no número de parâmetros.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top