Uma heurística interativa para geração de caminhos em grafos com restrição de
grau: aplicação ao projeto de sistemas metroviários
1. Introdução
1.1 O transporte metroviário
O metrô tem se mostrado, em todo o mundo, como a melhor solução para o
transporte de passageiros em grandes cidades, sendo comum a sua presença na
maioria delas (Jane's, 1993), não só pela existência de corredores de alta
demanda, mas também por oferecer um serviço potencialmente atrativo para
usuários de outras modalidades, como ônibus e carro, retirando veículos das
vias públicas. Nesse sentido, contribui para melhorar o desempenho do tráfego e
minimizar suas externalidades, como os congestionamentos, acidentes de trânsito
e degradação ambiental. Apenas as externalidades monetariamente quantificáveis
e associadas aos congestionamentos derivados do excesso de veículos nas vias
ultrapassam a casa de um bilhão de dólares/ano, segundo estudos realizados em
diversas metrópoles americanas e européias (ICDT, 1995). Não contar com uma
rede adequada deste serviço é condenar a cidade a conviver com sérios problemas
no trânsito e com baixo nível de qualidade de vida, desordem e poluição,
podendo chegar ao colapso. Esse colapso pode resultar, até, na fuga de empresas
de grande porte para outros locais, na redução do fluxo de investimentos para a
cidade, na retração do mercado de trabalho e na conseqüente perda da
arrecadação de impostos pelo Poder Público (Metrô Rio, 2000). O sistema
metroviário se caracteriza, exatamente, por ter uma grande capacidade de
transporte, não ser poluente e utilizar energia renovável, sendo, em vista
dessas características, indicado em corredores e áreas altamente adensadas e
com elevadas demandas de viagens. Apesar da capacidade de um sistema
metroviário depender de inúmeros fatores, tipicamente ela supera os 15.000
passageiros/hora/sentido, podendo este valor ultrapassar a casa dos 60.000
(Mello, 1978; TRB, 1995; Campos & Szasz, 1996; D'Agosto, 1999).
Em todo o mundo se contavam, em 1999, 108 sistemas de metrô, dos quais 11 na
América do Sul, sendo 6 brasileiros (Belo Horizonte, Brasília, Porto Alegre,
Recife, Rio de Janeiro e São Paulo). Neste trabalho se inclui um exemplo de
aplicação da heurística aqui apresentada ao desenvolvimento de uma proposta de
expansão do sistema metroviário do Rio de Janeiro.
No geral observa-se que o planejamento de redes de transportes, em particular
metroviárias, tem como critério de análise potencializar o desenvolvimento do
espaço sócio-econômico, atender a grandes contingentes de demanda e minimizar
custos de implantação/operação e os impactos ambientais (Arruda, 1980; Ribeiro,
1980). O processo tradicional de modelagem usado é conhecido como "de
quatro etapas" denominadas: geração de viagens, distribuição de viagens,
escolha modal e alocação do tráfego. A sua aplicação envolve altos custos e uma
quantidade extremamente elevada de dados, normalmente não disponíveis em países
em desenvolvimento. Os programas computacionais existentes no mercado são
habitualmente calibrados para outras realidades e têm uma concepção pouco
interativa com os analistas e atores intervenientes.
Algumas pesquisas sobre este tema indicam uma preocupação maior com o desenho
de redes alimentadas por ônibus e o emprego de técnicas de programação
matemática de fluxo em redes, sistemas de informação geográfica e Inteligência
Artificial (algoritmos genéticos), não tendo sido encontrada na literatura
consultada abordagem similar à proposta deste artigo (Shih et al., 1998; Choi
& Jang, 2000; Shrivastav & Dhingra, 2001; Bruno et al., 2002).
Os instrumentos e critérios adotados neste trabalho permitem uma visão
preliminar da estrutura de rede, utilizando-se dados de obtenção mais simples e
rápida. O projeto resultante poderá ser em seguida avaliado por técnicas mais
elaboradas, etapa essa que, no entanto, não é contemplada aqui.
1.2 Características do problema
Resolver um problema através de um modelo de grafo implica, com freqüência, em
um esforço para suplantar dificuldades de caráter combinatório associadas às
características do problema, especialmente quando se dispõe de um amplo
universo de alternativas relacionadas entre si, em meio às quais se busca uma
otimização ao menos aproximada.
O problema do projeto da rede metroviária tem outra natureza: essencialmente se
trata de um problema de percursos, com uma restrição adicional (no entanto
contornável) para o grau máximo dos vértices. Suas principais características
são uma ordem em geral módica, envolvendo custos de projeto e de execução
extremamente elevados e de execução seqüenciada no tempo. A construção de um
sistema metroviário é uma atividade que ocorre ao longo de um período muito
extenso, dirigida pelas necessidades da cidade e pelos seus planos de
desenvolvimento. Freqüentemente se trabalha, em cada época, em uma linha
apenas. O projeto é sujeito a diversos tipos de condicionantes relacionados à
estrutura da rede, além dos fatores decisórios que levam à escolha de cada
itinerário a ser efetivamente coberto, tais como dados de demanda, que figuram
entre os elementos de mais fácil interação com o projetista. Destaca-se,
entretanto, o cuidado com que se deve estudar o comportamento da demanda
futura, particularmente no caso brasileiro, não só pelas significativas taxas
de crescimento urbano das principais cidades, como por serem poucos, ou
inexistentes em muitos casos, os instrumentos de controle de uso do solo, e
conseqüentemente dos fluxos de viagens.
O grafo representativo de uma rede de metrô apresenta, em princípio, a
restrição de grau máximo 4, associada à impossibilidade do cruzamento em nível
de duas linhas. As opções para esse cruzamento são, habitualmente, a da
construção de dois andares, ou então a da união das duas linhas por um corredor
utilizado pelos passageiros para a transferência de uma linha para outra. Este
último recurso é freqüentemente utilizado, em vista de permitir, na prática,
que uma estação receba qualquer número de linhas. Mantém-se a discussão inicial
baseada na restrição do grau em vista do menor custo que ela traz,
habitualmente, para a construção das estações; no entanto, abre-se a
possibilidade de deixá-la de lado na resolução interativa, caso isso se mostre
conveniente. De fato, em cada estação é usual que não mais de duas linhas se
cruzem, pois cada linha demanda um andar, restringindo o emprego de estações
com mais de dois andares em vista do elevado custo. Cada andar, é claro,
contribuirá com no máximo duas unidades de grau (correspondentes à chegada e à
saída de uma linha), o que tende a limitar a 4 o grau de um vértice no grafo
representativo das linhas.
Esta restrição torna o problema não polinomial. Por outro lado, um instrumento
eficiente no sentido de apresentar propostas para uma malha metroviária não
deverá ter elevada complexidade computacional, não fazendo sentido, portanto, a
execução de testes de eficiência avaliados pelo tempo de execução. De qualquer
forma, uma heurística será necessária em vista das diversas considerações a
serem contempladas na análise da geração sucessiva das linhas, o que vem ainda
resolver o problema da complexidade. O que importa, de fato, é a capacidade
dessa heurística de lidar com as injunções a serem levadas em conta nesse
processo. Neste ponto, exatamente, é preciso que o processo se torne
interativo, permitindo ao projetista, seja a cada linha gerada ou ao final,
introduzir na solução a sua visão do problema.
1.3 A heurística e sua construção
O trabalho foi dedicado ao desenvolvimento de uma ferramenta computacional
baseada em uma técnica heurística interativa, idealizada com o objetivo de
auxiliar o projeto e a crítica de redes metroviárias e dar respaldo aos
planejadores do sistema de que o projeto final atende aos interesses sociais e
econômicos e também respeita as restrições inerentes ao problema. A heurística
foi elaborada, então, para oferecer ao projetista propostas já selecionadas em
acordo com as questões de estrutura, para que ele as aperfeiçoe pela introdução
dos demais elementos de avaliação.
O trabalho, que envolveu fases alternadas de construção e de testes, usou
recursos de grafos e procedimentos da geometria computacional, estes últimos na
geração de grafos-suporte destinados aos testes que permitiram o
aperfeiçoamento da heurística. Evidentemente, esse mesmo processo poderá levar
a melhorias e aprimoramentos ulteriores.
Ao se construir um grafo-suporte para testes, partiu-se de um conjunto de
vértices gerados aleatoriamente em uma área limitada do plano, para em seguida
obter-se um grafo planar triangulado. Neste momento se trabalhou com cascas
convexas sucessivas, partindo-se dos vértices mais distantes dois a dois,
gerando com eles um ciclo e procedendo iterativamente da mesma forma com os
vértices totalmente desconexos ainda existentes. Ao final, pode ocorrer que
restem apenas dois vértices ao centro; neste caso, eles seriam simplesmente
conectados por uma aresta.
Em seguida cada ciclo mais exterior é ligado ao imediatamente interior por
arestas de comprimento mínimo, em número suficiente para que se obtenha uma
triangulação local. Se a região central do conjunto contiver apenas um vértice,
ele será unido a todos os vértices do ciclo interior (usando k arestas, se k
for o número de vértices desse ciclo; já, se existirem dois vértices, a
triangulação local exigirá k + 2 arestas e neste caso se utiliza ainda um
critério de escolha da menor aresta). Os detalhes, bem como um exemplo, estão
no Apêndice.
Esta técnica foi julgada preferível à triangulação de Delaunay (ver, por
exemplo, Preparata & Shamos, 1985). Esta conhecida técnica de Geometria
Computacional é de fácil uso e utiliza um critério de proximidade entre pontos,
o que a apontaria como ideal para a aplicação aqui desenvolvida. No entanto,
ela não garante uma estrutura de comprimento mínimo, a não ser quando se
utilizam distâncias euclidianas: e, exatamente, no problema em estudo, as
arestas do grafo-suporte possuem uma valoração em termos de custo que depende
não apenas da distância mas ainda de diversas outras questões. Enfim, a técnica
utilizada limita a busca de menores arestas às ligações entre os ciclos
sucessivos, o que deve favorecer a geração de linhas mais diretas unindo
vértices periféricos.
A definição do conjunto de vértices do grafo-suporte (estações que farão parte
da rede), em uma aplicação real da heurística, não faz parte do escopo do
trabalho. Os vértices devem ser estabelecidos a priori pela existência de uma
demanda que justifique a criação de uma estação naquele ponto, ou pelo
interesse em se desenvolver determinada área urbana pela oferta de um
transporte público de maior capacidade. Para o caso do metrô, um método
proposto para escolha de estações é apresentado por Junquilho (1981) e se
baseia na maximização do benefício líquido, expresso como a economia de custo
de viagem dos passageiros (medida pelo tempo de viagem) e os custos envolvidos
na construção e operação do sistema.
2. Descrição da Heurística
2.1 Considerações iniciais
A Heurística de Geração de Linhas (HGL) tem como propósito contribuir no
processo de elaboração de um projeto de metrô que respeite a restrição de grau
inerente ao problema e que permita a cada etapa a interação com a equipe
responsável pelo projeto. Partindo de um grafo-suporte G, objetiva-se gerar
linhas que minimizem o custo total de construção. Para isso, procuram-se os
caminhos de menor custo entre os vértices periféricos.
Um ponto importante neste problema está no fato de que o modelo de grafo não é
suficiente, estruturalmente, como uma base de dados representativa do sistema
metroviário. É preciso, também, que se tenha informação sobre quais são as
linhas consideradas, ou seja, por onde passam as composições.
O grafo final H,obtido pela aplicação da heurística de geração de linhas, será
um grafo parcial de Gformado pela união de todas as linhas, respeitando as
restrições de custo mínimo de construção e de grau, ou seja, que não tenham
vértices com grau superior a 4, ou com grau nulo (que seriam estações não
atingíveis pela rede).
A HGL é aplicada através de três etapas, sendo que a primeira executa um
programa para gerar caminhos candidatos (ou seja, caminhos que apresentam, em
princípio, condições de serem selecionados como linhas) e as duas últimas são
etapas que analisam e se necessário modificam estes caminhos através de
critérios pré-definidos, para que possam eventualmente ser selecionados. Estas
etapas são executadas através da interface com o planejador do sistema, que
assim intervém no processo, introduzindo no projeto as especificidades do
contexto de aplicação do metrô.
2.2 Primeira etapa da HGL: Geração de caminhos candidatos
A primeira etapa consiste na execução de um procedimento que tem como entrada a
matriz de valores das arestas do grafo-suporte. O procedimento aplica o
algoritmo de Floyd (Floyd, 1962) e busca, na matriz de distâncias que dele
resulta, caminhos candidatos a participarem das linhas do sistema metroviário.
O processo de busca de caminhos candidatos é iterativo e consiste em se obter,
da matriz de distâncias vigente a cada iteração, a maior distância entre pares
de vértices, fazer o retraçamento do percurso correspondente e zerar a
distância na matriz. Se houver neste itinerário pelo menos um vértice ainda não
utilizado, considera-se este caminho como candidato a participar de uma linha
do sistema. O processo iterativo de busca de caminhos candidatos termina quando
todos os vértices do grafo pertencerem a pelo menos um caminho. Portanto, o
algoritmo executará O(n) iterações polinomiais.
Os procedimentos executados estão indicados a seguir, mas não estão detalhados
no texto uma vez que se trata de instrumental padrão da teoria dos grafos. Os
detalhes, a nomenclatura e a notação estão em Boaventura Netto (2002).
' Procedimento inicialização: lê de um arquivo de entrada os dados
das matrizes de distância e adjacência do grafo-suporte gerado.
' Procedimentofloyd: executa o algoritmo de Floyd, gerando como saída
a matriz de distâncias que contém os valores do menor caminho (mij)
entre cada par de vértices (i,j) e a matriz de roteamento final
(Farbey et al., 1967; Land & Stairs, 1967).
' Procedimentoretraçamento(i,j) (i,j): faz o retraçamento do caminho
mínimo entre o par de vértices (i,j) utilizando a matriz de
roteamento final obtida após a aplicação do algoritmo de Floyd.
' Procedimentomaior_distância: busca na matriz de distâncias final
obtida pela aplicação do algoritmo de Floyd a posição D[j,k] que
possui o maior valor, armazenando as posições do par de vértices
(j,k) nas variáveis jmd e kmd, posteriormente zera a posição d
[jmd,kmd], para que na próxima execução deste procedimento se
encontre a próxima maior distância.
Na descrição a seguir, as variáveis referenciadas têm o seguinte significado:
' nvi: variável inteira que armazena o número de vértices já
pertencentes aos caminhos candidatos gerados;
' nca: número de caminhos gerados;
' mca[j,k]: matriz que armazena os caminhos candidatos;
' nvca: variável que armazena o número de vértices pertencentes ao
caminho gerado a cada iteração;
' vnca: variável que armazena o número de vértices novos no caminho,
ou seja, o número de vértices que estão participando pela primeira
vez de um caminho.
2.3 Segunda etapa da HGL: Análise e modificação do conjunto de caminhos
candidatos para eliminar trechos de caminhos com sobreposição de trechos
Não é conveniente, em princípio, que duas linhas tenham trechos (arestas) em
comum: isto implicaria na construção de um suporte de dimensão dobrada, seja em
subterrâneo (túnel largo), seja externo (elevado, ou à superfície do solo). A
segunda etapa da HGL consiste na aplicação de critérios de análise e
modificação do conjunto dos caminhos candidatos, para que ele passe a ter o
menor número possível de caminhos e de modo que não haja superposição de
trechos de linhas.
Os critérios de análise e modificação dos caminhos candidatos são:
' a maior distância entre pares de vértices do grafo-suporte inicial
é prioritária para escolha;
' dois caminhos que tiverem exatamente um vértice periférico em comum
são considerados como uma única linha;
' se houver mais de dois caminhos candidatos com um mesmo vértice
periférico em comum, procura-se fazer a união dos dois caminhos que
juntos mapearem maior área radial ou transversal;
' se dois caminhos de tamanho k tiverem (k ' 1) vértices em comum,
diferindo apenas por um dos vértices periféricos, estuda-se a
viabilidade de uni-los através de um procedimento baseado em
desigualdades triangulares, como exemplificado a seguir:
Exemplo: Considerando os caminhos candidatos m1 = (x1, x6, x7, x9) e m2= (x1,
x6, x7, x5), onde m1 é o caminho de maior comprimento, verifica-se se no grafo-
suporte inicial existe a aresta (9,5). Caso exista, faz-se a união dos dois
caminhos colocando-se no caminho resultante os (k ' 1) vértices comuns,
seguidos dos vértices finais do menor e do maior caminho, resultando o caminho
(x1, x6, x7, x5, x9). Se não existir a aresta (9,5), elimina-se o segundo
caminho. Este procedimento pode ser usado com quaisquer pares de caminhos que
difiram de apenas um vértice. Caso não seja possível a união, elimina-se o
menor caminho (Figura_1).
Os critérios de análise e modificação dos caminhos candidatos devem ser
aplicados não apenas quando os caminhos de tamanho k diferem pelo vértice
periférico mas também quando diferem em apenas uma das k posições.
' Se duas linhas se cruzarem em mais de um vértice, estuda-se a
possibilidade de deixar o menor número de cruzamentos possível.
' Os trechos não analisados que tiverem arestas em comum com as de
caminhos já definidos como linhas devem ter estas arestas retiradas.
Se o trecho restante tiver pelo menos três arestas consecutivas pode
ser considerado como um caminho candidato, devendo ser analisado
através dos critérios anteriores.
Após aplicação destes critérios de análise e obtenção de um novo conjunto
proposto para linhas do sistema, cujos caminhos não têm nenhuma aresta em
comum, tem-se um grafo parcial H formado pela união das arestas pertencentes às
linhas geradas.
2.4 Terceira etapa da HGL: Verificação dos graus dos vértices do grafo H e
aplicação de operações corretivas, estudo de circuitos e eliminação de trechos
paralelos
Seja H o grafo parcial que resulta da segunda etapa da HGL. A terceira etapa
consiste na verificação dos graus dos vértices de H, e resolver os problemas
existentes, que podem ser de dois tipos:
' Vértices não contemplados com linhas, ou seja, que tenham grau
zero;
' Vértices com grau superior a 4, ou seja, que pertençam a mais de
duas linhas.
Nos dois casos, se procurará resolver o problema examinando o conjunto de
vizinhos GG(x) do vértice xem análise.
No primeiro caso, algum vértice x não é atendido; procuram-se então as
interseções de GG(x) com as linhas construídas em busca de algum vértice y
terminal de linha, ou de dois vértices consecutivos de uma linha nesse
conjunto; em ambos os casos, pode ser feita a inserção de x.
Se o problema não puder ser resolvido dessa forma, devem ser retiradas do
grafo-suporte G as arestas que fazem parte das linhas obtidas até o momento e
executado novamente o algoritmo de Floyd, reaplicando o processo à procura de
uma linha que passe por x.
Pode ainda ser estudada a possibilidade da integração com outra modalidade de
transporte, para satisfazer a demanda existente neste ponto: desta forma, x não
seria considerado para construção de uma estação.
O segundo problema é mais complexo: é preciso que não se criem novos vértices
de grau superior a 4 em H, ao se fazer trocas em linhas. Além disso, dentre as
diversas possibilidades, deve-se escolher a de menor custo de construção. Para
resolver esse problema, devem ser analisadas duas possibilidades:
' Se um vértice tiver grau entre 5 e 8 em H, criar um novo vértice
representativo de uma instalação próxima, mantendo-se duas linhas
passando pelo vértice de origem e desviando a(s) restantes(s) para o
novo cruzamento. Deve-se considerar esta opção, se num raio da ordem
de 300m (conveniente para trânsito a pé, conforme observado na
prática para transferência de passageiros) houver possibilidade de
construção dessa nova instalação.
' Não havendo a possibilidade de criação de um cruzamento próximo à
estação com grau superior a quatro, será preciso avaliar as
possibilidades de contornar x por um conjunto de trocas de arestas
que foi chamado, em geral, operação contorno. Se uma operação
contorno envolver um vértice de grau 4 pode-se cair em seguida na
Possibilidade 1 e seresolver o problema de acordo com a técnica
descrita.
Possibilidade de linhas circulares: observar, para os vértices terminais de
cada linha mif, se no grafo-suporte inicial existe a aresta (xi, xf); caso ela
exista, sugere-se o estudo da viabilidade da construção desta ligação, que
transformaria a linha em circular.
Eliminação de trechos paralelos: pode ocorrer que dois trechos de linha estejam
muito próximos no grafo H, uma vez que os vértices possuem posições definidas
no plano cartesiano, é importante que se estude a eliminação de um dos trechos.
Ver o exemplo a seguir.
2.5 Exemplo de aplicação da HGL
Para exemplificar a aplicação da heurística, gerou-se um grafo-suporte planar
triangulado com 15 vértices (Figura_2).
Após a aplicação da heurística, foi feita uma análise das linhas que poderiam
ser transformadas em circulares, como uma sugestão de realização futura caso
haja na região demanda que justifique tal investimento.
A execução do procedimento caminhos_candidatos, tendo como entrada a matriz de
valores das arestas do grafo da Figura_2, gerou como saída os seguintes dados:
' matriz de caminhos candidatos a participarem das linhas do sistema
(MCA);
' vetor com os tamanhos de cada caminho candidato (TCA); e
' matriz de vértices periféricos (MVP) de cada caminho candidato.
O procedimento gerou 7 caminhos, correspondentes aos elementos não nulos em
cada linha da matriz MCA.
Na segunda etapa da heurística, foram aplicados os critérios de análise e
modificação dos caminhos candidatos da seguinte forma:
' O primeiro caminho recebeu uma linha do sistema, unindo os vértices
periféricos 2 e 14;
' O quarto caminho tem, em comum com o primeiro, apenas um vértice
(periférico); então se fez a união desses dois caminhos, obtendo-se
{14, 13, 8, 3, 2, 7, 10, 11}, que passou a ser a primeira linha do
sistema;
' Eliminaram-se as arestas dos outros caminhos candidatos
coincidentes com as da primeira linha adotada: isto levou à retirada
da aresta (7,10) do sexto caminho. Como ele passou a ter menos de
três arestas consecutivas, deixou de configurar como caminho
candidato. O conjunto vigente de caminhos candidatos passou a ser:
1º ' {7, 4, 3, 15} 2º ' {1, 3, 4, 7}, 3º ' {5, 9, 13, 10} 4º ' {6, 3,
4, 7};
' Adotou-se o caminho {7, 4, 3, 15} como a segunda linha do sistema;
' Eliminou-se a aresta (3, 4) do segundo e quarto caminhos
candidatos, por coincidir com uma aresta da segunda linha adotada.
Como esses caminhos passaram a ter menos de três arestas
consecutivas, eles deixam de pertencer ao conjunto de caminhos
candidatos, que passou a ter apenas o caminho {5, 9, 13, 10};
' Adotou-se então, o caminho {5, 9, 13, 10} como a terceira linha do
sistema;
' Como o conjunto de caminhos candidatos deixou de existir, passa-se
a fazer a verificação dos vértices do grafo H obtido através das
linhas adotadas que foram:
m1 = {14, 13, 8, 3, 2, 7, 10, 11}, m2 = {7, 4, 3, 15} e m3 = {5, 9, 13,
10}.
O grafo parcial H formado pelas linhas do metrô após a execução das duas
primeiras etapas, pode ser visualizado através da Figura_3.
As linhas 1 e 3 têm dois cruzamentos (nos vértices 13 e 10), mas é possível
eliminar-se o segundo cruzamento, já que o vértice 10 é terminal da linha 3.
Então se retira a aresta (13,10) e a terceira linha passa a ser {5, 9, 13}.
A verificação de graus indica que não há vértices com grau superior a 4, mas
que há três vértices com grau nulo (vértices 1, 6 e 12). Os conjuntos de
vizinhos desses vértices são:
G G(1) = {2, 3, 15};
G G(6) = {3, 8, 12, 15};
G G(12) = {6, 8, 13, 14, 15}.
Observa-se que:
' o vértice 1 pode ser ligado ao vértice terminal da linha 2 através
da aresta (1,15);
' o vértice 12 pode ser ligado ao vértice terminal da linha 3 através
da aresta (12,13);
' o vértice 6 não possui vértices terminais na sua vizinhança, mas
sim as extremidades de (8,3) (aresta da linha 1): então ele pode ser
incluído na linha 1, através da substituição da aresta (8,3) pelas
arestas (8,6) e (6,3).
Enfim, as arestas (4,7) e (2,7) são muito próximas: como 7 pertence à linha 1,
(4,7) pode ser eliminada e a linha 2 fica com apenas 4 vértices.
As linhas passaram a ser:
' Linha 1: {14, 13, 8, 6, 3, 2, 7, 10, 11};
' Linha 2: {1, 15, 3, 4};
' Linha 3: {12, 13, 9, 5}.
A Figura_4 mostra as novas linhas: pode-se observar que todos os vértices
pertencem a pelo menos uma linha e não existem vértices com grau superior a 4.
A análise da possibilidade de linhas circulares mostra que:
' A linha 1 pode ser transformada facilmente em uma linha circular,
pois seus vértices periféricos, 14 e 11, são extremidades de uma
aresta no grafo-suporte inicial;
' A linha 2 não oferece possibilidade de transformação em circular,
pois os vértices periféricos estão muito distantes e para ligá-los
seria necessário usar arestas que já pertencem a outra linha;
' A linha 3 possui seus vértices periféricos na vizinhança do vértice
8 e pode então ser transformada em circular por passagem através
dele.
O resultado dessas modificações pode ser observado na Figura_5, que completa o
exemplo.
3. Uma Aplicação: Proposta de Sistema Metroviário para a Região Metropolitana
do Rio de Janeiro
3.1 Considerações iniciais
Neste item é apresentado um exemplo de aplicação da heurística de geração de
linhas discutida no trabalho, através de uma simulação do planejamento de um
sistema metroviário para a região metropolitana do Rio de Janeiro. A intenção
deste exercício é mostrar a exeqüibilidade do procedimento proposto e fornecer
um guia que possa ser útil para futuras aplicações.
Apesar de se ter um compromisso com a realidade, a precisão e confiança no
resultado alcançado no planejamento de uma rede de metrô estão vinculadas à
qualidade e à suficiência dos dados utilizados: ora, justamente as estatísticas
existentes são com freqüência deficientes, em particular no setor de
transportes, o que se reproduz no sistema metro-ferroviário da região
metropolitana do Rio de Janeiro e empresas envolvidas. Nem todos os dados
necessários estão disponíveis, tais como possíveis estações que fariam parte da
rede, custos de construção das estações e de cada um dos possíveis trechos,
matriz de demandas entre pares de estações e custo de operação dos trechos de
linhas.
Por outro lado, a obtenção destes dados é por si só um grande projeto e, como
tal, depende de decisões que transcendem a capacidade e o contexto de atuação
associados ao presente trabalho.
Na construção do grafo-suporte utilizado, tomou-se como base um estudo da
Companhia do Metropolitano do Rio de Janeiro (Metrô Rio, 2000), que traça um
plano de expansão para o metrô do Rio até o ano 2020.
Deste plano foi desconsiderada a linha 3 (Rio ' Niterói), dada a ausência de
sua interação com as demais linhas fora de um ponto único de conexão. Com
relação à linha 4, foi considerada a versão do projeto que liga a Barra ao
Centro indo até a estação Carioca, visto que a alternativa de final da linha no
morro de São João deixa sem estação alguma bairros de elevada densidade de
população, tais como Laranjeiras. Considerou-se, além das estações contempladas
neste plano, algumas outras situadas em pontos associados a áreas adensadas
(como Meier, Deodoro, Campo dos Afonsos, Cidade de Deus, Madureira etc.), ou a
pólos atrativos para moradia, ou para investimentos (como Barra da Tijuca e
Recreio dos Bandeirantes). Esta concepção ofereceu alternativas mais adequadas
para a modelagem e o planejamento de linhas, contribuindo para melhorar o seu
papel estruturador do espaço sócio-econômico e integrador das diferentes
modalidades de transportes.
A HGL necessita, desde a modelagem do grafo-suporte até a aplicação de sua
última etapa, ser desenvolvida por planejadores de sistemas metroviários com
conhecimento das características geográficas, dados de demanda e de custos de
construção e operação do futuro metrô, de modo a garantir uma aderência
satisfatória à realidade, com um bom nível de otimização. Em vista disso, os
resultados aqui apresentados podem envolver configurações bastante diferentes
das que seriam obtidas numa situação real de projeto que contasse com mais
recursos e um melhor sistema de informações.
3.2 Construção do grafo-suporte
Na construção do grafo-suporte foram consideradas as linhas 1 e 2, já em
operação, e as demais linhas do plano de expansão do metrô para os próximos 20
anos, à exceção da linha 3 conforme já citado (Metrô Rio, 2000), num total de
42 estações, além dos locais atrativos já referenciados não contemplados nesse
plano, num total de 9 estações (representadas por círculo em tom mais claro na
Figura_6).
A escolha destes pontos contou com a colaboração do Engenheiro de Transportes
Luiz Antonio Werneck de Carvalho (da Companhia do Metropolitano do Rio de
Janeiro). Por outro lado, muitas arestas de um possível grafo triangulado não
foram incluídas, por considerações diversas (obstáculos naturais e regiões
julgadas impróprias para construção de trechos).
Os vértices rotulados de 1 a 33 são estações que no grafo-suporte têm grau 1 ou
maior que 2. Os vértices rotulados de 34 a 51 são de grau 2; eles correspondem
a uma ou mais estações e deverão ser atendidos por alguma linha que conecte um
par de vértices de grau maior que 2. O número de arestas do grafo, construído
dessa forma, (Figura_6) é de 67. Os valores indicados correspondem a
centímetros sobre o mapa utilizado.
Na Figura_6 não foram contempladas todas as estações do plano original: onde
nele existiam vértices consecutivos de grau 2, em certos casos foram somados os
valores das arestas consecutivas e os vértices entre elas desconsiderados: por
exemplo Freguesia-Galeão, com 6 km, teria uma estação no Centro da Ilha, o que
significa que estes 6 km seriam a soma dos trechos (Freguesia, Ilha) e (Ilha,
Galeão).
Existem trechos pertencentes às linhas 1 e 2 que já estão em operação; nestes
casos, as arestas correspondentes do grafo-suporte têm seu tamanho real.
Trechos novos tiveram seus valores aproximados, tendo sido consideradas
distâncias euclidianas medidas entre pares de vértices, a menos de trechos com
obstáculos evidentes, como mar e aeroporto. As medidas das arestas novas foram
obtidas através de um mapa (SMU/PMRJ, 2000), com escala de 1:50.000.
Procurou-se não sobrepor o grafo-suporte à rede ferroviária existente, de modo
a viabilizar um estudo futuro de integração entre os vários modais de
transporte.
3.3 Aplicação da heurística de geração de linhas
Na aplicação da HGL, após a geração de caminhos candidatos, foi obtida a
seguinte saída de dados:
' Uma matriz com 14 caminhos candidatos a participarem das linhas do
sistema metroviário a ser proposto (MCA[j,k], j = 1, , 14, k = 1, ,
18);
' Um vetor com os tamanhos destes 14 caminhos candidatos (TCA[j], j =
1, , 14) cuja unidade dos dados é o km, seguindo a escala do mapa
utilizado de 1:50.000;
' Uma matriz (MVP[j,k], j = 1, , 14, k = 1,2) com os vértices
periféricos dos 14 caminhos candidatos.
Cada linha da matriz MCA representa um caminho candidato, cada posição do vetor
TCA[j] o seu tamanho (aqui em km) e cada linha da matriz MVP contém os vértices
periféricos dos respectivos caminhos candidatos. No que se segue, as estações
são representadas por suas siglas.
Na segunda etapa da heurística, foram aplicados os critérios de análise e
modificação dos caminhos candidatos além de tentar respeitar a infra-estrutura
do metrô já existente.
A Tabela_1 mostra o resultado da análise dos caminhos candidatos no que tange
as interseções de seus conjuntos de arestas, observada a prioridade da ordem
numérica.
O conjunto de linhas que formam o grafo parcial H é, portanto, o seguinte:
' Linha 1:(LEB, GOS, BTF, CRC,
LAR, SCL, JBT, GAV, JAO, ALV, ITA, REC);
' Linha 2:<formula/> (FRE, GAL, FUD, PEN,
BRP, IRJ, VAC, LMC, MAD, TAQ, AUT, ITA);
' Linha 3:<formula/> (CRC, CTR, ESA, SCR,
MRC, TRG, MDA, INH, TOC, LMC);
' Linha 4:<formula/> (MDA, MEI, SPN, URU);
' Linha 5:<formula/> (FUD, VIP, CAJ, ROD,
SEV, PRM, CAS, CRC);
' Linha 6:<formula/>(TOC, VIC, IRJ, CNT,
PVN, NIL).
O grafo H (obtido após a aplicação das duas primeiras etapas da HGL) pode ser
visualizado na Figura_7.
Antes da aplicação da terceira fase da HGL, foi incluída uma sétima linha, de
modo a contemplar um circuito previsto no plano de expansão do metrô. Esta
modificação envolve a criação do vértice CVR (Estação da Cruz Vermelha) com as
arestas (ESA, CVR) e (CVR, CRC) em H.
No modelo inicial não foram incluídas as arestas (URU, GAV) e (GAV, LEB), visto
que o algoritmo de Floyd não contempla circuitos positivos; ao serem elas
consideradas, pôde ser traçada a linha circular: m2 = (GAV, URU, SPN, AFP, ESA,
CTR, CRC, BTF, GOS, LEB, GAV). A criação da sétima linha foi priorizada pelo
fato de uma linha circular ser sempre desejável em uma região adensada e
desenvolvida, com grande concentração de atividades comerciais, industriais e
de prestação de serviços, além de possibilitar maior flexibilidade operacional
caso algum trecho apresente problema de circulação. Com a criação da sétima
linha, os trechos das outras linhas que passaram a coincidir com ela foram
eliminados, a saber, o trecho (LEB, GOS, BTF, CRC) da linha 1, o trecho (CRC,
CTR, ESA) da linha 3 e o trecho (URU, SPN) da linha 4. O vértice AFP que tinha
grau zero passou a ter grau 2.
Com objetivo de proporcionar uma ligação direta da Baixada Fluminense ao
Centro, inclui-se um trecho de 3 Km entre Estácio (ESA) e Carioca (CRC),
através da estação Cruz Vermelha (CVE) a ser localizada na praça com o mesmo
nome. A linha 3 passou a ter o vértice CRC como vértice terminal, o que
soluciona o problema da sobrecarga imposta pelos passageiros da atual linha 2
que se vêem obrigados a realizar o transbordo na estação Estácio, que não foi
projetada como terminal, na qual atualmente existe um grande fluxo de
passageiros.
Com a inclusão da linha circular e do vértice CVE, o conjunto de linhas que
formam o grafo parcial H passou a ter a seguinte configuração:
' Linha 1: <formula/>(CRC, LAR, SCL, JBT,
GAV, JAO, ALV, ITA, REC);
'Linha 2: <formula/> (FRE, GAL, FUD, PEN,
BRP, IRJ, VAC, LMC, MAD, TAQ, AUT, ITA);
' Linha 3: <formula/>(CRC, CVE, ESA, SCR,
MRC, TRG, MDA, INH, TOC, LMC);
' Linha 4: <formula/>(MDA, MEI, SPN
' Linha 5: <formula/> (FUD, VIP, CAJ, ROD,
SEV, PRM, CAS, CRC);
' Linha 6: <formula/>(TOC, VIC, IRJ, CNT,
PVN, NIL); e
'Linha 7:<formula/> (GAV, URU, SPN, AFP,
ESA, CTR, CRC, BTF, GOS, LEB, GAV).
Esta nova configuração do grafo parcial H pode ser visualizada através da
Figura_8.
Na terceira fase da HGL, a análise de restrição de grau mostra que CRC
(Carioca) possui grau 5. É necessário, portanto, que se preveja uma extensão da
estação CRC por passagem lateral (sob o Largo da Carioca) de modo a que ela
possa receber a Linha 1.
Existem seis vértices com grau zero (não atendidos): SAD (Santos Dumont), CDD
(Cidade de Deus), CDA (Campo dos Afonso), DEO (Deodoro), SJM (São João de
Meriti) e CAX (Caxias). As vizinhanças correspondentes são as seguintes:
G(SAD) = {CAS} G(DEO) = {CAD, NIL, PVN}
G(CDD) = {ITA, AUT, TAQ} G(SJM) = {NIL, CAX, PVN}
G(CDA) = {TAQ, MAD, DEO} G(CAX) = {SJM, BRP, PVN}
Foram realizadas as seguintes modificações no conjunto de linhas, com o
objetivo de conectar esses vértices ao grafo:
' O trecho (CRC, CAS) passa a pertencer à Linha 1, que dessa forma
passa a ter uma extremidade em CAS;
' A Linha 5 recebe então (CAS, SAD) o que conecta SAD.
As seguintes conexões foram feitas usando-se desigualdades triangulares:
' AUT e TAQ (próximas a CDD): substitui-se (TAQ, AUT) por (TAQ, CDD)
e (CDD, AUT), conectando-se CDD;
' NIL e PVN (próximas a SJM): substitui-se (NIL, PVN) por (NIL, SJM)
e (SJM, PVN), conectando-se SJM;
' SJM e PVN (próximas a CAX): substitui-se (SJM, PVN) por (CAX, SJM)
e (CAX, PVN) permitindo conectar CAX.
NIL, que é terminal da linha 6, é próximo de DEO: a linha 6 pode ser prolongada
através de (NIL, DEO) com o objetivo de conectar DEO. Portanto DEO passa a ser
terminal da linha 6, que pode ser prolongada até CDA que é então conectado.
Para que se obtivesse na configuração final do grafo parcial H o máximo
possível de corredores de deslocamentos radiais e diametrais, foi transferido o
trecho da linha 2: (FRE, GAL, FUD) para a linha 5, de tal modo que a linha 5
passasse a ligar, ao final, a rodoviária e os dois aeroportos.
O conjunto das linhas que compõem o grafo parcial H passou a ser:
'Linha 1: <formula/>(CAS, CRC, LAR, SCL,
JBT, GAV, JAO, ALV, ITA, REC);
'Linha 2: <formula/> (FUD, PEN, BRP, IRJ,
VAC, LMC, MAD, TAQ, AUT, ITA);
'Linha 3: <formula/>(CRC, CVE, ESA, SCR,
MRC, TRG, MDA, INH, TOC, LMC);
'Linha 4:<formula/>(MDA, MEI, SPN);
'Linha 5: <formula/> (FRE, GAL, FUD, VIP,
CAJ, ROD, SEV, PRM, CAS, CRC);
'Linha 6:<formula/>(TOC, VIC, IRJ, CNT, PVN,
CAX, SJM, NIL, DEO, CDA); e
'Linha 7: <formula/>(GAV, URU, SPN, AFP,
ESA, CTR, CRC, BTF, GOS, LEB, GAV).
A proposta final, resultante da aplicação da HGL e incluídas as modificações
adicionais, pode ser visualizada na Figura_9.
3.4 Observações a respeito das linhas obtidas
A cidade do Rio de Janeiro, por sua característica de crescimento radial a
partir do Centro, em função de sua topografia, ressente-se até hoje de ligações
transversais que permitam uma ocupação mais descentralizada. A linha 2 proposta
vem ao encontro deste objetivo, criando um eixo entre o terminal Itaúna na
Barra e a Ilha do Fundão, passando pela Penha. O corredor que hoje existe é
rodoviário e tem intenso tráfego, que busca a saída da Barra em direção à Zona
Norte, o forte pólo comercial e de serviços de Madureira e as saídas rumo à
Baixada Fluminense ou à Avenida Brasil. A garganta que separa os maciços da
Tijuca e da Pedra Branca torna praticamente único esse eixo, por conseguinte
conduzindo-o inevitavelmente à saturação. É importante a chegada desta linha à
Ilha do Fundão por se tratar de um pólo intelectual, científico e importante
centro hospitalar.
A linha 5 estabelece um eixo que liga a Ilha do Governador ao aeroporto Santos
Dumont passando pelo aeroporto Internacional Tom Jobim (Galeão), Ilha do
Fundão, Rodoviária Novo Rio e por toda a área portuária do Rio de Janeiro. Ela
é claramente importante por atender aos mais importantes terminais de
transporte e sanar sérios problemas de deslocamento da cidade.
A linha 7, sendo circular, permite que os deslocamentos sejam feitos nos dois
sentidos com maior flexibilidade operacional, fornecendo ao usuário a
possibilidade de escolha da melhor alternativa, além de proporcionar grandes
melhorias operacionais com a eliminação da manobra dos trens terminais e
redução do intervalo, ampliando a oferta da linha. Com o fechamento deste anel
e a construção da estação Uruguai na Tijuca este bairro estará plenamente
atendido pelo metrô, bem como os bairros de Grajaú e Andaraí por integração com
ônibus.
A evolução urbana mais marcante no município do Rio de Janeiro, nas últimas 3
décadas, ocorreu em direção à Baixada de Jacarepaguá, Barra da Tijuca e Recreio
dos Bandeirantes, em decorrência da saturação da Zona Sul. A linha 1, ao ligar
o Recreio ao Centro, possibilitará expansão e total absorção do crescimento
urbano observado na Barra e no Recreio. Tal ligação, hoje unicamente por via
rodoviária, já saturada, se faz basicamente em 2 eixos: norte ' sul e
leste ' oeste (Avenidas das Américas e Auto Estrada Lagoa ' Barra e Ayrton
Senna), impondo aos moradores da Barra e Recreio pesado ônus em engarrafamentos
diários. Para a Zona Norte esta ligação foi recentemente amenizada com a
implantação da Linha Amarela.
A linha 3, com seu traçado radial tendo como estações terminais a do Largo do
Otaviano e a Carioca, proporciona a ligação direta da Baixada Fluminense ao
Centro da cidade, evitando o transbordo na estação Estácio, que não foi
projetada como terminal, possibilitando a absorção da demanda desta região.
A linha 4, embora seja composta de apenas três estações, se apresenta como uma
sugestão interessante para integrar o Meier ao sistema metroviário, dado o
cruzamento com as linhas 7 e 3, proporcionando a esta região a possibilidade de
maior desenvolvimento econômico. Constitui-se ainda em uma interessante
abertura para futuras ampliações da rede.
A linha 6 expande o sistema metroviário para a zona Norte do Município do Rio e
faz a integração com os municípios de São João de Meriti e Caxias, que são
muito adensados e onde grande parte da população trabalha na região urbana e
suburbana do Rio de Janeiro. Essa linha proporcionará maior desenvolvimento
sócio-econômico desta região.
Vale ressaltar que, pelo sistema aqui proposto, a atual linha 1 seria expandida
e transformada em uma linha circular (linha 7) e a atual linha 2 seria
expandida e dividida em duas, a saber, as linhas 3 e 6.
Pode-se observar que o traçado do sistema proposto não coincide com o da atual
rede ferroviária do Rio de Janeiro, o que permite um estudo da viabilidade de
integração modal, possibilitando uma maior mobilidade por transporte de massa
na cidade, criando uma rede metro ' ferroviária.
4. Conclusões
O trabalho teve como objetivo a apresentação de uma heurística de geração de
linhas para desenvolvimento e crítica de sistemas metroviários, envolvendo
etapas automatizadas e interativas de análise para minimizar o tamanho das
linhas entre vértices periféricos, atender às restrições de grau dos vértices e
solucionar diversas questões de conexão e de estrutura das linhas,
configurando-se como um apoio importante no processo de tomada de decisões.
Ao desenvolver a heurística, além de se utilizarem conceitos da teoria dos
grafos, foram aplicados procedimentos da geometria plana computacional, que
tiveram uma grande importância para a geração de grafos-suporte para testes de
comportamento da heurística.
Ao contrário da habitual temática que envolve a construção de heurísticas, este
trabalho não utiliza exemplos gerados em computador como meio de testes de
performance; o exemplo aqui incluído foi usado para mostrar como os recursos
desenvolvidos foram utilizados para detectar dificuldades práticas que possam
ser encontradas em situações de projeto.
O trabalho apresentou uma aplicação da HGL, que mostrou a exeqüibilidade do
procedimento proposto e forneceu uma seqüência de passos que poderá ser útil em
futuras utilizações. Como os parâmetros nos quais a heurística se apóia são de
fácil alteração, de acordo com as especificidades do problema, a ferramenta é
de grande aplicabilidade, ainda mais em um país como o Brasil, tão carente por
implantações e expansões de sistemas metroviários.
Um plano urbanístico para uma cidade, principalmente quando se trata de uma
grande metrópole, é de suma importância. A heurística permite que o mesmo seja
utilizado através da incorporação de uma valoração dos vértices, capaz de
exprimir a importância de cada um deles, permitindo, também, uma hierarquização
para a construção das linhas e da tecnologia a ser utilizada, de acordo com o
planejamento do espaço sócio-econômico da cidade.
Pode-se visualizar o uso desta ferramenta no processo de tomada de decisão em
outros contextos de planejamento ou expansão, não só de um sistema metroviário,
como também de outras modalidades de transportes em vias exclusivas ou não, por
exemplo, ônibus em vias segregadas (como o que existe em Curitiba), sistema
ferroviário, assim como meio auxiliar em projetos integrados de transportes,
respeitando-se as especificidades de cada um no contexto de sua atuação.
Apêndice: Geração de grafos-suporte
A.1 ' Considerações iniciais
Grafo-suporte
, neste trabalho, é o grafo G = (X,U), onde os nvértices de X = {1,2, ,n}
correspondem a estações metroviárias e as marestas U= {u1,u2, , um},a trechos
possíveis de linha entre duas estações.
Os dados necessários envolvem apenas o número de estações e suas coordenadas
cartesianas. Tendo-se em vista que a informação posicional não é contemplada
pelas estruturas gerais de grafo (a menos das questões de planaridade) foram
utilizadas na programação técnicas de geometria computacional destinadas,
exatamente, a permitir a geração de um conjunto de arestas correspondente a um
grafo planar triangulado.
O grafo é valorado pelos custos de construção dos trechos de linha (arestas) e
se dispõe ainda de uma matriz de demandas entre pares de vértices. Como se
trata de um modelo para teste, trabalhou-se com faixas conhecidas de demanda e
de custo. A demanda entre cada par de vértices xi e xj foi considerada fixa e
expressa pela matriz simétrica P = [pij] i,j=1,2, , n, onde pij é a demanda
horária de passageiros do vértice xi ao vértice xj. Os valores da demanda
pertencem ao intervalo (30.000, 80.000). O custo unitário de construção dos
trechos de linha em dólar/dia/km), depende do tipo de escavação ou da técnica
utilizada.
A opção pela geração de grafos planares triangulados evita que duas arestas
quaisquer se cruzem a não ser em um vértice (o que, ao se passar ao problema,
significa aumento de custo na construção). Além disso todo ciclo de comprimento
maior que 3 tem uma aresta unindo dois vértices não consecutivos, o que tende a
ligar cada vértice aos vértices mais próximos, havendo portanto uma etapa de
pré-otimização ligada a essa construção. A técnica aqui utilizada partilha esta
propriedade com a triangulação de Delaunay, mas aqui a pré-otimização tem um
caráter seletivo, que é o da geração de linhas diametrais de comprimento o
menor possível.
A entrada para um problema da geometria computacional é tipicamente a descrição
de um conjunto de objetos geométricos, cada um como um conjunto de pontos, um
conjunto de segmentos de reta, ou os vértices de um polígono. A saída é sempre
uma resposta para a questão levantada sobre os objetos (por exemplo, se algum
par de segmentos se intercepta) ou talvez um novo objeto geométrico, como o
polígono convexo envoltório (PEC) de um conjunto de pontos. Aqui, naturalmente,
se trabalhou em duas dimensões. Cada objeto de entrada é representado como um
conjunto de pontos {pi}, onde cada pi = (xi,yi) e xi, yi Î R.
O programa que gera os grafos suporte é composto das etapas de geração dos
vértices e de geração das arestas. A saída consiste nos arquivos de adjacência,
de demanda e de custos de cada um dos k grafos gerados.
A.2 ' Geração dos vértices
Na etapa de geração dos vértices delimita-se uma área do plano cartesiano para
a geração dos n pontos. Esta área pode ser a do todo ou parte de uma cidade ou,
no caso de um exemplo fictício, delimitada a priori. Aqui se trabalha com
coordenadas x e y de valores entre 0 e 20 unidades (unidade: quilômetro),
tendo-se portanto uma área de 400 km2 onde a nuvem de pontos será gerada. Esta
área foi adotada para teste por corresponder a um porte suficiente para atender
a uma parte importante do território urbano e suburbano das grandes metrópoles.
Este espaço foi dividido em 100 quadrículas de dimensões 2 x 2, numeradas da
esquerda para a direita e de baixo para cima, definindo-se um vetor de controle
de conteúdo cujas componentes têm valor 1 ou 0 para indicar a presença ou
ausência de ponto. A quadriculação do plano serve para controlar adequadamente
a geração de pontos e também para permitir a especificação eventual de regiões
nas quais, por inexistência de demanda ou por questões de relevo, não se
consideraria a construção de uma estação. Em cada quadrícula é gerado no máximo
um ponto, o que evita a geração de pontos muito próximos. Os limites dos eixos
e das quadrículas podem ser ajustados de acordo com as especificidades.
A.3 ' Geração das arestas
Nesta etapa são aplicados alguns conceitos da geometria plana, como a
determinação do PEC (polígono envoltório convexo) de uma nuvem de npontos e as
propriedades do cruzamento de segmentos de retas. O PEC de um conjunto Q de k
pontos é o menor polígono convexo P onde cada ponto de Q está na borda de P ou
no seu interior, aqui denotado por CH(Q). Uma visualização prática do PEC
considera um prego afixado a uma tábua em cada ponto de Q. O PEC é então o
formato de um pedaço de borracha que circunda todos os pregos (Cormen et al.,
1991).
Foi implementado um procedimento para o cálculo de um conjunto CH(Qi) (i = 1,
, r) que, para i = 1, corresponde ao PEC de todo o conjunto Q, levando à
geração das arestas externas do grafo-suporte. Uma vez determinado um CH(Qi)
são retirados os ki pontos a ele pertencentes. O procedimento é repetido
enquanto restarem 3 ou mais pontos. Desta forma cada novo polígono convexo
obtido estará dentro do anterior e, no centro, ocorrerá uma das três situações:
(a) existe um último polígono convexo: se todos os n pontos pertencerem aos
polígonos convexos gerados; (b) existem apenas dois pontos: faz-se a ligação
deles através de uma aresta; (c) existe apenas um ponto: posteriormente ele
será ligado a todos os pontos do último PEC, formando uma estrela central no
grafo-suporte.
A etapa seguinte corresponde à criação de ligações entre os vértices destes
polígonos, sempre ligando os vértices do polígono mais externo ao que se segue,
até que se atinja a configuração central acima descrita.
No primeiro caso, se o polígono central possuir k vértices, traçaremos as
(k ' 3) menores diagonais deste polígono que não se cruzarem.
Para este cálculo foram feitas algumas modificações no algoritmo conhecido como
Graham's scan. O algoritmo usa a técnica chamada "rotational sweep"
(varredura rotacional), processando os vértices na ordem dos ângulos polares
com um vértice de referência, no caso o vértice vigente de menor valor da
coordenada y (e de menor coordenada x, em caso de empate) (apud Carmo, 2000).
Foi usado ainda um procedimento destinado a verificar se um segmento de reta
(p0 p1) está a direita ou a esquerda de outro (p0 p2). Cada ponto é
representado por suas coordenadas (x,y). Calcula-se o produto cruzado:
(p1 ' p0) (p2 ' p0) = (x1 ' x0) (y2 ' y0) ' (x2 ' x0) (y1 ' y0)
Se o resultado for positivo, então (p0 p1) está a direita a partir de (p0 p2)
(sentido horário); se negativo, está a esquerda (sentido anti-horário) e, se
for nulo, os pontos p0, p1 e p2 são colineares.
O passo seguinte consiste em determinar se duas arestas se cruzam. Trata-se de
um método de duas fases, onde a primeira é uma rápida rejeição: os segmentos de
reta não se interceptam se suas caixas de contorno (menores retângulo de lados
paralelos aos eixos, que contém os segmentos em questão) não tiverem
interseção.
A caixa de contorno do segmento (p1 p2) é então (r1 r2) com o ponto à esquerda
mais baixo r1 = (xmin,ymin) e o ponto à direita mais alto r2 = (xmax,ymax),
onde xmin = min(x1,x2), ymin = min(y1,y2), xmax = max(x1,x2), ymax = max
(y1,y2). Dois retângulos (r1,r2) e (r3,r4), onde r3 = (x'min,y'min) e r4 =
(x'max,y'max) (neste caso, com o primeiro à esquerda e acima) se interceptam se
e somente se a condição:
(xmax ³ x'min) Ù (x'max ³ xmin) Ù (ymax³y'min) Ù (y'max ³ ymin)
é verdadeira. O primeiro par de comparações acima determina se os retângulos se
interceptam em x e o segundo se eles se interceptam em y.
Em seguida o produto cruzado é usado para achar a posição relativa de dois
segmentos (p1 p2) e (p3 p4):
(a) se eles se cruzam, então os sinais do produto cruzado (p3 ' p1) x
(p2 ' p1) e (p4 ' p1) x (p2 x p1) diferem;
(b) se eles não se cruzam, então os sinais dos produtos cruzados são
os mesmos;
(c) se apenas um dos dois produtos for nulo, um dos pontos de um
segmento está sobre o outro segmento;
(d) se os dois produtos forem nulos, os dois segmentos são
colineares.
Os detalhes do algoritmo e de sua execução estão em Carmo (2000) e dizem
respeito ao apresentado em 2.5. A Figura_A.1 mostra os dois PECs obtidos, após
a delimitação dos quais restam 2 pontos, que geram uma aresta. Os vértices
estão rotulados apenas pelos seus índices.
A.4 ' Procedimento para ligação entre as camadas de PEC(s)
Após a obtenção das camadas de PEC(s) faz-se, iterativamente, a ligação dos
vértices mais próximos de duas camadas consecutivas de PECs, obtendo como
resultado um grafo planar triangulado. Limitamo-nos aqui a apresentar os
principais procedimentos usados:
' Procedimento_contar_camadas: conta o número de camadas de polígonos
convexos obtidos da nuvem de n pontos;
' Procedimento_contar_vértices[i]: conta o número de vértices da
camada i e da próxima camada;
' Procedimento_ligar_vértices: liga os vértices da camada externa
(i) aos vértices mais próximos da camada interna (i + 1), sempre
testando se a nova ligação não intercepta alguma outra ligação já
realizada até o momento;
' Procedimento_traçar_diagonais: traça as k ' 3 menores diagonais
que não se interceptam de um polígono convexo com k vértices;
' Procedimento_verificar_quadriláteros: verifica todas as
existências de quadriláteros entre duas camadas consecutivas de PEC
(s), se a diagonal traçada não for a menor efetua-se a troca pela
menor;
' Procedimento_gerar_matriz_de_distâncias: calcula e grava em um
arquivo de saída a matriz de distâncias do grafo-suporte final.
Aplicando o procedimento de ligação das camadas de PEC(s) ao grafo da Figura
A.1 obtém-se o grafo já mostrado naFigura_2.