Pergunta

Eu quero resolver um sistema de n linear equações contendo n variáveis ??usando um algoritmo genético.

Estou tendo dificuldade em definir a operação de passagem como a solução pode consistir em valores de ponto flutuante. Como eu prossigo? Parece possível, mas este é o meu primeiro encontro com algoritmos genéticos.

Suponha que temos para resolver

 x + 2y = 1
2x + 8y = 3

A resposta seria x = 1/2 e y = 1/4.

Como podemos modelar o problema?

Atualizar : veja se você conseguia decifrar nada do papel http://www.masaumnet.com/archives/mjbas/volume1/issue2/mjbas010205.pdf .

Foi útil?

Solução

Um caminho é escolher a sua própria representação de ponto flutuante, que liberta-a muito com os valores que você deseja. Claro, que faz você responsável pela implementação de operações aritméticas. Talvez você possa encontrar uma biblioteca bignum você poderia alterar.

Você poderia pontos flutuantes também decompor plataforma nativa usando, por exemplo frexp durante a etapa de crossover, então recombinar-lo durante o abate.

Outras dicas

O seu cromossomo poderiam ser os números de ponto flutuante n (duplos), ou você poderia reinterpretar-los como cadeias de bits, usando uma união:

const int n = 100;

union Chromosome {
  double val[n];
  unsigned char bits[n * sizeof(double)];
};

... então você pode usar os valores duplos para interpretação do valor da solução / fitness, e os bits para reprodução / cruzamento / mutação.

Boa sorte!

Você simplesmente não fazer. Existem muitos métodos diferentes que você pode aplicar para resolver sistemas lineares. Mas "algoritmos genéticos" não é algo que vem à mente. Você usaria algoritmos genéticos para resolver problemas combinatorical (escolher um elemento de fora de um finito set).

Você normalmente resolver sistemas lineares usando fatorações (QR, CN) ou algoritmos iterativos (Gauss-Seidel, CG, ...)

Você terá que pensar sobre o uso de um algoritmo genético verdadeiro codificado em vez do código binário algoritmo genético como sugerido no documento que você tenha referido. Na verdade, se você usa um algoritmo genético de código binário, então você não será capaz de encontrar a solução para as equações se sua 'x', 'y' pode assumir valores negativos.

Por isso você precisa usar um algoritmo genético verdadeiro codificada. Ou você pode codificar todo o algoritmo genético si mesmo, ou você pode simplesmente usar um bom código existente RGA para resolver seu problema. Você só tem que personalizar a função de aptidão para sua necessidade. Aqui você pode usar o que é sugerido no documento. Foi muito fácil!

Você pode considerar usando a implementação RGA de http://www.iitk.ac .in / kangal / codes.shtml .

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