Giter Site home page Giter Site logo

arvaesri / caixeiro-viajante-com-algoritimos-geneticos Goto Github PK

View Code? Open in Web Editor NEW
0.0 1.0 0.0 36 KB

Resoluçãor do problema do caixeiro viajante, um problema de otimização, por meio de algoritmos genéticos. Realizando o calculo do fitness , seleção dos indivíduos, cruzamento e mutação. Como resultado o algoritmo fornecia a melhor rota encontrada, para o numero de gerações fornecido.

Jupyter Notebook 100.00%

caixeiro-viajante-com-algoritimos-geneticos's Introduction

Mutação:

Ela vai ser responsável por dar à população uma variedade de genes para os indivíduos, evitando que a solução fique presa em extremos locais, os parâmetros de mutação devem ser ajustados para o problema, caso seja pequena de mais, as soluções podem ficar presas em extremos locais, e caso a mutação seja grande demais vai acabar dificultando que o algoritmo encontre ótimos globais, já que os indivíduos vão sofrer muitas mutações.

Seleção:

É responsável pela avaliação e seleção dos indivíduos, com base em uma função de avaliação, a comparação dos valores da função de avaliação vai levar a escolha dos indivíduos que vão sobreviver e se reproduzir, havendo uma vantagem seletiva para os indivíduos com um valor da função de avaliação maior. Caso a seleção seja feita apenas com os indivíduos melhores avaliados, a população pode perder características(genes) que ajudariam a encontrar uma solução ótima.

CrossOver(Cruzamento):

É responsável por realizar uma mistura das características(genes) dos indivíduos, onde os filhos vão herdar parte das características dos pais. É necessário para dar a população uma variedade genética dos indivíduos.

Metodos Ultilizados e Alterações:

No algoritmo foi criada uma classe chamada cidade que contém os valores X e Y correspondentes às coordenadas do plano cartesiano e uma função de calcular distância, responsável por calcular a distância euclidiana entre 2 cidades(2 pontos no mapa). A população inicial foi definida aleatoriamente com base no grupo de possíveis cidades a serem visitadas e com base nessas cidades são formadas listas contendo as cidades geradas que vão ser as possíveis rotas. O fitness foi calculado com base no somatório das distâncias entre as cidades visitadas que uma rota vai possuir. Para seleção das rotas que vão gerar filhos foi usado o método da roleta, onde a probabilidade de seleção da rota vai ser proporcional ao seu fitness em relação a todas as rotas. O cruzamento das rotas selecionadas foi feito com uma permutação das cidades contidas nas rotas, resultando nas rotas “filhas”. Para a mutação foi realizada uma troca das posições de 2 cidades dentro de uma mesma rota. O código vai ficar em loop com base no número de gerações desejadas, realizando estas etapas até que o número de gerações seja alcançado, descartando as rotas com menor fitness e mantendo as rotas com o melhor fitness e no final a melhor rota encontrada vai ser mostrada.

Resultado:

É interessante ver como o algoritmo foi capaz de encontrar uma solução satisfatória para o problema, após uma quantidade suficiente de gerações, mesmo sendo a partir de rotas aleatórias, é também possível generalizar essa abordagem para outros tipos de problemas, o que me mostrou como esse tipo de abordagem é versátil.

Geração Inicial

Geração Inicial

Geração final

Resultado

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.