A FCT Entregas é uma pequena empresa de logística recém-chegada à movimentada cidade de NP-Completópolis. Apesar do entusiasmo e da dedicação de seus fundadores, a empresa enfrenta sérias dificuldades para se destacar no mercado local.
A concorrência é intensa, os clientes ainda são poucos, e a organização das rotas de entrega tem se mostrado ineficiente. Com isso, os recursos disponíveis não estão sendo aproveitados da melhor maneira.
Buscando mudar esse cenário, a FCT Entregas decidiu recorrer à sua equipe especializada em otimização de rotas e soluções logísticas. O desafio é claro: transformar o sistema de entregas da empresa em uma operação eficiente, confiável e capaz de conquistar novos clientes em NP-Completópolis.
O mapa da cidade está repleto de pontos de interesse, que representam desde locais de coleta e entrega de pedidos até potenciais clientes. A missão é criar rotas otimizadas para cada entregador, garantindo que:
Com essas diretrizes, espera-se que a nova estratégia logística proporcione à FCT Entregas uma vantagem competitiva em NP-Completópolis.
Você deve desenvolver um programa que leia a especificação do
desafio, via stdin
, obtenha o plano para a conclusão do
mapa lido, e gere uma saída, via stdout
, no formato
especificado na descrição do trabalho. Caso não encontre um plano,
encerre seu programa com um exit(120)
.
Dado:
Defina as rotas para entregadores, cada um com capacidade máxima , de modo a minimizar a soma total dos custos de viagem de cada entregador, respeitando as restrições mencionadas.
O custo de viagem entre dois pontos é dado por:
Esta seção descreve as várias ferramentas auxiliares disponíveis para resolver o problema. As ferramentas estão organizadas em categorias: planejadores PDDL, planejadores HDDL, SAT-solvers e bibliotecas auxiliares. A localização e a forma de chamada de cada ferramenta estão descritas a seguir.
Para utilizar dos planejadores PDDL, você precisará de um modelo PDDL do problema, criar os arquivos de domínio e problema PDDL correspondentes, chamar o planejador selecionado com os parâmetros corretos. Aqui estão os planejadores PDDL disponíveis:
/home/software/planners/madagascar/{M,Mp,MpC}
./home/software/planners/downward/fast-downward.py
./home/software/planners/downward-fdss23/fast-downward.py
./home/software/planners/scorpion-maidu/fast-downward.py
./home/software/planners/julia/planner.jl
.Para utilizar dos planejadores HDDL, você precisará de um modelo HDDL do problema, crie os arquivos de domínio e problema HDDL correspondentes, chame o planejador selecionado com os parâmetros corretos. Aqui estão os planejadores HDDL disponíveis:
/home/software/planners/panda/panda.jar
./home/software/planners/pandaPI/pandasolver
.Para utilizar dos SAT-solvers, você precisará de uma formulação do problema em forma de CNF (Conjunctive Normal Form). Aqui estão os SAT-solvers disponíveis e como utilizá-los:
/usr/bin/clasp
./usr/bin/cryptominisat
./usr/bin/minisat
.
-lminisat
/usr/bin/minisat+
./usr/bin/packup
./usr/bin/picosat
./usr/bin/sat4j
./usr/bin/z3
Nesta modalidade de classificação, o problema é dividido em três categorias: AGILE, SATISFICING e OPTIMAL. A pontuação é computada da seguinte forma:
: identificador do ponto
, : coordenadas cartesianas
Obs.: O ponto com identificador 0
é
a sede da empresa (ponto onde devem-se iniciar e terminar as
rotas).
Para cada entregador , imprimir:
2 8 2 2
0 150 30
1 400 200
2 200 10
3 48 100
4 150 170
5 42 320
6 200 30
7 400 420
1 1 2
2 5 4
5
3
7
5
4
0
1
2
1293
4
1
2
6
0
1
1
647
Explicação para a saída do exemplo
A saída acima representa as rotas, as entregas feitas e o custo da rota por entregador, neste caso:
Author: Ribas e Arthur Grandão