Bem-vindo ao projeto Algoritmo Genético para Localização de Centros de Distribuição! Este repositório contém um notebook em Python que implementa um algoritmo genético para resolver o problema de localização de centros de distribuição ou fábricas (Facility Location Problem). O objetivo é selecionar o melhor centro de distribuição para minimizar os custos totais de transporte, atendendo à demanda de todos os clientes. Vamos explorar o que este notebook faz e como utilizá-lo. 🚀
- Visão Geral
- Descrição do Problema
- Estrutura dos Dados de Entrada
- Como Funciona o Algoritmo Genético
- Dependências
- Uso
- Saída
Este notebook utiliza um algoritmo genético para resolver o problema de localização de centros de distribuição, visando minimizar os custos totais de transporte, respeitando as capacidades dos centros e atendendo às demandas dos clientes.
O algoritmo genético é uma técnica de otimização inspirada no processo de seleção natural. A seguir estão os passos gerais de como ele resolve o problema de localização de centros de distribuição:
-
Representação da Solução (Cromossomos): Cada solução possível é representada como um cromossomo, geralmente uma lista binária indicando se um centro de distribuição está ativo (1) ou não (0).
-
Inicialização da População: Uma população inicial de soluções é gerada aleatoriamente.
-
Avaliação de Fitness: Cada solução é avaliada com base em uma função de fitness, que neste caso é o custo total de transporte.
-
Seleção: Soluções são selecionadas para reprodução com base em sua fitness. Soluções melhores têm uma maior probabilidade de serem selecionadas.
-
Crossover (Recombinação): Combina duas soluções selecionadas para criar novas soluções (filhos), trocando partes dos cromossomos dos pais.
-
Mutação: Pequenas alterações aleatórias são feitas nas novas soluções para manter a diversidade genética.
-
Substituição: As novas soluções substituem algumas das soluções antigas na população, criando uma nova geração.
-
Critério de Parada: O processo continua até que um critério de parada seja atingido, como um número máximo de gerações ou uma melhoria mínima na fitness.
Este método é eficaz para explorar um grande espaço de soluções e encontrar uma solução próxima do ótimo global, evitando que o algoritmo fique preso em ótimos locais.
O notebook visa:
- Minimizar o Custo Total: Selecionar os centros de distribuição que minimizem o custo total de transporte.
- Atender a Demanda: Garantir que a demanda de todos os clientes seja atendida.
- Respeitar as Capacidades: Assegurar que as capacidades dos centros de distribuição não sejam excedidas.
Dados fictícios de exemplo:
- Clientes: Lista de clientes com suas respectivas demandas e coordenadas geográficas.
- Centros de Distribuição: Lista de centros com suas capacidades e coordenadas.
- Custos Unitários de Transporte: Matriz de custos unitários de transporte entre centros e clientes.
O notebook define o seguinte:
- Variáveis de Decisão: Seleção de centros de distribuição ativos.
- Função Objetivo: Minimizar o custo total de transporte.
- Restrições: Garantir atendimento da demanda e não exceder as capacidades dos centros.
- Clientes: Arquivo Excel com colunas
Nome
,Demanda
,Latitude
,Longitude
. - Centros de Distribuição: Arquivo Excel com colunas
Nome
,Capacidade
,Latitude
,Longitude
. - Custos Unitários de Transporte: Arquivo Excel com uma matriz de custos onde linhas representam centros e colunas representam clientes.
Certifique-se de ter as seguintes dependências instaladas:
- Python 3.x
- Pandas
- NumPy
- Geopy
Instale-as usando pip:
pip install requirements.txt
-
Clone este repositório e execute o notebook:
git clone <https://github.com/vtatekawa/facility-location-problem-GA> cd <facility-location-problem-GA> jupyter notebook FacilityLocationGeneticAlgorithm.ipynb
-
Carregue seus dados de clientes e centros nos formatos adequados (exemplos estão na pasta input).
-
Execute todas as células do notebook para encontrar a melhor solução.
Após executar o notebook, você obterá:
- Centro de Distribuição Selecionado: Nome do centro selecionado.
- Melhor Solução: Configuração dos centros de distribuição ativos.
- Custo Total: Custo total de transporte otimizado.
Centro de Distribuição Selecionado: Centro_X
Melhor solução: [0, 1, 0, 0]
Custo total: 123456.78
Feito com 🧠 por Vitor Tatekawa