Otimização em Grafos: Problemas e Modelos
Classificado em Tecnologia
Escrito em em português com um tamanho de 7,12 KB
Problema do Carteiro Chinês
Este problema surge porque o grafo construído para representar o percurso nem sempre é um grafo euleriano. Portanto, nem sempre é possível computar diretamente um ciclo euleriano (um caminho que percorre todas as arestas exatamente uma vez e retorna ao início).
O critério para um grafo ser euleriano é que todos os seus vértices tenham grau par. No contexto do problema do carteiro, os vértices representam cruzamentos e as arestas representam ruas. Se nem todos os cruzamentos tiverem um número par de ruas conectadas a eles (ou seja, se existirem vértices de grau ímpar), o grafo não será euleriano.
Uma estratégia para transformar o problema em euleriano é modificar o grafo. Isso envolve identificar todos os vértices de grau ímpar e adicionar novas "arestas" (que representam a repetição de trechos de ruas existentes) até que todos os vértices no novo grafo possuam grau par. É importante notar que não se trata de construir novas ruas físicas; as "novas arestas" no modelo são, na verdade, trajetos que utilizam ruas já existentes. O objetivo é complementar o grafo para que ele se torne euleriano e um ciclo euleriano possa ser encontrado.
Essa necessidade de modificação ocorre porque não é possível garantir que todos os vértices originalmente tenham grau par. Uma abordagem comum é:
- Identificar os vértices de grau ímpar.
- Se houver apenas dois, duplicam-se as arestas que formam o caminho mais curto entre eles.
- Se houver mais de dois vértices de grau ímpar, utiliza-se o conceito de emparelhamento perfeito de custo mínimo nesses vértices. Um algoritmo é usado para encontrar os caminhos mais curtos entre os pares de vértices de grau ímpar que foram emparelhados, e as arestas desses caminhos são duplicadas no grafo original para torná-lo euleriano.
Alocação de Férias de Funcionários: Modelo Anual
Modelagem do problema utilizando grafos para alocação anual de férias:
- G(V,A): Representa o grafo do problema.
- M = {m | m é um mês do ano}
- F = {f | f é um funcionário da empresa}
- V = F ∪ M ∪ {s, t} (onde s é o nó fonte e t o nó sumidouro, representando o início e o fim do fluxo)
- A: Conjunto de arestas, incluindo:
- Arestas do nó fonte s para cada funcionário f ∈ F, com capacidade usualmente 1 (ou o número de períodos de férias que um funcionário pode tirar).
- Arestas de um funcionário f para um mês m, (f, m), se o funcionário f deseja tirar férias no mês m. Capacidade 1.
- Arestas de cada mês m ∈ M para o nó sumidouro t, com capacidade igual ao número máximo de funcionários que podem tirar férias naquele mês (o texto original menciona "peso 2", interpretado aqui como capacidade 2).
Solução Proposta: Fluxo Máximo
Com base no modelo acima, podemos usar o conceito de fluxo máximo para determinar a alocação de férias. As capacidades das arestas são definidas da seguinte forma:
- Cada aresta saindo do nó fonte para um funcionário tem capacidade 1 (assumindo que cada funcionário tira um período de férias).
- Cada aresta de um funcionário para um mês de interesse tem capacidade 1.
- Cria-se um vértice fonte (s) e um vértice sumidouro (t).
- Cada mês do conjunto M é ligado ao vértice sumidouro t por uma aresta com capacidade igual ao limite de funcionários em férias para aquele mês (no exemplo original, "peso 2", significando que até 2 funcionários podem tirar férias em um dado mês).
O valor do fluxo máximo de s para t indicará o número máximo de solicitações de férias que podem ser atendidas respeitando as restrições.
Alocação de Férias de Funcionários: Modelo Quinzenal
Modelagem do problema utilizando quinzenas:
- G(V,A): Representa o grafo do problema.
- Q = {Janeiro1, Janeiro2, ..., Dezembro2} (Conjunto de todas as quinzenas do ano)
- F = {f | f é um funcionário da empresa}
- V = F ∪ Q ∪ {s, t} (onde s é o nó fonte e t o nó sumidouro)
- A: Conjunto de arestas, incluindo:
- Arestas do nó fonte s para cada funcionário f ∈ F, com capacidade 1.
- Arestas de um funcionário f para uma quinzena q ∈ Q, (f, q), se f tem interesse em tirar férias na quinzena q. Capacidade 1.
- Arestas de cada quinzena q ∈ Q para o nó sumidouro t. A capacidade dessas arestas varia:
- Capacidade 20 para quinzenas dos meses de verão.
- Capacidade 10 para as demais quinzenas do ano.
Solução Proposta: Fluxo Máximo
Com base neste modelo, podemos usar o conceito de fluxo máximo:
- Atribui-se capacidade 1 para cada aresta que parte do nó fonte para os funcionários.
- Atribui-se capacidade 1 para cada aresta de um funcionário para uma quinzena de interesse.
- É criado um vértice fonte (s) e um vértice sumidouro (t).
- Todas as quinzenas (elementos de Q) são conectadas ao vértice sumidouro t.
- A capacidade das arestas das quinzenas para o sumidouro é de 20 para as quinzenas dos meses de verão e 10 para as demais quinzenas do ano.
Grafo Hamiltoniano: Definição
Um grafo G é dito hamiltoniano se existe um ciclo em G que visita todos os seus vértices exatamente uma vez, retornando ao vértice inicial para fechar o ciclo. Ou seja, cada vértice aparece apenas uma vez no percurso do ciclo, com exceção do vértice inicial que também é o final.
Algoritmos Relacionados
A seguir, menções a algoritmos e suas características (detalhes adicionais seriam necessários para uma descrição completa):
-
Função Maior Primeiro (possivelmente uma variante de algoritmo guloso):
- Complexidade computacional mencionada: O(n*m). Esta complexidade pode variar dependendo da implementação específica e do problema ao qual se aplica, onde n e m geralmente representam o número de vértices e arestas, ou outras dimensões do problema.
-
Coloração Aproximada de Grafos:
- Refere-se a algoritmos que buscam uma coloração de vértices de um grafo usando um número de cores próximo ao número cromático (o mínimo de cores possível), especialmente útil para grafos onde encontrar a coloração exata é um problema NP-difícil.