Sunteți pe pagina 1din 15

Otimização de Tripulações em Ônibus Urbano: Um Método

Híbrido Utilizando Programação com Restrições e Algoritmos


Genéticos
Me. João Ricardo Diniz Amaral
Universidade Estadual de Montes Claros - UNIMONTES
joao@qualitetecnologia.com.br

Prof. Dr. Nilton Alves Maia


Universidade Estadual de Montes Claros - UNIMONTES
nilton.maia@unimontes.com.br

Prof. Dr. Narciso Ferreira dos Santos Neto


Universidade Estadual de Montes Claros - UNIMONTES
narciso_santos1@yahoo.com.br

Abstract
The crew scheduling problem aims to generate workloads from a set of pre-established trips and to schedule a particular crew
to fulfill these trips. Solving the problem consists of the generation of scales with the lowest operational cost possible, taking
into account the different constraints of the problem. Finding the best scale by decreasing the amount of overtime, downtime,
and crew required to meet a planning horizon in an acceptable computational time is a difficult task. The present work had
the objective of proposing a Hybrid Method for Optimization of the Scale of Crews in Urban Bus, using Programming with
Restrictions and Genetic Algorithms. The tests were performed with real operational data from a public transport company in
the city of Montes Claros (MG). The proposed method obtained positive results, generating less costly time scales than those
used by the company.

Keywords: Computational Optimization in Public Transport. Crew Programming Problem. Hybrid Methods.

Resumo
O Problema da Programação de Tripulações objetiva gerar escalas de trabalho a partir de um conjunto de viagens pré-
estabelecidas e escalonar uma determinada tripulação para cumprir estas viagens. Solucionar o problema consiste na geração
de escalas com o menor custo operacional possível, atendendo as diversas restrições do problema. Encontrar a melhor escala,
diminuindo a quantidade de horas extras, tempo ocioso e tripulação necessária para cumprir um horizonte de planejamento
em um tempo computacional aceitável é uma tarefa de difícil solução. O presente trabalho teve por objetivo propor um
Método Híbrido para Otimização da Escala de Tripulações em Ônibus Urbano, utilizando Programação com Restrições e
Algoritmos Genéticos. Os testes foram realizados com dados operacionais reais de uma empresa de transporte público da
cidade de Montes Claros (MG). O método proposto obteve resultados positivos, gerando escalas de jornada menos custosas
do que as utilizadas pela empresa.

Palavras-chave: Métodos Híbridos. Problema da Programação de Tripulações. Otimização Computacional no Transporte


Público.

1. Introdução
O transporte público por ônibus urbano possui diversas Reestruturar uma rede de transporte de passageiros
restrições operacionais conflitantes, sendo uma tarefa considerando todas as variáveis é um problema complexo
difícil encontrar uma solução viável que satisfaça todas as justamente devido à quantidade de variáveis, dificultando
variáveis do cenário. Para analisar um sistema de a compreensão da realidade do sistema. Com a aplicação
transporte de passageiros é importante levar em do método proposto é possível analisar o comportamento
consideração os requisitos de atendimento aos horários destas variáveis, definindo parâmetros específicos e
programados, realização das paradas programadas nos acompanhando o seu comportamento de acordo com o
pontos e atendimento da demanda de passageiros da objetivo pretendido em um ambiente simulado, prevendo
melhor forma, respeitando as restrições de comportamentos e situações que poderiam ocorrer no
disponibilidade da tripulação (motorista e cobrador) e cenário real.
frota. Embora a excelência das redes de infra-estrutura Planejar um sistema de transporte público urbano exige
urbana para fluidez do transporte público seja um fator complexos processos de análise e coordenação tanto do
essencial, aplicar ferramentas de otimização poder público quanto de empresas prestadoras do serviço.
computacional pode possibilitar melhorias do uso dos da Esta metodologia pode ser dividida em fases, conforme
estrutura existente. proposto por CUNHA (2014) e apresentada na Figura 1:
Figura 1 - Interações entre os subsistemas de transporte de passageiros CUNHA (2014).

Uma das fases do processo de planejamento do lugar. Objetiva encontrar um conjunto com uma
transporte público trata do Problema da Programação de sequência de jornadas diárias com menor custo e atenda
Tripulações (PPT). Prates e Silva (2014) afirmam que as necessidades da tabela de horários em um horizonte de
nesta etapa busca-se obter sequências de jornadas diárias, planejamento (CUNHA, 2014). Estas sequências são
compreendendo os dias úteis, sábados e domingos, atribuídas a identificadores genéricos que posteriormente
respeitando às restrições legais e trabalhistas dos são relacionados com funcionários dentro da empresa.
colaboradores. Neste trabalho pretendeu-se desenvolver Cada viagem a ser cumprida por uma tripulação é
um Sistema de Informação para atacar o PPT através da composta por horário de início e final, linha, carro e dia
elaboração de um método de otimização híbrido, de rodagem. Todas estas viagens agrupadas constituem
utilizando Programação com Restrições (PR) e um bloco de viagens do ônibus ou jornadas. Assim pode-
algoritmos genéticos, testado com dados operacionais se prever os horários de partida e chegada do veículo da
reais de uma empresa de transporte público da cidade de garagem bem como o fluxo de tripulação necessário para
Montes Claros (MG). a sua atividade diária.
Para cada veículo é feito um agrupamento de tarefas
2. Problema da Programação de denominadas sequências de viagens consecutivas, as
quais devem ser realizadas por um único condutor visto
Tripulações que não há tempo para troca da tripulação entre elas. O
Programar tripulações consiste no processo de construir conjunto das tarefas que são realizadas por uma
escalas e jornadas de trabalho, satisfazendo necessidades determinada tripulação durante o período de operação
e restrições impostas por empresas e usuários do sistema. diário é denominado jornada. Estas precisam seguir as
CUNHA (2014) afirma que em várias organizações as restrições definidas pela empresa e leis trabalhistas que
pessoas envolvidas no desenvolvimento de rodízios regem os recursos humanos alocados. Dentro do fluxo
precisam de ferramentas de suporte para prover os diário existem as jornadas simples e as jornadas dupla
funcionários corretos nos horários certos. Normalmente pegada. Esta última se diferencia por ser realizada
utiliza-se planilhas, bancos de dados, possíveis quando ocorre com um intervalo entre duas horas ou mais
ferramentas de rodízios, modelos matemáticos e entre uma jornada e outra. Este tipo de jornada é
algoritmos apropriados. Um dos sistemas de necessário para equilíbrio do sistema, aumentando o
planejamento de jornadas é o modelo de escala fixa, onde fluxo de veículos que são utilizados em horários de pico,
tripulações realizam a mesma jornada de trabalho todos normalmente no início da manhã e final da tarde. Neste
os dias. Com este modelo algumas jornadas tendem a ser caso o intervalo entre os dois pedaços de jornada não é
mais atrativas para algumas tripulações. Este modelo é de contabilizado como hora trabalhada. Já nas jornadas
fácil construção porém além de ser custoso para as simples os intervalos entre as tarefas são menores do que
empresas e parcial para os colaboradores, é dispendioso os valores definidos na dupla pegada. As horas extras irão
pois não permite compensação de horas, além de gerar corresponder ao tempo trabalhado além do tempo normal
mau estar entre os funcionários, alguns trabalhando mais (normalmente sete horas e trinta minutos, CLT), mesmo
e outros menos. que sejam jornada simples ou dupla pegada.
O modelo de rodízio de tripulações busca sanar estas O ideal é que todas as tripulações não fiquem ociosas e
questões, distribuindo a carga de trabalho de forma mais trabalhem com um mínimo de horas extras possível. A
equitativa, equilibrando as horas ociosas, dias de folga e composição do custo de uma solução do PPT é obtida
horas extras entre todas as tripulações. Neste modelo através da combinação linear dos custos fixos e variáveis
costuma-se adotar também o padrão de folga variável (a das jornadas, onde os custos fixos decorrem da
cada seis dias consecutivos de trabalho uma folga), remuneração dos tripulantes e os variáveis são
diferentemente do sistema de folga fixa (folgas sempre representados pelas horas extras trabalhadas, tempo
nos mesmos dias), o qual gera sempre horas extras e ocioso e quantidade de duplas pegadas na solução. Para
ociosas para as mesmas tripulações. cada modelo há um limite de duplas pegadas a ser
atingido, visto que algumas tripulações folgam nos
domingos ou definições de restrições trabalhistas onde
2.1 Programação de Tripulações em Ônibus somente um percentual da tripulação pode realizar estas
Urbano jornadas. Desta forma, este tipo de jornada deve ser
Para o planejamento no transporte público urbano por limitado e o modelo adaptado de acordo com as regras
ônibus, as escalas são criadas com base nas tabelas de impostas. A expressão a seguir representa um modelo de
horários. Diferentemente do setor aéreo, as escalas são função objetivo de uma solução para o PPT (SILVA e
menores e também normalmente não se aplica o conceito SILVA, 2015):
de início e fim da jornada ser obrigatório no mesmo

𝐶= 𝐶𝐹 + 𝑊 × ℎ_𝑒𝑥𝑡𝑟𝑎 + 𝑊 × ℎ_𝑜𝑐𝑖𝑜𝑠𝑎 + 𝑊 × 𝐷𝑢𝑝𝑙𝑎_𝑝𝑒𝑔 (1)


Onde:
𝑡𝑜𝑡_𝑗𝑜𝑟𝑛 = total de jornadas da solução.
𝐶𝐹 = remuneração fixa da jornada i.
𝑊 = peso de cada minuto de trabalho extra.
ℎ_𝑒𝑥𝑡𝑟𝑎 = quantidade de horas extras na jornada i em minutos.
𝑊 = peso de cada minuto de tempo ocioso.
ℎ_𝑜𝑐𝑖𝑜𝑠𝑎 = quantidade de horas ociosas na jornada i em minutos.
𝑊 = peso atribuído às duplas pegadas.
𝐷𝑢𝑝𝑙𝑎_𝑝𝑒𝑔 = 1 se a jornada i for do tipo dupla pegada e 0 caso contrário.

2.2 Abordagens Existentes na Literatura abordou o desenvolvimento do simulador de alocação de


tripulações com suas devidas restrições, parâmetros,
O PPT é comumente abordado na literatura com modelos variáveis, funções e algoritmo, que será utilizado pelo
de soluções tanto determinísticas quanto estocásticas. método proposto para obter os resultados pretendidos.
Heurísticas também são aplicadas em casos onde a Trata-se na segunda etapa o método híbrido completo,
quantidade de restrições consideradas é grande, sua forma de funcionamento, restrições, parâmetros,
inviabilizando o tempo computacional para obtenção de variáveis, funções e algoritmo.
soluções exatas. MAYRINK E SILVA (2010) abordam o
problema construindo um sequenciamento de jornadas e a
partir dos dados do primeiro dia do horizonte de 3.1 Restrições Gerais
planejamento é construída uma rede bipartida, resolvendo Devido à quantidade de restrições do problema, gerar
um problema de designação para fazer a alocação do escalas válidas respeitando todas as restrições impostas é
segundo dia do horizonte. O modelo dos autores um processo complexo e custoso. As restrições gerais do
minimiza o total de horas extras compensando-as com problema foram respeitadas em ambas as etapas, sendo:
horas ociosas, sendo que a definição do rodízio mensal,
sem as folgas, é dividida na geração de um rodízio 1) O horizonte de planejamento é iniciado em uma
semanal e a criação do rodízio mensal é feita otimizando segunda feira.
estes rodízios semanais. O modelo nem sempre atinge o 2) Todas as tripulações são alocadas com um intervalo de
ótimo porém obteve soluções melhores do que as descanso de 11 horas entre dias seguidos de jornadas.
utilizadas pela empresa. 3) Cada tripulação folga pelo menos 1 domingo durante o
Já PRATES E SILVA (2014) utilizaram uma solução horizonte de planejamento.
estocástica com a heurística Variable Neighborhood 4) 6 é o número máximo de dias consecutivos de trabalho
Search (VNS) para resolver o PPT de uma empresa de sem folga (sistema de folga variável).
transporte público de médio porte, focando em reduzir o 5) A tripulação que realiza dupla pegada corresponde a
número de tripulações e a quantidade de horas extras ou no máximo 12% da tripulação total disponível.
ociosas que eram pagas pela empresa aos colaboradores. 6) As jornadas são apenas do tipo pegada simples
Eles aplicaram o padrão folga fixo 5/1. Os autores (principal) e dupla pegada (quando necessário).
obtiveram uma redução de até 56% na quantidade de 7) A jornada semanal é de 44 horas.
horas extras e também uma redução da metade do 8) A jornada diária máxima é de 7 horas e 20 minutos.
número de motoristas. MARTINS E SILVA (2015) 9) 2 horas é o máximo de horas extras por dia por
objetivou solucionar o PPT minimizando o total de tripulação.
tripulações e o equilíbrio da carga de trabalho, 10) O intervalo mínimo entre jornadas diárias é de 11
compensando horas extras com horas ociosas das horas
jornadas diárias. Resolveu-se o problema dividindo-o em
duas etapas: na primeira foram definidos os dias de folga
das tripulações e na segunda realiza a alocação das
3.2 Primeira Etapa: Simulador de Alocação de
jornadas executadas pelas tripulações. Tripulações (SAT)
Ambas as etapas foram resolvidas utilizando um AG, O simulador de alocação de tripulações (SAT) foi
segundo os autores na época ainda inédita na literatura desenvolvido utilizando a Programação com Restrições e
brasileira. Os testes se deram com dados reais de uma Programação Linear, objetivando gerar escalas de
empresa de médio porte e gerou resultados melhores do trabalho diárias válidas, alocando as tripulações para o
que a solução adotada pela empresa e muito próximos das cumprimento total das jornadas pré-definidas segundo
soluções exatas apresentadas em trabalhos relacionados. uma tabela de horários, atendendo às restrições impostas.
Não foram encontrados na literatura trabalhos com o Os objetivos do simulador consistem em:
método híbrido utilizado neste trabalho. A abordagem
com AG de MARTINS E SILVA (2015) difere do  Gerar escalas diárias válidas utilizando o mínimo de
método aplicado ao considerar cada indivíduo da sua tripulações.
população um período completo de alocações enquanto o  Minimizar o tempo de processamento para gerar
método proposto usa um AG para refinar a solução uma escala válida para o dia.
encontrada com a PR, buscando otimizar cada dia de  Minimizar a quantidade de horas extras geradas pela
alocações antes de passar para o próximo. tripulação.
 Maximizar o número de duplas pegadas, não
3. Método Proposto ultrapassando o limite permitido para o dia.
O desenvolvimento do modelo proposto passou pela
identificação das restrições gerais do problema e
posteriormente dividido em duas etapas. A primeira
3.3 Parâmetros de Entrada do SAT funcionamento do Algoritmo 1, conforme demonstrado
no Quadro 1:
Os parâmetros de entrada foram abstraídos a partir do
estudo sobre o PPT, considerados necessários para o

Quadro 1 – Parâmetros de entrada para o SAT.


Parâmetro Descrição Valor Padrão
Tempo de execução do algoritmo para geração de um dia
execTime -
de alocações válidas do horizonte de planejamento.
Tempo máximo de trabalho diário de uma tripulação (em
jDiaria 440
minutos).
Porcentagem máxima da tripulação que pode fazer dupla
limDuplaPegada 12%
pegada por dia.
Mínimo de tempo do intervalo entre jornadas em dias
minEntreJornadas 660
diferentes (em minutos).
Limite que falta na jornada para completar com hora extra
limHoraExtra 120
(em minutos).
Máximo de horas extras que uma tripulação pode fazer
maxHoraExtra 120
por dia (em minutos).
Tripulações disponíveis no horizonte de planejamento.
Este número é incrementado automaticamente pelo
qTrip 1
simulador até que atinja um valor válido pra fechamento
do planejamento diário.
Tempo do intervalo entre uma pegada e outra na dupla
tEntrePegadas 60
pegada diária (em minutos).
Tempo mínimo restante na jornada para finalizá-la com
tolerancia 395
uma pegada simples.
(elaborado pelo autor)

3.4 Restrições de Domínio do SAT devendo ser respeitadas a cada alocação de tripulação a
uma jornada. A Função 1 sintetiza todas as restrições de
As restrições de domínio são utilizadas para definir se domínio e será utilizada em cada função objetivo do
uma tripulação candidata pode ou não ser alocada para simulador:
cumprir uma jornada da vez em um dia específico. São de
natureza chave do problema e não podem ser violadas,

𝑎𝑙𝑜𝑐(𝑡𝑟𝑖𝑝, 𝑗𝑜𝑟𝑛, 𝑑𝑖𝑎) (2)

Sujeito a:
𝑡𝑟𝑖𝑝 = 𝑗𝑜𝑟𝑛 (2.1)
𝑡𝑟𝑖𝑝 <> ø (2.2)
𝑡𝑟𝑖𝑝 > 𝑗𝑜𝑟𝑛 ∨ 𝑗𝑜𝑟𝑛 ≤ 𝑗𝑜𝑟𝑛 (2.3)
𝑡𝑟𝑖𝑝 𝐹𝑖𝑛 + 𝑚𝑖𝑛𝐸𝑛𝑡𝑟𝑒𝐽𝑜𝑟𝑛𝑎𝑑𝑎𝑠 < 𝑗𝑜𝑟𝑛 (2.4)
𝑡𝑟𝑖𝑝 = 𝑓𝑎𝑙𝑠𝑒 (2.5)
𝑡𝑟𝑖𝑝 < 6 (2.6)
𝑡𝑟𝑖𝑝 > 𝑗𝑜𝑟𝑛 ∨ 𝑗𝑜𝑟𝑛 ≤ 𝑗𝑜𝑟𝑛 (2.7)
𝑗𝑜𝑟𝑛 ≤ 𝑡𝑟𝑖𝑝 − 𝑡𝐸𝑛𝑡𝑟𝑒𝑃𝑒𝑔𝑎𝑑𝑎𝑠 (2.8)
𝑗𝑜𝑟𝑛 ≥ 𝑡𝑟𝑖𝑝 + 𝑡𝐸𝑛𝑡𝑟𝑒𝑃𝑒𝑔𝑎𝑑𝑎𝑠 (2.9)
𝑡𝑟𝑖𝑝 > 𝑗𝑜𝑟𝑛 (2.10)
𝑞𝐷𝑢𝑝𝑙𝑎𝑃𝑒𝑔𝑎𝑑𝑎 ≤ 𝑙𝑖𝑚𝐷𝑢𝑝𝑙𝑎𝑃𝑒𝑔𝑎𝑑𝑎 (2.11)
𝑡𝑟𝑖𝑝 ≤ 𝑚𝑎𝑥𝐻𝑜𝑟𝑎𝐸𝑥𝑡𝑟𝑎 (2.12)

Em (1) é feita a alocação de uma tripulação a uma A restrição (2.5) confirma se a tripulação candidata não
jornada em um dia. A restrição (2.1) assegura que a está de folga naquele dia e a (2.6) se a tripulação ainda
tripulação candidata seja alocada no mesmo dia que a não trabalhou seis dias consecutivos para ganhar folga.
jornada da vez. Já a restrição (2.2) verifica se a tripulação Trata-se na restrição (2.7) de assegurar que o tempo
ainda possui espaço disponível para alocação. Na ocupado de alocação da tripulação candidata na jornada
restrição (2.3) certifica-se que o tempo disponível da da vez seja maior que o tempo médio de viagens da
tripulação candidata seja maior que o tempo médio das jornada ou que o tempo restante da jornada seja menor ou
viagens da jornada da vez ou que o tempo restante da igual ao tempo médio de viagens da mesma. Nas
jornada da vez seja menor que o tempo médio das duas condições (2.8) e (2.9), caso haja dupla pegada, garante-
viagens. A restrição (2.4) garante que a última jornada se que não há conflitos entre a última alocação da
alocada da tripulação candidata no dia anterior somado ao tripulação candidata mais tempo entre pegadas com o
tempo mínimo entre jornadas seja inferior ao horário início da jornada da vez.
inicial da jornada da vez. Trata-se na restrição (2.10) caso haja dupla pegada, de
assegurar que o tempo ocupado pela segunda alocação da
tripulação candidata na jornada da vez seja maior que o extrapolando a quantidade de duplas pegadas permitida
tempo médio de viagens da jornada ou que o tempo por dia. Na restrição (2.12)
12) certifica-se
certifica que a tripulação
restante da jornada seja menor ou igual ao tempo médio candidata não
ão extrapolou o limite de horas extras fixado.
de viagens da mesma. Tem-se se na restrição ((2.11) caso A Figura 2 representa o método utilizado para realizar
haja dupla pegada, a garantia de que não se está a alocação de uma tripulação à uma jornada.

Figura 2 – Alocação de uma tripulação à uma jornada (elaborado pelo au


autor).
tor).

3.5 Restrições de Desempenho do SAT das jornadas, tendo efeito diretamente nas metas de
minimização pretendidas. O Quadro 2 define cada
As restrições de desempenho foram adicionadas restrição e o seu impacto no método.
objetivando otimizar o resultado do processamento diário

Quadro 2 – Restrições de desempenho


Restrição Descrição Objetivo
Pré-processar
processar o arquivo de jornadas, ordenando
ordenando-as em linhas / carros /
1. min(execTime)
duração (maior para menor).
Categorizar as jornadas sequencialmente em alocação normal / alocação
2. min(execTime)
invertida.
Preencher os tempos nas jornadas que são iguais ou maiores que o tempo
3. min(qTrip)
disponível de alocação diário de cada tr tripulação com pegada simples.
Preencher os tempos nas jornadas que são maiores que o tempo
4. disponível de alocação diário de cada tripulação menos o tempo de min(qTrip)
tolerância com pegada simples.
Finalizar as jornadas com tempo restante menor ou igual ao limite de
5. hora extra diário para cada tripulação com horas extra da tripulação já min(tExtra1+tExtra2)
alocada para esta jornada.
Trocar na tabela de alocações as tripulações que foram alocadas como
pegada simples e não tem eescalação no dia anterior por tripulações que
6. min(qTrip)
possuem escala no dia anterior e os horários não conflitam com a
escalação do dia atual pra facilitar as duplas pegadas.
Preencher o limite máximo de duplas pegadas com a mesma tripulação,
em uma jornada normal e outra invertida, fechando o tempo restante da max(qDupla)
7.
primeira jornada e deixando o mínimo possível de tempo restante na min(qTrip)
segunda jornada.
(elaborado pelo autor)

No procedimento de alocação invertida, ao invés da Não foram encontrados métodos semelhantes a este na
jornada ser alocada em tempo sequencial crescente a literatura e mostrou-se
se funcional também para minimizar
alocação é feita em tempo sequencial decrescente em o tempo de processamento do SAT, visto que prioriza o
jornadas alternadas, diminuindo assim a quantidade de preenchimento das jornadas com o tempo sequencial
conflitos entre horários de uma mesma tripulação e completo das tripulações e posteriormente faz o
facilitando a ocorrência
corrência das duplas pegadas, co
conforme processamento das duplas pegadas apenas nos horários
ilustrado na Figura 3. fracionados pendentes para finalização de cada jornada.
Figura 3 – Exemplo de alocação invertida (elaborado pelo autor).

3.6 Alocação de uma Tripulação com Pegada jornadas que são caracterizadas com pegada simples,
Simples buscando utilizar ao máximo o tempo de trabalho de uma
tripulação no dia.
Para alocar uma tripulação com pegada simples, o
algoritmo faz primeiramente o escalonamento das

𝑀𝑖𝑛 (𝑡𝑟𝑖𝑝 (𝑎𝑙𝑜𝑐(𝑡𝑟𝑖𝑝, 𝑗𝑜𝑟𝑛, 𝑑𝑖𝑎)) (3)

Sujeito a:
𝑡𝑟𝑖𝑝 =Ø (3.1)
𝑗𝑜𝑟𝑛 ≥ jDiaria (3.2)
𝑗𝑜𝑟𝑛 ≥ tolerancia (3.3)

Em (3) busca-se diminuir ao máximo o tempo ocioso 3.7 Alocação de uma Mesma Tripulação com
restante da tripulação candidata à alocação. (3.1) Pegada Dupla
certifica-se que a tripulação ainda não foi alocada para
nenhuma jornada. A restrição (3.2) garante que o tempo Caso não consiga fechar o tempo integral da jornada com
de alocação na jornada seja igual ao tempo integral alocações com pegada simples (Função 3), o SAT parte
disponível da tripulação candidata (pegada simples). Já para a alocação de uma mesma tripulação com pegada
em (3.3) permite-se que seja feita a alocação daquela dupla, lidando com o restante das jornadas ainda não
jornada como pegada simples embora o tempo integral alocadas, que são fracionadas, onde os tempos são
disponível da tripulação não seja utilizado mediante a menores que os períodos diários integrais das tripulações,
variação de tolerância. diminuindo ao máximo o tempo restante para alocação
em cada jornada.

𝑀𝑖𝑛 (𝑗𝑜𝑟𝑛𝐴 , 𝑗𝑜𝑟𝑛𝐵 (𝑎𝑙𝑜𝑐(𝑡𝑟𝑖𝑝, 𝑗𝑜𝑟𝑛𝐴, 𝑑𝑖𝑎)𝑎𝑙𝑜𝑐(𝑡𝑟𝑖𝑝, 𝑗𝑜𝑟𝑛𝐵, 𝑑𝑖𝑎)) (4)

Sujeito a:
𝑡𝑟𝑖𝑝 =Ø (4.1)
𝑡𝑟𝑖𝑝 =Ø (4.2)
𝑗𝑜𝑟𝑛𝐴 + 𝑗𝑜𝑟𝑛𝐵 ≤ jDiaria (4.3)

Em (4) ocorre a alocação de duas jornadas para uma 3.8 Alocação de Tripulações Distintas com
mesma tripulação, diminuindo ao máximo o tempo Pegada Dupla
restante para alocação em cada jornada. Em (4.1) e (4.2)
garante-se que a tripulação candidata ainda não foi Caso ainda não tenha sido possível finalizar a alocação da
escalada para pegadas simples ou duplas. (4.3) busca jornada, ocorre a alocação de uma tripulação distinta com
garantir que a soma dos tempos restantes das jornadas a pegada dupla, respeitando o limite de duplas pegadas
serem alocadas não seja superior ao limite diário de para o dia, maximizando a ocorrência de duplas pegadas
trabalho possível para a tripulação candidata. possível para o dia.
𝑀𝑎𝑥 𝑞𝐷𝑢𝑝𝑙𝑎(𝑎𝑙𝑜𝑐(𝑡𝑟𝑖𝑝𝐴, 𝑗𝑜𝑟𝑛, 𝑑𝑖𝑎), 𝑎𝑙𝑜𝑐(𝑡𝑟𝑖𝑝𝐵, 𝑗𝑜𝑟𝑛, 𝑑𝑖𝑎)) (5)

Sujeito a:
𝑡𝑟𝑖𝑝 <> Ø (5.1)
𝑡𝑟𝑖𝑝 =Ø (5.2)
𝑗𝑜𝑟𝑛 ≤ 𝑡𝑟𝑖𝑝 (5.3)

Em (5) busca-se maximizar a quantidade de duplas 3.9 Alocação completa para Um Dia
pegadas possível para o dia, dentro do limite permitido.
As restrições (5.1) e (5.2) garantem que a tripulação Por fim, ocorre o processamento completo de um dia de
candidata só foi escalada para uma pegada simples e jornadas, o qual consiste em alocar todas as jornadas
ainda possui espaço para uma pegada dupla. (5.3) busca daquele dia às tripulações candidatas, respeitando as
garantir que o tempo restante a ser alocado na jornada da restrições de domínio do problema, até que não sobre
vez não seja superior ao tempo disponível para alocação tempo restante nas jornadas para ser alocado, buscando
na tripulação candidata. utilizar o mínimo de tripulações possível.

𝑀𝑖𝑛 𝑞𝑇𝑟𝑖𝑝 (𝑇, 𝐽, 𝑑𝑖𝑎) (6)

Sujeito a:
∀ 𝑗 ∈ 𝐽: 𝑎𝑙𝑜𝑐(𝑡𝑟𝑖𝑝, 𝑗, 𝑑𝑖𝑎) (6.1)
∀ 𝑗 ∈ 𝐽: 𝑗 > 0 (6.2)

Onde:
𝑇 = conjunto de tripulações disponível para o dia.
𝑗 = uma jornada.
𝐽 = conjunto de todas as jornadas a serem cumpridas no dia.

Em (6) busca-se cumprir integralmente um dia de 3.10 Tempo de Execução para Um Dia
jornadas alocando o mínimo de tripulações necessário. Já
em (6.1) ocorre o procedimento de alocação de jornadas Após realizar a alocação completa para um dia de
para cada jornada do dia. Em (6.2) garante que todas as jornadas, é possível avaliar o tempo de execução gasto
jornadas do dia foram alocadas em sua totalidade, sem para gerar a escala do dia correspondente.
tempo restante pendente.

100
𝑡𝑝𝐷𝑖𝑎 = ∗ 𝑒𝑥𝑒𝑐𝑇𝑖𝑚𝑒(𝑇, 𝐽, 𝑑𝑖𝑎) (7)
𝑞𝑇𝑟𝑖𝑝

Sujeito a:
𝑞𝑇𝑟𝑖𝑝 ≥ 1 (7.1)
∀ 𝑗 ∈ 𝐽: 𝑎𝑙𝑜𝑐(𝑡𝑟𝑖𝑝, 𝑗, 𝑑𝑖𝑎) (7.2)
∀ 𝑗 ∈ 𝐽: 𝑗 > 0 (7.3)

Onde:
𝑡𝑝𝐷𝑖𝑎 = tempo de execução para alocar um dia de jornadas.
𝑇 = conjunto de tripulações disponível para o dia.
𝑞𝑇𝑟𝑖𝑝 = quantidade de tripulação utilizada para escalonar o dia.
𝑒𝑥𝑒𝑐𝑇𝑖𝑚𝑒 = tempo de processamento do algoritmo para geração da alocação completa
para o dia.
𝑗 = uma jornada.
𝐽 = conjunto de todas as jornadas a serem cumpridas no dia.

Em (7) avalia-se o tempo de execução necessário para 3.11 Tempo de Execução para Um Horizonte de
um dia de alocação de jornadas, avaliando o tempo gasto Planejamento
para gerar um dia de planejamento completo. (7.1) exige
que a quantidade de tripulações seja maior que zero. Em A partir do resultado da Função 7, é possível calcular
(7.2) realiza-se o procedimento de alocação de jornadas para cada dia do horizonte de planejamento o tempo de
para cada jornada do dia. (7.3) garante que todas as execução total do algoritmo, conforme a Função 8:
jornadas do dia foram alocadas em sua totalidade, sem
tempo restante pendente.
𝑡𝑝𝑇𝑜𝑡𝑎𝑙 = 𝑡𝑝𝐷𝑖𝑎
(8)

Sujeito a:
𝑞𝐷𝑖𝑎𝑠 ≥ 1 (8.1)

Onde:
𝑡𝑝𝑇𝑜𝑡𝑎𝑙 = tempo de execução para alocar todas as jornadas em todos os dias no horizonte
de planejamento.
𝑡𝑝𝐷𝑖𝑎 = tempo de execução para alocar um dia de jornadas.

Em (8) busca-se avaliar o tempo gasto para gerar um 3.12 Algoritmo da Primeira Etapa
horizonte de planejamento completo válido. (8.1) exige
que a quantidade de dias do horizonte de planejamento Conforme a modelagem elucidada, foi criado o
seja no mínimo 1. Simulador de Alocação de Tripulações (SAT), como
pode ser conferido no Algoritmo 1:

Algoritmo 1: processaDia(trip,jDia,dia)
Retorno: uma matriz válida preenchida com horários de alocação de tripulações para um dia de jornadas, respeitando
as restrições de domínio e com todas as Restrições de Desempenho ativadas.

INÍCIO
1 𝑎𝑙𝑜𝑐𝑎𝑐𝑜𝑒𝑠𝑆𝑖𝑚𝑝𝑙𝑒𝑠(𝑗𝐷𝑖𝑎, 𝑡𝑟𝑖𝑝, 𝑑𝑖𝑎)
2 𝑡𝑟𝑜𝑐𝑎𝐴𝑙𝑜𝑐𝑎𝑐𝑜𝑒𝑠(𝑗𝐷𝑖𝑎, 𝑡𝑟𝑖𝑝, 𝑑𝑖𝑎)
3 𝑎𝑙𝑜𝑐𝑎𝑐𝑜𝑒𝑠𝐷𝑢𝑝𝑙𝑎𝑠(𝑗𝐷𝑖𝑎, 𝑡𝑟𝑖𝑝, 𝑑𝑖𝑎)
4 𝑆𝑒 𝑗𝑜𝑟𝑛𝑃𝑒𝑛𝑑𝑒𝑛𝑡𝑒(𝑗𝐷𝑖𝑎) ≥ 2) 𝑒 (𝑞𝐷𝑢𝑝𝑙𝑎(𝑡𝑟𝑖𝑝, 𝑑𝑖𝑎) < 𝑙𝑖𝑚𝐷𝑢𝑝𝑙𝑎𝑃𝑒𝑔𝑎𝑑𝑎
5 𝑜𝑟𝑑𝑒𝑛𝑎𝐽𝑜𝑟𝑛𝑎𝑑𝑎𝑠𝐶𝑜𝑑(𝑗𝐷𝑖𝑎)
6 𝑟𝑒𝑓𝑎𝑧𝐴𝑙𝑡𝑒𝑟𝑛𝑎𝑐𝑎𝑜(𝑗𝐷𝑖𝑎, 𝑡𝑟𝑖𝑝, 𝑑𝑖𝑎)
7 𝑎𝑙𝑜𝑐𝑎𝑐𝑜𝑒𝑠𝑆𝑖𝑚𝑝𝑙𝑒𝑠(𝑗𝐷𝑖𝑎, 𝑡𝑟𝑖𝑝, 𝑑𝑖𝑎);
8 𝑡𝑟𝑜𝑐𝑎𝐴𝑙𝑜𝑐𝑎𝑐𝑜𝑒𝑠(𝑗𝐷𝑖𝑎, 𝑡𝑟𝑖𝑝, 𝑑𝑖𝑎)
9 𝑎𝑙𝑜𝑐𝑎𝑐𝑜𝑒𝑠𝐷𝑢𝑝𝑙𝑎𝑠(𝑗𝐷𝑖𝑎, 𝑡𝑟𝑖𝑝, 𝑑𝑖𝑎)
11 𝑺𝒆 𝑗𝑜𝑟𝑛𝑃𝑒𝑛𝑑𝑒𝑛𝑡𝑒(𝑗𝐷𝑖𝑎) > 0
12 𝑓𝑖𝑛𝑎𝑙𝑖𝑧𝑎𝐷𝑖𝑎(𝑗𝐷𝑖𝑎, 𝑡𝑟𝑖𝑝, 𝑑𝑖𝑎)
13 𝑺𝒆 𝑗𝑜𝑟𝑛𝑃𝑒𝑛𝑑𝑒𝑛𝑡𝑒(𝑗𝐷𝑖𝑎) > 0
14 𝑎𝑢𝑚𝑒𝑛𝑡𝑎𝑇𝑟𝑖𝑝(𝑞𝑇𝑟𝑖𝑝)
15 𝑟𝑒𝑖𝑛𝑖𝑐𝑖𝑎
16 𝑺𝒆𝒏ã𝒐
17 𝑹𝒆𝒕𝒐𝒓𝒏𝒂 𝑡𝑟𝑖𝑝
FIM
(elaborado pelo autor)

3.13 Segunda Etapa: Algoritmo Genético as tripulações são processadas no SAT a cada dia, visto
Aplicado ao SAT (Método Híbrido) que a posição em que cada tripulação é processada e
escalonada por dia resulta em diferentes soluções.
O método utilizado na primeira etapa desta pesquisa Explorar a quantidade total de combinações possíveis no
resulta em uma solução determinística, com um modelo com uma solução exata se mostrou
Simulador de Alocação de Tripulações que gera uma computacionalmente inviável. A Função 9 representa a
solução válida para um horizonte de planejamento, porém quantidade de combinações possíveis:
a qualidade da solução obtida depende da ordem em que

𝑞𝑇𝑟𝑖𝑝! (9)

De acordo com a quantidade de dias do horizonte de diversos problemas que são naturalmente representados
planejamento e a quantidade de tripulações, o espaço de por permutações. Sendo o Problema da Programação de
busca de combinações possível cresce exponencialmente. Tripulações um deles, o qual pode ser abordado como um
Para um horizonte de planejamento como a média problema de sequenciamento de tarefas relacionadas. Os
utilizada na literatura de 49 dias (7 semanas), dependendo objetivos desta etapa se aplicam a cada dia do horizonte
da quantidade de tripulações utilizada a quantidade de de planejamento completo, buscando otimizá-lo ainda
combinações possível é absurda. mais. São eles:
Sendo assim optou-se por complementar o método
acrescentando uma heurística de otimização estocástica,  Minimizar o tempo ocioso e quantidade de
aplicando um Algoritmo Genético utilizando codificação tripulação necessários para cumprir o horizonte de
por permutação e combinado com o simulador planejamento.
desenvolvido. ZUBEN (2000) reforça que existem
 Equilibrar a distribuição das horas extras, ociosas e correspondem a soluções válidas. Os indivíduos que não
dos dias trabalhados pelas tripulações. geram soluções válidas são automaticamente descartados.

No problema abordado é dada uma quantidade de 3.14 Operadores Genéticos


tripulações e uma rotina diária de horários que devem ser
cumpridos, sendo que dentre as diversas restrições estão  Seleção: torneio modificado, escolhendo três
horários que não podem conflitar entre eles. De acordo candidatos aleatórios na população para o torneio e
com a escala de trabalho de uma determinada tripulação pegando os dois melhores para reprodução.
em um dia determinado, o seu comportamento durante o  Cruzamento: adaptado do modelo padrão de um
restante do horizonte de planejamento irá variar, bem ponto de corte proposto, porém este ponto é gerado
como a quantidade de horas extras e ociosas geradas para aleatoriamente a cada cruzamento.
aquela tripulação e para o modelo em geral. Na  Mutação: foi utilizada uma combinação de dois dos
codificação por permutação, cada cromossomo é uma operadores recomendados para problemas de
série de números que representa uma sequência, neste permutação, selecionando uma porção aleatória dos
trabalho relacionada ao código identificador de cada genes e misturando-se a ordem da porção
tripulação. Utilizou-se nesta pesquisa a abordagem de selecionada.
Pittsburgh onde cada elemento da população corresponde
a uma solução do problema (ZUBEN, 2000). O autor 3.15 Aptidão de uma Solução
reforça que esta codificação é recomendada na solução de
problemas de permutação e ordenação. O AG é aplicado a cada dia do horizonte de planejamento
Em alguns tipos de cruzamentos e mutações por gerado pelo SAT demonstrado no Algoritmo 1, antes do
permutação, são necessárias correções para que os processamento do próximo dia, testando
cromossomos fiquem consistentes. Cada indivíduo sistematicamente as opções de combinações possíveis e
gerado é reprocessado no SAT, garantindo que mantendo o melhor resultado diário obtido, conforme a
Função 10:

100 100
𝑀𝑖𝑛 𝑔 = 𝑡𝑑𝑖𝑠𝑝 ∗ + 𝑡𝐸𝑥𝑡𝑟𝑎 ∗
𝑡𝑑𝑖𝑠𝑝𝑡𝑜𝑡 𝑡𝑒𝑥𝑡𝑟𝑎𝑡𝑜𝑡 (10)

Sujeito a:
g∈𝐺 (10.1)

Onde:
𝐺 = conjunto de soluções válidas para um dia de alocação.
𝑞𝑇𝑟𝑖𝑝 = quantidade de tripulação utilizada.
𝑡𝐷𝑖𝑠𝑝 = tempo disponível de cada tripulação.
𝑡𝐷𝑖𝑠𝑝𝑇𝑜𝑡 = tempo disponível total da tripulação.
𝑡𝐸𝑥𝑡𝑟𝑎 = horas extras realizadas por cada tripulação.
𝑡𝐸𝑥𝑡𝑟𝑎𝑇𝑜𝑡 = horas extras totais da tripulação.

O algoritmo genético também equilibra a quantidade 3.16 Algoritmo da Segunda Etapa: Método
de dias trabalhados e folgas entre a tripulação no final do Híbrido Completo
processamento do horizonte de planejamento através da
realização do rodízio das tripulações escalonadas. Conforme proposto nesta pesquisa, foi criado o método
híbrido completo, incorporando o algoritmo genético
proposto ao Algoritmo 1, como segue:

Algoritmo 2: otimizaEscala(trip,jDia,escala)
Retorno: a melhor matriz válida atingida para o dia, de acordo com a Função 10, preenchida com horários de
alocação de tripulações para um dia de jornadas, respeitando as restrições de domínio e com todas as Restrições de
Desempenho ativadas.

INÍCIO
1 𝑒𝑠𝑐𝑎𝑙𝑎𝑠 ← 𝑖𝑛𝑖𝑐𝑖𝑎𝑙𝑖𝑧𝑎𝐸𝑠𝑐𝑎𝑙𝑎(𝑑𝑎𝑡𝑎𝐼𝑛𝑖𝑐𝑖𝑜, 𝑞𝐷𝑖𝑎𝑠)
2 𝑡𝑟𝑖𝑝 ← 𝑖𝑛𝑖𝑐𝑖𝑎𝑙𝑖𝑧𝑎𝑇𝑟𝑖𝑝(𝑒𝑠𝑐𝑎𝑙𝑎)
3 𝑡𝑜𝑑𝑎𝑠𝐽𝑜𝑟𝑛𝑎𝑑𝑎𝑠 ← 𝑐𝑎𝑟𝑟𝑒𝑔𝑎𝐽𝑜𝑟𝑛𝑎𝑑𝑎𝑠()
4 𝑡𝑜𝑑𝑎𝑠𝐽𝑜𝑟𝑛𝑎𝑑𝑎𝑠 ← 𝑒𝑠𝑡𝑟𝑢𝑡𝑢𝑟𝑎𝐽𝑜𝑟𝑛𝑎𝑑𝑎𝑠(𝑡𝑜𝑑𝑎𝑠𝐽𝑜𝑟𝑛𝑎𝑑𝑎𝑠)
5 𝑡𝑜𝑑𝑎𝑠𝐽𝑜𝑟𝑛𝑎𝑑𝑎𝑠 ← 𝑎𝑙𝑜𝑐𝑎𝑐𝑎𝑜𝐴𝑙𝑡𝑒𝑟𝑛𝑎𝑑𝑎(𝑡𝑜𝑑𝑎𝑠𝐽𝑜𝑟𝑛𝑎𝑑𝑎𝑠)
6 𝒑𝒂𝒓𝒂 𝒄𝒂𝒅𝒂 𝑑𝑖𝑎 𝒆𝒎 𝑒𝑠𝑐𝑎𝑙𝑎𝑠 𝒇𝒂ç𝒂
7 𝑡𝑟𝑖𝑝 ← 𝑒𝑠𝑐𝑎𝑙𝑎𝐷𝑜𝐷𝑖𝑎(𝑡𝑟𝑖𝑝, 𝑑𝑖𝑎)
8 𝑗𝑜𝑟𝑛 ← 𝑔𝑒𝑡𝐽𝑜𝑟𝑛𝑎𝑑𝑎𝑠(𝑡𝑜𝑑𝑎𝑠𝐽𝑜𝑟𝑛𝑎𝑑𝑎𝑠, 𝑑𝑖𝑎)
9 𝒑𝒂𝒓𝒂 𝒄𝒂𝒅𝒂 𝑔𝑒𝑟𝑎𝑐𝑎𝑜 𝒆𝒎 𝑔𝑒𝑟𝑎𝑐𝑜𝑒𝑠 𝒇𝒂ç𝒂
10 𝑝𝑜𝑝[ ] ← Ø
11 𝑺𝒆 𝑒𝑙𝑖𝑡𝑖𝑠𝑚𝑜 𝒆 𝑚𝑒𝑙ℎ𝑜𝑟 <> Ø
12 𝑝𝑜𝑝[ ] ← 𝑚𝑒𝑙ℎ𝑜𝑟
13 𝒆𝒏𝒒𝒖𝒂𝒏𝒕𝒐 𝑝𝑜𝑝𝑢𝑙𝑎𝑐𝑎𝑜 < 𝑡𝑎𝑚𝑃𝑜𝑝𝑢𝑙𝑎𝑐𝑎𝑜 𝒇𝒂ç𝒂
14 𝑡𝑟𝑖𝑝𝑇𝑒𝑚𝑝 ← 𝑔𝑒𝑟𝑎𝐼𝑛𝑑𝑖𝑣𝑖𝑑𝐴𝑙𝑒𝑎𝑡(𝑡𝑟𝑖𝑝, 𝑞𝑇𝑟𝑖𝑝)
15 𝑗𝐷𝑖𝑎𝑇𝑒𝑚𝑝 ← 𝑗𝑜𝑟𝑛
16 𝑺𝒆 𝑝𝑟𝑜𝑐𝑒𝑠𝑠𝑎𝐷𝑖𝑎(𝑡𝑟𝑖𝑝𝑇𝑒𝑚𝑝, 𝑗𝐷𝑖𝑎𝑇𝑒𝑚𝑝, 𝑑𝑖𝑎)
17 𝑖𝑛𝑑𝑖𝑣 ← Ø
18 𝑖𝑛𝑑𝑖𝑣[𝑓𝑖𝑡𝑛𝑒𝑠𝑠] ← 𝑎𝑣𝑎𝑙𝑖𝑎(𝑡𝑟𝑖𝑝𝑇𝑒𝑚𝑝)
19 𝑖𝑛𝑑𝑖𝑣[𝑔𝑒𝑛𝑒𝑠] ← 𝑠𝑒𝑞(𝑡𝑟𝑖𝑝𝑇𝑒𝑚𝑝)
20 𝑖𝑛𝑑𝑖𝑣[𝑡𝑟𝑖𝑝] ← 𝑡𝑟𝑖𝑝𝑇𝑒𝑚𝑝
21 𝑖𝑛𝑑𝑖𝑣[𝑗𝐷𝑖𝑎] ← 𝑗𝐷𝑖𝑎𝑇𝑒𝑚𝑝
22 𝑝𝑜𝑝[ ] ← 𝑖𝑛𝑑𝑖𝑣
23 𝑝𝑎𝑖𝑠 ← 𝑠𝑒𝑙𝑒𝑐𝑎𝑜(𝑝𝑜𝑝)
24 𝑺𝒆 𝑟𝑎𝑛𝑑(0.1,100) ≤ 𝑡𝑥𝐶𝑟𝑢𝑧
25 𝑓𝑖𝑙ℎ𝑜 ← 𝑐𝑟𝑢𝑧𝑎𝑚𝑒𝑛𝑡𝑜(𝑝𝑎𝑖𝑠)
26 𝑺𝒆 𝑟𝑎𝑛𝑑(0.1,100) ≤ 𝑡𝑥𝑀𝑢𝑡
27 𝑓𝑖𝑙ℎ𝑜 ← 𝑚𝑢𝑡𝑎𝑐𝑎𝑜(𝑓𝑖𝑙ℎ𝑜, 𝑞𝑇𝑟𝑖𝑝)
28 𝑺𝒆 𝑓𝑖𝑙ℎ𝑜
29 𝑡𝑟𝑖𝑝𝑇𝑒𝑚𝑝 ← 𝑓𝑖𝑙ℎ𝑜[𝑡𝑟𝑖𝑝]
30 𝑗𝐷𝑖𝑎𝑇𝑒𝑚𝑝 ← 𝑗𝑜𝑟𝑛
31 𝑺𝒆 𝑝𝑟𝑜𝑐𝑒𝑠𝑠𝑎𝐷𝑖𝑎(𝑡𝑟𝑖𝑝𝑇𝑒𝑚𝑝, 𝑗𝐷𝑖𝑎𝑇𝑒𝑚𝑝, 𝑑𝑖𝑎)
32 𝑖𝑛𝑑𝑖𝑣 ← Ø
33 𝑖𝑛𝑑𝑖𝑣[𝑓𝑖𝑡𝑛𝑒𝑠𝑠] ← 𝑎𝑣𝑎𝑙𝑖𝑎(𝑡𝑟𝑖𝑝𝑇𝑒𝑚𝑝)
34 𝑖𝑛𝑑𝑖𝑣[𝑔𝑒𝑛𝑒𝑠] ← 𝑠𝑒𝑞(𝑡𝑟𝑖𝑝𝑇𝑒𝑚𝑝)
35 𝑖𝑛𝑑𝑖𝑣[𝑡𝑟𝑖𝑝] ← 𝑡𝑟𝑖𝑝𝑇𝑒𝑚𝑝
36 𝑖𝑛𝑑𝑖𝑣[𝑗𝐷𝑖𝑎] ← 𝑗𝐷𝑖𝑎𝑇𝑒𝑚𝑝
37 𝑝𝑜𝑝[ ] ← 𝑖𝑛𝑑𝑖𝑣
38 𝑚𝑒𝑙ℎ𝑜𝑟 ← 𝑏𝑒𝑠𝑡(𝑝𝑜𝑝)
39 𝑡𝑟𝑖𝑝 ← 𝑚𝑒𝑙ℎ𝑜𝑟[𝑡𝑟𝑖𝑝]
40 𝑗𝐷𝑖𝑎 ← 𝑚𝑒𝑙ℎ𝑜𝑟(𝑗𝐷𝑖𝑎)
41 𝑡𝑟𝑖𝑝 ← 𝑎𝑡𝑢𝑎𝑙𝑖𝑧𝑎𝑇𝑟𝑖𝑝(𝑡𝑟𝑖𝑝)
42 𝑗𝐷𝑖𝑎 ← 𝑜𝑟𝑑𝑒𝑛𝑎𝐽𝑜𝑟𝑛𝑎𝑑𝑎𝑠𝐶𝑜𝑑(𝑗𝐷𝑖𝑎)
43 𝑎𝑡𝑢𝑎𝑙𝑖𝑧𝑎𝐽𝑜𝑟𝑛𝑎𝑑𝑎𝑠(𝑡𝑜𝑑𝑎𝑠𝐽𝑜𝑟𝑛𝑎𝑑𝑎𝑠)
44 𝒓𝒆𝒕𝒐𝒓𝒏𝒂 𝑡𝑟𝑖𝑝
FIM
(elaborado pelo autor)

4 Resultados Obtidos de Montes Claros (MG). Na Tabela 1 tem-se as


características do banco de dados de jornadas utilizado
Para o processamento e execução do método foi nos testes:
necessária uma base de dados funcional de jornadas,
cedida por uma empresa de Transporte Público da cidade

Tabela 1 – Quantidades totais de jornadas utilizadas nos testes.


Dia Jornadas Linhas Carros Duração (horas)
Dias úteis 325 18 64 5.160
Sábado 53 17 50 724
Domingo 30 18 30 453
TOTAL 408 53 144 6337
Arquivo de jornadas (empresa de transporte público urbano de Montes Claros, 2017).

4.1 Desempenho do Simulador de Alocação de uma das restrições foi possível analisar o comportamento
Tripulações SAT (Algoritmo 1) dos resultados obtidos e comprovado que todas as
restrições ativadas são importantes para se obter o melhor
Os testes foram realizados baseando-se nas restrições de valor da função objetivo.
desempenho, descritas no Quadro 2, avaliando o Nota-se na Tabela 2 que a medida que cada restrição de
desempenho do Algoritmo 1 de acordo com a retirada de desempenho do Quadro 2 foi sendo desativada os
cada restrição, denotando a sua importância para a resultados obtidos variaram, piorando cada vez mais com
qualidade dos resultados obtidos. a retirada de cada restrição e melhorando
O horizonte de planejamento utilizado nos testes significativamente com todas as restrições ativadas, com
conforme os trabalhos relacionados na área foi de 49 dias. o melhor resultado na primeira linha.
Foi utilizada a Função Objetivo 8 (tempo de execução
para um horizonte de planejamento). Ao remover cada
Tabela 2 – Desempenho do Simulador de Alocação de Tripulações
Restrição Média de
F.O.
de Q. Horas Horas Dupla trip. não Tempo de
Q. escalas. (Função
desempenho trip. extras ociosas pegada utilizada process.
8)
desativada p/ dia
Nenhuma 161 650h04 973h06 847/931 6048/6762 38/161 24,69s 9,62
6 186 650h04 1154h26 847/1078 6048/7812 63/186 23,32s 12,54
3 202 263h05 6744h07 0/1176 6874/8484 62/202 35,31s 17,48
1 162 645h03 969h35 833/931 6048/6804 39/162 29,65s 18,30
5 175 0h 2983h02 945/1029 6405/7350 44/175 52,98s 30,27
7 162 567h35 1318h27 854/931 6104/6804 37/162 94,39s 58,26
4 171 813h10 2655h52 959/1029 6048/7182 44/171 164,30s 96,08
2 - - - - - - 1655,77s -
(elaborado pelo autor)

4.2 Tempo de Processamento planejamento durou menos de 1 segundo, cumprindo com


o objetivo de gerar escalas válidas de alocação em um
É possível perceber conforme
nforme demonstrado na Figura 4 tempo computacional aceitável.
que a geração de cada dia válido do horizonte de

Figura 4 – Tempo de processam


processamento em cada dia no Algoritmo 1 (elaborado pelo autor).

4.3 Ocupação das Tripulações tripulações necessária


ssária para fechar as escalas de cada dia.
Note que a utilização total das tripulações está sempre
Visualiza-se na Figura 5 a variação da quantidade de acima da utilização parcial. Nos finais de semana devido
tripulação necessária para cumprir cada dia do hhorizonte à quantidade de jornadas ser menor consequentemente
de planejamento no SAT. A utilização das tripulações na tem-se
se uma diminuição da força de trabalho nestes
neste dias e
sua capacidade máxima de trabalho diária permitiu consequente aumento das tripulações com folga.
cumprir o objetivo de minimizar a quantidade de

Figura 5 – Ocupação das tripula


tripulações em cada dia no Algoritmo 1 (elaborado pelo autor).

4.4 Ocorrência de Duplas Pegadas Atribui-se à queda da ocorrência nos sábados e


domingos a Restrição de Domínio que trata da garantia
Percebe-se na Figura 6 que o limite de 19 duplas pegadas de folgas para as tripulações (seção 3.4, restrição 6),
foi atingido em todos os dias úteis, cumprindo com o ocorrendo a maioria destas folgas aos finais de semana,
objetivo de maximizar a ocorrência de duplas pegadas, diminuindo as possibilidades de combinações para dupla
porém aos sábados e domingos estes valores não foram pegada.
totalmente satisfeitos.
Figura 6 – Ocorrência de duplas pegadas em cada dia no Algoritmo 1 (elaborado pelo autor).

4.5 Desempenho do Método Híbrido Completo O Algoritmo 2 trabalhou variando a ordem de entrada
(Algoritmo 2) das tripulações para processamento em dia de alocação
do horizonte de planejamento no simulador, mantendo a
Nesta fase foram geradas variações no algoritmo solução de melhor da aptidão encontrada para o dia
analisando o seu comportamento, também em um (Função 10). Na Tabela 3 são exibidos resultados
horizonte de planejamento de 49 dias, com os parâmetros aplicando o método Híbrido Completo, sintetizado no
que geraram o melhor resultado do Simulador de Algoritmo 2.
Alocação de Tripulações (Tabela 2, primeira linha) ou
seja, sem a desativação de nenhuma restrição.

Tabela 3 – Desempenho do Método Híbrido Completo


Média de trip.
Q. Horas Horas Dupla Tempo de
Parâm. Q. escalas. não utilizada
trip. extras ociosas pegada process.
p/ dia
Pop: 10
Ger: 5
Cruz: 70%
156 650h04 817h16 847/931 6048/6594 33/156 1442,63s
Mut: 2%
Elit: Não
Exec: 10
Pop: 10
Ger: 5
Cruz: 70%
157 650h04 839h06 847/931 6048/6594 34/157 1595,35
Mut: 2%
Elit: Sim
Exec: 10
(elaborado pelo autor)

Os resultados mostrados na Tabela 3 foram os tripulações em dias distintos do horizonte de


melhores colhidos após diversos experimentos com a planejamento, não permitindo a variação de alguns
variação dos parâmetros do algoritmo genético. O horários para outras tripulações e aumentando o tempo
aumento da quantidade da população ou gerações inflou ocioso destas no planejamento como um todo.
em até 30% o tempo de processamento, não impactando A significativa diminuição da tripulação em
na qualidade dos resultados finais. A diminuição das comparação com a aplicação do Algoritmo 1 pôde ser
taxas de cruzamento aumentou a quantidade de observada. A rotatividade de alocação da tripulação
tripulações necessária para cumprir o horizonte de permitiu a ocorrência desta diminuição. Partindo do
planejamento em até 10%, devido à baixa rotatividade melhor horizonte de planejamento obtido no Algoritmo 1
das tripulações e acúmulo de tripulações com folga no (Tabela 2, primeira linha) e Algoritmo 2 (Tabela 3,
mesmo dia. O aumento da taxa de mutação influenciou primeira linha), seguiu-se com a analise detalhada e
também o tempo de execução, aumentando em até 25% a comparativos em cada dia do processamento do horizonte
convergência do algoritmo. Uma observação pertinente é de planejamento.
a aplicação do elitismo. Embora na maioria dos modelos
este parâmetro costuma possuir impacto positivo quando 4.6 Tempo de Processamento
ativado, no modelo proposto ele diminuiu a qualidade da
solução, aumentando a quantidade de tripulação A Figura 7 exibe o tempo de processamento de cada dia
necessária, o número de horas ociosas e tempo de do horizonte de planejamento no melhor cenário do
processamento do resultado final. Atribuiu-se a isto o fato Algoritmo 2 (Tabela 3, primeira linha).
de uma solução de qualidade ser perpetuada para as
próximas gerações gerar um posicionamento fixo de
Figura 7 – Tempo de processamento de cada dia no Algoritmo 2 (elaborado pelo autor).

As informações de processamento do Algoritmo 1 Nota-se também que picos de processamento são


(Figura 4) foram omitidas, visto que o tempo para cada percebidos a cada sete dias do horizonte de planejamento.
dia de processamento foi inferior a 1 segundo, porém é Isto se deve ao fato da distribuição das folgas da
possível perceber que no primeiro dia o tempo de tripulação ocorrer nestes dias, sendo que cada tripulação
processamento do Algoritmo 1 é idêntico ao do tem pelo menos uma folga aos domingos durante o
Algoritmo 2 (menos de 1 segundo), pois não há restrições período, além da necessidade de folgas a cada seis dias
dos dias anteriores que impactem na melhor solução do consecutivos de trabalho, conforme as restrições de
dia atual e independente da ordem de processamento das domínio do problema (seção 3.4).
tripulações o resultado seria o mesmo. Nos outros dias,
comparando o cenário com o tempo de processamento do 4.7 Ocupação das Tripulações
Algoritmo 1 ocorreu um aumento significativo em cada
dia no Algoritmo 2, já esperado, relacionado ao Nota-se na Figura 8 que o objetivo de equilibrar os dias
processamento do algoritmo genético buscando a melhor trabalhados de cada tripulação foi alcançado.
solução para o dia.

Figura 8 – Equilíbrio dos dias trabalhados da tripulação (elaborado pelo autor).

É possível perceber que o Algoritmo 1 ao fazer a 4.8 Horas Extras da Tripulação


alocação sempre com a mesma sequência da tripulação
utiliza as últimas tripulações apenas ao final do horizonte, A quantidade das horas extras por tripulação foi
quando necessário para gerar uma escala válida. Já o minimizada pelo Algoritmo 1 e se manteve igual no
Algoritmo 2 mantém essa variação durante todo os dias, Algoritmo 2, porém percebe-se na Figura 9 que no
equilibrando a carga diária de cada tripulação. Algoritmo 2 equilibrou-se a quantidade de horas extras da
tripulação.

Figura 9 – Minimização e equilíbrio das horas extras da tripulação (elaborado pelo autor).
Enquanto que no Algoritmo 1 algumas tripulações 4.9 Horas Ociosas da Tripulação
tiveram uma alta quantidade de horas extras, no
Algoritmo 2 os resultados para cada tripulação tiveram A quantidade das horas ociosas por tripulação foi
pouca variação. minimizada no Algoritmo 2, conseqüência também da
minimização da quantidade de tripulações necessária para
cumprir o horizonte de planejamento, como pode ser
conferido na Figura 10:

Figura 10 – Minimização e equilíbrio das horas ociosas da tripulação (elaborado pelo autor).

Também pode-se notar na Figura 10 que no Algoritmo para esta pesquisa. O horizonte de planejamento foi de 30
2 equilibrou-se a quantidade de horas ociosas da dias de acordo com o relatório cedido pela empresa.
tripulação. Nestes testes foram utilizadas as configurações que
obtiveram o melhor desempenho do Simulador Alocação
4.10 Comparativo com um cenário real de Tripulações (Tabela 2, primeira linha) e do Método
Híbrido (Tabela 3, primeira linha). Foi considerada
Na Tabela 4 é possível avaliar os resultados obtidos também pelo menos uma folga no domingo dentro do
comparando com um cenário real de alocação utilizado horizonte de planejamento.
na empresa que cedeu os dados das jornadas (Tabela 1)

Tabela 4: Comparação dos resultados com um cenário real.


Q. Horas Horas Compensação Tempo de
Fonte Dias
Trip extras ociosas (HO – HE) processamento
Método Proposto 30 156 398h19 724h21 + 326h02 1388,98s
Somente o SAT 30 171 398h19 704h51 + 306h32 15,90s
Relatório
operacional da 30 173 1863h44 1492h04 - 371h40 -
empresa
(elaborado pelo autor)

Nota-se comparando o desempenho somente do Conclusões


Simulador de Alocação de Tripulações com o Método
Híbrido a diferença na quantidade de tripulações Este documento teve como principal objetivo propor um
necessária para cumprir o horizonte de planejamento, método híbrido para otimização da escala de tripulações
sendo que o Método Híbrido embora tenha necessitado de em ônibus urbano, realizando o escalonamento da
um tempo de processamento bem maior conseguiu tripulação, atendendo as restrições do problema da
diminuir 15 tripulações da quantidade total de programação de tripulações, com os objetivos de
colaboradores. Já em comparação somente do SAT com o minimizar o número de tripulações necessária para
relatório operacional da empresa é possível perceber que cumprir todas as jornadas, minimizar a quantidade total
o SAT sozinho sem a aplicação do Algoritmo Genético de horas extras e ociosas da tripulação, maximizar o
conseguiu um resultado melhor que o utilizado número de duplas pegadas possível, equilibrar a carga de
atualmente. trabalho entre a tripulação e minimizar o tempo de
O melhor resultado pode ser constatado comparando o processamento do horizonte de planejamento.
Método Híbrido com o relatório operacional da empresa, Neste processo percebeu-se que a otimização do tempo
com uma diminuição de 10% no número de tripulações computacional gasto para execução do método seria
necessário para cumprir as jornadas do período. Ainda fundamental para a sua aplicabilidade prática, tendo tanta
considerando a compensação entre horas extras e ociosas importância quanto à otimização das variáveis do
(banco de horas) entre os modelos, no final do problema. Embora fosse desejável que o modelo inicial
planejamento o Método Híbrido proposto ficou com fornecesse uma solução determinística ótima, notou-se
saldo positivo, diminuindo em mais de 100% a que seria necessário o refinamento das soluções geradas e
quantidade de horas extras, enquanto o cenário real ficou este refinamento deveria ser estocástico, levando ao
com um saldo negativo de horas extras a pagar. método híbrido completo.
O modelo apresentado pode ser utilizado em diversos
problemas de análise combinatória com restrições de
horários conflitantes, pois as suas variáveis são maleáveis
e podem ser modificadas de acordo com as restrições do
problema a ser atacado. É importante ressaltar que no
cenário real as tripulações já vem com um acúmulo de
dias consecutivos de trabalho, gerando a necessidade de
folgas antes dos primeiros seis dias de processamento do
algoritmo, além de férias e uma série de situações
adversas que não permitem a utilização integral da
quantidade de tripulação. Estas situações não foram
abordadas neste trabalho, assim como a maioria dos
trabalhos na literatura.

Referências
CUNHA, C. B. Aspectos práticos da aplicação de
modelos de roteirização de veículos a problemas reais.
Revista Transportes da ANPET – Associação Nacional
de Pesquisa e Ensino em Transportes, v. 8, p. 51-74,
nov. 2014.
MARTINS, L. C.; SILVA, G.P. Algoritmos genéticos
aplicados ao problema do rodízio de tripulações. 47º
Simpósio Brasileiro de Pesquisa Operacional, Porto de
Galinhas (PE), 2015.
MAURI, G.R. & LORENA, L.A.N. A new hybrid
heuristic for driver scheduling. International Journal
of Hybrid Intelligent Systems, v. 4, p. 39-47, 2007.
MAYRINK, V. T. M. & SILVA, G. P. Otimização da
escala mensal de tripulações do sistema de transporte
público. Panorama Nacional da Pesquisa em
Transportes, v. 1, p. 185-197, 2010.
PRATES, R. F. C., SILVA, G. P. Otimização da Escala
Mensal de Motoristas de Ônibus Urbano Utilizando a
Heurística Variable Neighborhood Search. Revista
Transportes, v. 22, nº1, (2014), p. 31–43.
SILVA, T. A.; SILVA, G. Resolvendo o problema de
programação de tripulações de ônibus urbano com a
metaheurística guided local search. Congresso
Nacional de Pesquisa em Transporte da ANPET,
Universidade Federal de Ouro Preto, 2015.
SOUZA, C. C., MOURA, A. V., & YUNES, T. H.
(2005). Hybrid Column Generation Approaches for
Urban Transit Crew Management. Transportation
Science, v. 39, p. 273‐288.
VIEIRA, A. B. Roteirização de Ônibus Urbano: escolha
de um método para as grandes cidades brasileiras.
Dissertação de Mestrado em Engenharia de
Transportes. Universidade de São Paulo, 1999.
ZUBEN, F. J. V. Computação evolutiva: Uma
abordagem pragmática. In: Anais da I Jornada de
Estudos em Computação de Piracicaba e Região (1a.
JECOMP), Piracicaba, SP, 2000, p. 25–45.

S-ar putea să vă placă și