Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/phillipe17macedo/genetic.algorithm.ga
Genetic Algorithm GA
https://github.com/phillipe17macedo/genetic.algorithm.ga
algorithm genetic-algorithm javascript
Last synced: 28 days ago
JSON representation
Genetic Algorithm GA
- Host: GitHub
- URL: https://github.com/phillipe17macedo/genetic.algorithm.ga
- Owner: Phillipe17Macedo
- Created: 2024-12-12T13:40:41.000Z (about 1 month ago)
- Default Branch: main
- Last Pushed: 2024-12-12T15:03:19.000Z (about 1 month ago)
- Last Synced: 2024-12-12T15:20:38.762Z (about 1 month ago)
- Topics: algorithm, genetic-algorithm, javascript
- Language: JavaScript
- Homepage:
- Size: 3.91 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Algoritmo Genético (GA) - Criptoaritmética
Este repositório contém a implementação de um Algoritmo Genético (GA) em JavaScript, projetado para resolver problemas de criptoaritmética. O objetivo principal é encontrar mapeamentos entre letras e dígitos para satisfazer equações matemáticas como `SEND + MORE = MONEY`.
## Funcionamento Geral
O Algoritmo Genético simula um processo evolutivo inspirado na biologia. Ele utiliza técnicas de:
- **Seleção:** Escolha dos indivíduos mais aptos (menor erro).
- **Cruzamento (Recombinação):** Combinação de características de dois pais para criar filhos.
- **Mutação:** Alterações aleatórias para garantir diversidade genética.
- **Reinserção:** Substituição da população antiga por uma nova, priorizando os melhores indivíduos.O processo continua por várias gerações até encontrar uma solução viável ou atingir o número máximo de iterações.
## Estrutura do Código
### Construtor
Configura o algoritmo:
- `tamanhoPopulacao`: Número de indivíduos na população.
- `geracoes`: Número de iterações.
- `problema`: Equação criptoarimética a ser resolvida.### Principais Métodos
1. **`gerarIndividuo`:** Cria um indivíduo (permutação aleatória de dígitos de 0 a 9). Garante que cada letra será mapeada para um único dígito.
2. **`calcularAptidao`:** Calcula o erro absoluto entre os lados esquerdo e direito da equação para um indivíduo.
3. **`inicializarPopulacao`:** Gera a população inicial e calcula a aptidão de cada indivíduo.
4. **`selecionarPais`:** Seleciona os pais usando o método de torneio (três indivíduos aleatórios, escolhe o melhor).
5. **`cruzar`:** Realiza cruzamento por ponto de corte único entre dois pais, gerando dois filhos.
6. **`mutar`:** Altera dois genes aleatórios no indivíduo com base em uma probabilidade configurável.
7. **`reinserirPopulacao`:** Substitui a população antiga pelos melhores indivíduos da nova geração.
8. **`executar`:** Realiza o ciclo evolutivo, incluindo seleção, cruzamento, mutação e reinserção.### Fluxo do Algoritmo
1. **Inicialização:** Criação da população inicial aleatória.
2. **Avaliação:** Cálculo da aptidão de cada indivíduo.
3. **Seleção:** Escolha dos indivíduos mais aptos para reprodução.
4. **Cruzamento:** Combinação de pais para gerar filhos.
5. **Mutação:** Alteração aleatória para evitar estagnação.
6. **Reinserção:** Substituição da população antiga pela nova.
7. **Iteração:** Repetição do processo por várias gerações.## Exemplo de Uso
Selecione uma equação de criptoaritmética no front-end e clique em **Resolver**. O algoritmo calculará e exibirá o melhor mapeamento encontrado, junto com sua aptidão.
### Código Básico
```javascript
const problema = "SEND + MORE = MONEY";
const ag = new AlgoritmoGenetico(100, 50, problema);
const melhor = ag.executar();console.log("Melhor solução encontrada:");
console.log("Indivíduo:", melhor.individuo);
console.log("Aptidão:", melhor.aptidao);
```## Tecnologias Utilizadas
- **JavaScript:** Linguagem principal da implementação.
- **HTML/CSS:** Interface gráfica para entrada de problemas e exibição dos resultados.## Repositório
Repositório oficial no GitHub: [genetic.algorithm.GA](https://github.com/Phillipe17Macedo/genetic.algorithm.GA.git)
## Contribuições
Contribuições são bem-vindas! Sinta-se à vontade para abrir issues ou enviar pull requests.
## Licença
Este projeto é licenciado sob a MIT License - veja o arquivo [LICENSE](LICENSE) para mais detalhes.