MINISTÉRIO DA DEFESA EXÉRCITO BRASILEIRO … _err… · A teoria dos grafos propicia agregar um...
Transcript of MINISTÉRIO DA DEFESA EXÉRCITO BRASILEIRO … _err… · A teoria dos grafos propicia agregar um...
1
MINISTÉRIO DA DEFESA
EXÉRCITO BRASILEIRO
DEPARTAMENTO DE CIÊNCIA E TECNOLOGIA
INSTITUTO MILITAR DE ENGENHARIA
CURSO DE GRADUAÇÃO EM ENGENHARIA CARTOGRÁFICA
1º Ten ALEX DE LIMA TEODORO DA PENHA
1º Ten ANGELO CANTALUPPI SILVESTRI DE FREITAS
1º Ten ANTONIO GAUDÊNCIO GUIMARÃES FILHO
IDENTIFICAÇÃO DE ERROS GROSSEIROS EM
DADOS GEODÉSICOS UNIDIMENSIONAIS
Rio de Janeiro
2007
2
INSTITUTO MILITAR DE ENGENHARIA
1º Ten ALEX DE LIMA TEODORO DA PENHA
1º Ten ANGELO CANTALUPPI SILVESTRI DE FREITAS
1º Ten ANTONIO GAUDÊNCIO GUIMARÃES FILHO
IDENTIFICAÇÃO DE ERROS GROSSEIROS EM
DADOS GEODÉSICOS UNIDIMENSIONAIS
Projeto de Fim de Curso apresentado ao Curso de Graduação em Engenharia Cartográfica do Instituto Militar de Engenharia, como requisito parcial para a obtenção do título de Engenheiro Cartógrafo.
Orientador: Prof. Leonardo Castro de Oliveira – D. E.
Rio de Janeiro
2007
3
INSTITUTO MILITAR DE ENGENHARIA
1º Ten ALEX DE LIMA TEODORO DA PENHA
1º Ten ANGELO CANTALUPPI SILVESTRI DE FREITAS
1º Ten ANTÔNIO GAUDÊNCIO GUIMARÃES FILHO
IDENTIFICAÇÃO DE ERROS GROSSEIROS EM DADOS GEODÉSICOS
UNIDIMENSIONAIS
Projeto de Fim de Curso de Graduação em Engenharia Cartográfica do Instituto Militar de Engenharia, como requisito parcial para a obtenção do título de Engenheiro Cartógrafo.
Orientador: Prof. Leonardo Castro de Oliveira – D. E.
Aprovada em 13 de Agosto de 2007 pela seguinte Banca Examinadora:
_______________________________________________________________
Prof. Leonardo Castro de Oliveira – D. E.
_______________________________________________________________
Cap QEM Vagner Braga Nunes Coelho – M. C.
_______________________________________________________________
Cap QEM Douglas Corbari Corrêa – M. C.
_______________________________________________________________
Cap QEM Marcos de Meneses Rocha – M. C.
Rio de Janeiro
2007
4
SUMÁRIO
LISTA DE ILUSTRAÇÕES................................................................................................... 06
ABREVIATURAS E SIGLAS ............................................................................................... 08
AGRADECIMENTOS.......................................................................................................... 09
RESUMO............................................................................................................................. 10
ABSTRACT.......................................................................................................................... 11
1 INTRODUÇÃO......................................................................................................... 12
1.1 Objetivo.................................................................................................................... 13
1.2 Justificativa............................................................................................................... 13
1.3 Fases do Projeto .................................................................................................... 13
1.4 Resultados Esperados............................................................................................. 14
1.5 Recursos Disponíveis.............................................................................................. 15
1.6 Descrição do Trabalho............................................................................................. 15
2 TEORIA DOS GRAFOS E CÓDIGO “TODOS OS CAMINHOS - PGC”................... 16
2.1 Observações............................................................................................................ 16
2.2 Erros......................................................................................................................... 18
2.3 Teoria dos Grafos.................................................................................................... 19
2.4 Código “Todos os Caminhos - PGC”.......................................................................... 22
2.4.1 Algoritmo Deep First Search - DFS............................................................................ 22
2.4.2 Técnica Backtracking................................................................................................ 22
2.4.3 Código “Todos os Caminhos - PGC”.......................................................................... 23
2.5 Grandezas Geodésicas Unidimensionais................................................................... 24
3 TESTES E PGC2 .................................................................................................... 27
3.1 Testes no PGC......................................................................................................... 27
3.2 Novo Código “Todos os Caminhos – PGC2”.......................................................... 32
5
4 APLICAÇÃO .......................................................................................................... 35
4.1 Simulação ............................................................................................................... 35
5 CONCLUSÕES........................................................................................................ 45
6 REFERÊNCIAS BIBLIOGRÁFICAS ...................................................................... 46
7 BIBLIOGRÁFIA ...................................................................................................... 48
APÊNDICE A – ROTINA DE TODOS OS CAMINHOS - PGC................................... 49
APÊNDICE B – SAÍDAS 1,2,3 DO PGC.................................................................... 53
APÊNDICE C – SAÍDAS DOS CAMINHOS DO PGC................................................ 55
APÊNDICE D – EXEMPLOS 1, 2 e 3 do PGC2 ........................................................ 57
APÊNDICE E – ALGORITMO PGC 2 – PATHS ...................................................... 63
APÊNDICE F – CD COM SIMULAÇÕES
6
LISTA DE ILUSTRAÇÕES
FIG. 2.1 Exemplo de medição direta............................................................................. 17
FIG. 2.2 Exemplo de medição indireta.......................................................................... 17
FIG. 2.3 Exemplos dos tipos de erros........................................................................... 19
FIG. 2.4 Exemplo de Grafo........................................................................................... 20
FIG. 2.5 Vértice isolado................................................................................................. 20
FIG. 2.6 Caminho Euleriano: 3, 4, 5, 3, 2, 5, 6, 2, 1, 6.................................................. 21
FIG. 2.7 Adjacência entre estados do Brasil................................................................. 21
FIG. 2.8 Fluxograma da rotina implementada para listagem de todos os caminhos.... 24 FIG. 2.9 Nivelamento Geométrico................................................................................. 25
FIG. 2.10 Esquema de implantação de rede gravimétrica.............................................. 26
FIG. 3.1 Exemplos de redes regulares.......................................................................... 27
FIG. 3.2 Gráfico da relação entre o número de vértices e a quantidade de caminhos
gerados no PGC..............................................................................................
29
FIG. 3.3 Exemplo genérico de rede com 42 vértices.................................................... 30
FIG. 3.4 Modelo do Arquivo de saída do PGC2............................................................ 33
FIG. 4.1 Exemplo de rede simulada.............................................................................. 35
7
FIG. 4.2 Estrutura arquivo de entrada........................................................................... 35
FIG. 4.3 Parte do Arquivo de Saída do PGC2-paths.................................................... 35
FIG. 4.4 Estrutura arquivo de entrada com erro............................................................ 36
FIG. 4.5 Arquivo de saída de PGC2-paths.................................................................... 37
FIG. 4.6 Arquivo de saída de PGC2-cycles.................................................................. 37
FIG. 4.7 Rede e dados de entrada................................................................................ 38
FIG. 4.8 Caminhos Gerados pelo PGC2 - cycles.......................................................... 39
FIG. 4.9 Saída PGC2 – paths sem a medição 7�8...................................................... 42
FIG. 4.10 Inferência do valor na medição 7�8............................................................... 42
FIG. 4.11 Pares de pontos com maior nº de caminhos................................................... 43
8
ABREVIATURAS
Dev - Development
Ms - Microsoft
PGC - Penha, Guimarães e Cantaluppi
DFS - Deep First Search
GNU - GNU is not UNIX
MMQ - Método dos Mínimos Quadrados
RAM - Random Access Memory
SIGLAS
IBGE - Instituto Brasileiro de Geografia e Estatística
IME - Instituto Militar de Engenharia
ABENDE - Associação Brasileira de Ensaios Não Destrutivos e Inspeção
UFSC - Universidade Federal de Santa Catarina
9
AGRADECIMENTOS
Gostaríamos de agradecer, primeiramente, às nossas famílias por todo apoio e
incentivo.
Aos amigos e professores, obrigado pelo dia a dia.
Agradecemos também ao nosso orientador e professor, Leonardo Castro de
Oliveira, pela paciência, pelas revisões, pela motivação, conselhos sobre o texto e pela
ajuda.
10
RESUMO
A identificação e a eliminação de erros de natureza grosseira é ação de relevância no processo de construção das Redes Geodésicas. A aplicação da Teoria dos Grafos a um conjunto de dados geodésicos unidimensionais é trabalhada como insumo para o desenvolvimento de formas de ação automatizada de verificação e identificação de erros grosseiros em observações. No projeto buscou-se o desenvolvimento de novo algoritmo que pudesse agregar valor e facilitar futuros processamentos geodésicos. Nesse sentido, desenvolveu-se um algoritmo, implementado em C++, chamado “Todos os Caminhos – PGC2”, compilado no sistema operacional linux pelo compilador g++ (GNU C++). Geralmente apresentado como um algoritmo simples de busca em profundidade para solucionar problemas com grafos, o Deep First Search – DFS, foi o primeiro embasamento apresentado na construção da rotina de busca de “Todos os Caminhos - PGC”, código que originou o PGC2. Utilizou-se a Técnica Backtracking que garante a solução enumerar todas as possibilidades de caminho; eficiência - nunca testando uma solução mais de uma vez; e otimização, ao descartar enumerações parciais que não conduzem ao resultado desejado. Após os aspectos de desenvolvimento do Código PGC passou-se à fase de testes onde se observou um aumento exponencial do número de caminhos ao aumentar o número de vértices. Notou-se, assim, a necessidade de revisão no código por apresentar limitações para uma rede com grande quantidade de pontos. Desenvolveu-se então o programa PGC2, construído após algumas restrições do programa PGC, composto por duas rotinas: PGC2-paths e PGC2-cycles. Trata-se de um código mais simples e otimizado. Os levantamentos topográficos e geodésicos são objeto de grande discussão e pesquisa. Há uma preocupação constante com essa análise e rigor matemáticos dos conceitos geodésicos, além da confiabilidade da precisão a ser alcançada na definição de vértices e limites. Dessa forma, o trabalho em questão pretende contribuir com soluções para este problema geodésico, apresentando e buscando desenvolver soluções. PALAVRAS CHAVES: Geodésia, Teoria dos Grafos, Erros Grosseiros
11
ABSTRACT
The identification and the elimination of the mistakes are really important to the process of building Geodetic Networks. With Graph Theory in a set of geodetic unidimentional data, it´s been developed an automatic process that permits the verification and the identification of observations which have problems.
This project has developed a new algorithm that can make easier future geodesy process. This algorithm has been written in C++ called “Todos os Caminhos – PGC2”, in Linux operational system, with a g++ (GNU C++).
It was used the Deep First Search – DFS, the first applied theory to search routine in “Todos os Caminhos - PGC”, origin of PGC2. The use the Backtracking technique: guarantees that the solution will be find, because it lists all solutions; guarantees efficiency, never testing a solution more than once and can be optimized because it eliminates partial results that can not give the desired result.
After development steps, Código PGC initiated test steps where it could be observed an exponential increase of the number of ways. So it was necessary to make an upgrade in the code because it had some problems with big numbers of points.
So it was developed a software named PGC2, created after some restrictions of PGC program, compound by two routines: PGC2-paths and PGC2-cycles. This code is simple and optimized.
Topographic and geodetic works are object of important scientific discussion. There is a concern about the analysis of the geodetic concepts and mathematic modeling of vertices and limits. The development of computer routines and softwares brings minimization of data errors. This way this research intends to contribute to find solutions for some geodetic problems. KEYWORDS: Geodesy, Graph Theory, Mistakes
12
1. INTRODUÇÃO
“Geodésia é a ciência que se ocupa da determinação da forma, das dimensões e
do campo de gravidade da Terra” (IBGE, 2006). Desta forma, ela necessita de um
conjunto de dados a serem tratados, processados e analisados para a geração de novos
conhecimentos.
O objetivo de um sistema de coordenadas geodésicas é posicionar e descrever o
movimento de objetos terrestres. Sendo assim, é uma abstração matemática que utiliza
parâmetros associados à Terra, sendo eles de natureza geométrica, física e até de
natureza geodinâmica. Como exemplo temos os sistemas de posicionamento por
satélites, que associam um conjunto de coordenadas a cada ponto do globo segundo um
referencial determinado.
As atividades geodésicas são objeto de grande discussão e pesquisa. Há uma
preocupação constante com a análise e rigor matemáticos dos conceitos geodésicos e da
confiabilidade da precisão a serem alcançadas na definição dos vértices e dos limites. No
aspecto profissional é interessante a geração de rotinas computacionais e,
conseqüentemente, softwares para os profissionais que efetuam os levantamentos,
minimizando os erros que porventura venham a existir, inerentes aos trabalhos de campo.
Já faz tempo que o Método dos Mínimos Quadrados (MMQ)1 é usado pela Geodésia para
a distribuição de erros existentes em observações, contudo os livros técnicos e manuais
em português a respeito do assunto são escassos, assim como existem poucos
profissionais interessados nesse ramo de análise de erros. No uso do MMQ, supõe-se a
inexistência de erros grosseiros e sistemáticos nos dados da rede. Sendo assim, novas
metodologias têm de ser apresentadas para permitir atingir o objetivo da identificação dos
erros. É neste segmento que o projeto se insere.
A teoria dos grafos propicia agregar um conhecimento alternativo para o problema
de erros em observações, dado que um grafo é um conjunto de pontos, chamados
vértices (ou nós), conectados por linhas, chamadas de arestas – semelhante à estrutura
atual de uma rede geodésica. Esses novos conceitos possibilitam abordar o suporte à
identificação de erros grosseiros de uma forma diferente, buscando a otimização do
tempo de execução e a redução de custos.
1 O fundamento matemático é a minimização da soma dos quadrados dos resíduos das observações.
13
1.1. Objetivo
Desenvolver um processo, parte automatizado, parte ainda interagindo com o
especialista, que permita a verificação e identificação de observações com erros
grosseiros. Tal procedimento tem compromisso direto com a qualidade de dados para a
construção de redes geodésicas.
1.2. Justificativa
A Geodésia exige várias medições com o objetivo de realizar o transporte de
coordenadas. As medições, na verdade, devem ser entendidas como as observações
coletadas em campo por equipamentos de natureza bem específica: medições de
distâncias, ângulos, coordenadas e assim por diante. Apesar de todo cuidado no uso de
aparelhos de alta precisão, bem como no emprego de modelos matemáticos, os erros nas
coordenadas são inevitáveis devido à presença de erros aleatórios. Uma rede geodésica
só é possível de ser construída com dados consistentes. Deste modo, uma compreensão,
uma análise, um dimensionamento e um tratamento estatístico precisam ser realizados
para que erros grosseiros sejam eliminados e outros sejam identificados e minimizados.
1.3. Fases do Projeto
Neste projeto, tem-se como base um conjunto de estações e de dados coletados
em um levantamento, sendo de natureza unidimensional, como por exemplo: ∆ H
(diferenças de altura) ou ∆ g (diferenças de gravidade). Uma rede é formada por vários
pontos que estão interconectados geometricamente. A teoria dos grafos fornece
algoritmos que possibilitam listar caminhos dentro de uma rede.
A grande vantagem computacional do uso da teoria dos grafos está na
capacidade de prover meios para detecção de erros, inerentes a estes dados, de maneira
eficiente e ainda parcialmente automática para atender às especificações técnicas, além
de contribuir para outras atividades de cálculos como, por exemplo, determinação de
distâncias entre vértices. O foco desejado é garantir a segurança no processamento de
dados, fazendo com que se obtenham resultados confiáveis (dentro de variações pré-
estabelecidas).
O presente projeto partiu de uma análise bibliográfica a fim de identificar os
fundamentos e conceitos relativos à teoria dos grafos e a redes geodésicas que serviriam
14
de subsídio para o desenvolvimento dos trabalhos. Quanto à teoria dos grafos, busca-se a
capacitação visando aplicação na rede de pontos, conhecimento que é essencial para a
condução do projeto, além da verificação da existência de algoritmos que estejam
alinhados com o objetivo do projeto. No que se refere à rede geodésica, busca-se
identificar seus elementos, ou seja, os dados unidimensionais e os valores associados, se
for o caso. A teoria dos grafos será direcionada para os nós e parâmetros da rede. Com
isso, será objeto do projeto a listagem de todos os caminhos possíveis entre dois pontos
ou saindo e chegando no mesmo ponto (circuitos fechados). Cada caminho irá possuir
dados de altitude e distâncias relativas2. Dessa forma, diversos desvios (devido à
variação das altitudes ou distâncias) serão obtidos pela comparação sistemática dos
dados coletados.
Em paralelo ao objetivo do projeto tem-se a busca, a análise, a comparação e a
otimização de algoritmos aplicados que satisfaçam as necessidades do trabalho em
questão e o desenvolvimento, se possível, de novo(s) algoritmo(s) que possam agregar
valor e facilitar o conhecimento e o desenvolvimento de futuros processamentos
geodésicos. Havendo algoritmos que sejam aplicáveis ao projeto, estes serão o elo de
ligação da modelagem da rede pela teoria dos grafos com o aspecto computacional que
será desenvolvido. Esta visa analisar índices de estabilidade dos algoritmos dos grafos e
até mesmo otimizá-los.
A documentação de todo o projeto tem importância fundamental, pois os códigos
gerados têm como exigência a compatibilidade com outros códigos. A documentação das
entradas e saídas, dos algoritmos e da precisão de cada método deverá ser armazenada
em meio digital.
1.4. Resultados Esperados
Para se atingir o objetivo do projeto ao término do mesmo tem-se um programa
consolidado cujos dados de entrada sejam os pontos da rede geodésica e suas ligações.
Os dados de saída serão informações que servirão para a verificação e identificação de
erros grosseiros. O código-fonte possibilitará as alterações mais específicas e o algoritmo
poderá ser implementado em diversas linguagens de programação.
15
1.5. Recursos Disponíveis
O presente projeto conta com o apoio da Seção de Ensino de Engenharia
Cartográfica do IME e foi desenvolvido no Laboratório de Posicionamento. O recurso
computacional utilizado foi um Microcomputador Celeron, 2.66Ghz, 80Gb HD e 512 Mb
RAM, sistema operacional Linux Ubuntu 7.04, para o desenvolvimento e o teste dos
códigos, além dos processamentos dos dados pertinentes ao projeto. O compilador
utilizado foi o Dev C++, da Bloodshed Software (gratuito) e o g++ (GNU C++).
1.6. Descrição do Trabalho
O trabalho é desenvolvido ao todo em torno de quatro capítulos. No segundo
capítulo são abordados os embasamentos teóricos que permeiam o projeto, tanto os
relativos à parte da Geodésia quanto aqueles relacionados à parte computacional.
O capítulo três se destina à realização de testes e simulações sobre a solução
proposta. Neste ponto são identificadas as limitações e contribuições oriundas do projeto
em questão, além de apresentar o programa desenvolvido, PGC2.
No capítulo quatro são analisadas as condições de aplicabilidade da solução,
levando-se em consideração a extensão da rede geodésica brasileira.
2. TEORIA DOS GRAFOS E CÓDIGO “TODOS OS CAMINHOS - PGC”
16
A Teoria dos Grafos é um conjunto de conceitos onde são necessárias definições
para que exista um entendimento do assunto e uma verificação da associação dos novos
conceitos com as redes geodésicas e os dados coletados. Conceitos básicos da teoria
dos grafos como vértices, arestas e caminhos foram associados a pontos, medições e
somatório de medições envolvidas a cada ponto da rede de dados coletados.
Partiu-se da rotina desenvolvida em PENHA et alii (2006), chamada de “TODOS
OS CAMINHOS - PGC” (apêndice A), associando o algoritmo de busca por profundidade
(Depth First Search - DFS) do PGC a uma nova técnica denominada Backtracking. Este
recurso elimina dois casos de importante consideração. O primeiro deles diz respeito ao
crescimento exponencial de dados intermediários e caminhos obtidos, quando a rede
apresenta grande número de vértices e observações. O segundo é aquele que modela o
grafo como uma árvore, no qual se inicia em um vértice escolhido (vértice de partida) e se
percorrem todos os ramos da árvore para encontrar um outro vértice também escolhido
(vértice de chegada).
Seguindo PENHA et alii (2006), a linguagem de programação é uma forma de
materialização do projeto no que se refere a implementação do algoritmo. A rotina foi
testada utilizando-se a linguagem C++.
2.1. Observações
Ao se falar em observações, faz-se necessário lembrar que não é possível
realizar a medida de uma grandeza sem que haja interação entre a grandeza medida e o
instrumento de medida. Nesta interação o valor medido não é exatamente igual ao real,
mas sim um valor aproximado com erros embutidos nestas observações. Os erros
inerentes ao processo de medida podem ter, entre outras razões, origem em falhas
humanas, na imperfeição dos equipamentos ou, ainda, na influência das condições
ambientais que se apresentam no momento da medição.
Desta maneira, para uma medida de alta confiança adota-se tanto o procedimento
de se executar várias medidas de uma mesma grandeza assim como a medição super
abundante de grandezas. Exemplificando: dado um triangulo, mede-se cada ângulo 5
vezes (repetibilidade) e, mesmo não precisando, todos os 3 ângulos (controle
geométrico). Assim, define-se um conjunto redundante de valores de um mesmo
fenômeno. A partir deste conjunto, é preciso extrair um resultado que represente a
grandeza medida com um determinado nível de confiança e de maneira única. A
17
aplicação de um modelo matemático auxilia na execução desta tarefa de determinação,
impondo parâmetros e limites de aceitação a fim de se obter um resultado dentro da
precisão desejada.
Há dois tipos de métodos de observação: observações diretas e indiretas. No
primeiro caso as medidas são executadas sobre as próprias grandezas como incógnitas.
Um exemplo simples de medição direta seria a medição das dimensões de um objeto
usando um paquímetro, como ilustrado na figura 2.1.
FIG. 2.1 – Exemplo de medição direta (HENRIQUES, 2004).
No segundo caso, as medidas desejadas são obtidas de outras grandezas
associadas por relações funcionais conhecidas. A figura 2.2 ilustra o método usado por
Eratóstenes para medir a circunferência da Terra.
FIG. 2.2 – Exemplo de medição indireta (SALVIANO e SANTIAGO, 2006).
Na Geodésia, assim como em outras áreas do conhecimento, o ajustamento das
observações far-se-á necessário para adequar os valores das medidas de modo que eles
18
obedeçam a um modelo matemático pré-definido. Isso porque valores coletados trazem
consigo erros inerentes ao processo de obtenção e os mesmos devem ser minimizados e,
se possível, eliminados. Por exemplo, temos o problema da refração na medida de
distâncias.
2.2. Erros
A teoria dos erros é de fundamental importância no desenvolvimento deste
projeto. Vários conceitos relacionados a esta teoria ajudam a formar a base para o
entendimento das decisões tomadas, visto que a análise de como se processa cada tipo
de erro pode ajudar na sua eliminação. Segundo a classificação tradicional, os erros
podem ser denominados grosseiros, sistemáticos ou acidentais.
Os erros grosseiros são muitas das vezes frutos da falta de atenção dos
profissionais envolvidos nas medições de campo, por exemplo. Tal fato pode conduzir a
uma troca de dígitos no momento da anotação, trocas de sinal, anotação de um dado no
local errado dentro de uma tabela e assim por diante. Mesmo os processos
automatizados (como o rastreio por satélites) podem sofrer influência de erros grosseiros,
visto que os códigos transmitidos podem sofrer interferência de ruídos. É fácil detectar
erros desta natureza quando apresentam valores muito discrepantes, contudo podem se
tornar de difícil identificação em outros casos, necessitando assim testes estatísticos para
a avaliação da possibilidade de se descartar determinada medida.
Os erros sistemáticos são aqueles determinados por causas conhecidas
(problemas no equipamento, procedimentos incorretos, refração atmosférica etc). Os
erros de refração, por exemplo, influenciam tanto as medidas angulares como as lineares,
sejam feitas com equipamentos analógicos (teodolito e mira) ou eletrônicos
(distanciômetros e rastreadores de satélite). Tratam-se, portanto, de influências que
devem ser eliminadas. O planejamento dos trabalhos de campo pode auxiliar na redução
desses erros.
Os erros sistemáticos não estão relacionados somente aos equipamentos. O
operador que sempre executa uma medida de tempo em atraso ou que sempre realiza a
leitura de uma mira um pouco acima da linha é uma fonte de erros sistemáticos. Cabe
ressaltar o caráter cumulativo dos erros sistemáticos e da impossibilidade de sua
eliminação, o que pode gerar problemas em trabalhos de grande porte.
19
Os erros acidentais (ou aleatórios) não possuem causa conhecida e podem
ocorrer a cada momento em um sentido. Por apresentarem, segundo a teoria, distribuição
normal, eles tendem a se neutralizar quando o número de observações aumenta.
Desta forma, uma metodologia a se adotar é eliminar os erros grosseiros e
acidentais, visto que os erros sistemáticos não podem ser eliminados. A figura 2.3 ilustra
o caso de um atirador que executa disparos sobre um alvo. Pode-se dizer que os tiros que
ficam fora do alvo constituem erros grosseiros e os tiros que ficam próximos, porém fora
do alvo, representam os erros sistemáticos. Os tiros que ficam juntos e sobre o alvo
representam apenas erros acidentais.
FIG. 2.3. - Exemplos dos tipos de erros.
2.3 Teoria dos Grafos
A Teoria dos Grafos apresenta pontos como vértices. Ligados, formam as arestas
que, por sua vez, fornecem as diferenças das grandezas unidimensionais por meio das
observações que foram coletadas em levantamentos de campo, tais como altimetria ( ∆ H)
e gravimetria ( ∆ g), por exemplo. A figura 2.4 a seguir apresenta um exemplo de grafo.
20
FIG. 2.4 - Exemplo de Grafo (CRISTINA e PIMENTEL, 2006).
Na teoria dos grafos, define-se V como vértices ou nós do grafo, sendo um
conjunto finito não-vazio e A como arestas, sendo um conjunto de pares não ordenados
de elementos distintos de V. Assim sendo, se cada aresta a pertencente a A, tem-se o
par de vértices a = (v,w), onde os vértices v e w são os pontos extremos da aresta, como
pode ser notado na figura 2.4.
Uma analogia a geodésia permite, a priori, assumir os vértices como estações de
nivelamento e gravimétricas. As arestas seriam as observações entre os vértices, por
exemplo, os desvios ou as diferenças de gravidade.
Convém definir que não serão usados vértices isolados (aqueles que não
apresentam ligações por arestas), como na figura 2.5, pois não faria qualquer sentido em
se tratando de dados de natureza unidimensional. Tem-se particular interesse nas
arestas, pois estão associados a esses dados.
FIG. 2.5 - Vértice isolado (CRISTINA e PIMENTEL, 2006).
Segundo CRISTINA e PIMENTEL (2006), tem-se ainda que um caminho do
vértice v1 ao vértice vk é uma seqüência de vértices v1, v2, ..., vk tal que (vj, vj+1) pertence a
A, 11 −≤≤ kj ; diz-se que v1 atinge e alcança vk. Há particular interesse em caminhos
eulerianos, como o da figura 2.6, que contém cada aresta do grafo exatamente uma vez.
21
FIG. 2.6 - Caminho Euleriano: 3, 4, 5, 3, 2, 5, 6, 2, 1, 6.
Segundo FEOFILOFF (2006), por exemplo, o grafo dos estados do Brasil é
definido assim: cada vértice é a capital de um dos estados da República Federativa do
Brasil; dois estados são adjacentes se têm uma fronteira comum. Um exemplo ilustrativo
é encontrado na figura 2.7.
FIG. 2.7 - Adjacência entre estados do Brasil.
O conjunto de caminhos é necessário para se fazer comparações de resultados
advindo das medições, como será visto no decorrer do texto. Cada caminho representa a
ligação geométrica (altimetria ou altura, por exemplo) entre os vértices considerados.
Mediante a comparação dos resultados das variações obtidas por diferentes caminhos
serão obtidos desvios a fim de determinar erros grosseiros nos dados da rede.
22
2.4. Código “Todos os Caminhos - PGC”
2.4.1. Algoritmo Deep First Search - DFS
Geralmente apresentado como um algoritmo simples de busca em profundidade
para solucionar problemas com grafos, o Deep First Search – DFS, foi o primero
embasamento apresentado em PENHA et alii (2006) na construção da rotina de busca de
“Todos os Caminhos - PGC3”.
O DFS percorre todo vértice adjacente que ainda não tenha sido visitado. Seu
“procedimento de busca de um determinado vértice v parte da raiz e percorre todos os
nós que podem ser alcançados a partir de v. O algoritmo de busca utiliza como parâmetro
exclusivo o vértice raiz (atribuído por v) e começa a partir das conexões w das arestas
existentes do tipo (v, w). O DFS pode gerar diferentes ordens de busca conforme a sua
implementação” (PENHA et alii, 2006).
Dessa forma, o DFS encerra sua execução quando todos os vértices ligados a v
forem percorridos. Sendo assim, ele pode ser usado para analisar todos os vértices de
uma estrutura, o que o torna pouco eficiente para o fim a que se destina, dada a
complexidade, por exemplo, de uma rede geodésica nacional.
2.4.2. Técnica Backtracking
Baseia-se na adição de um novo vértice à lista de caminhos somente após haver
a completa varredura do vértice atual. A partir disso, conforme WEST (2006), o algoritmo
avalia estas soluções possíveis parcialmente construídas da seguinte maneira:
- se uma solução parcialmente construída puder continuar a ser desenvolvida,
sem violar as restrições do problema, será feito usando-se a primeira opção legítima
remanescente para o próximo componente;
- se não houver opção legítima para o próximo componente, não é necessário
considerar nenhuma alternativa para qualquer componente remanescente;
- neste caso, o algoritmo recua/retrocede (Backtrack) para trocar o último
componente da solução parcialmente construída por sua próxima opção.
3 O nome do código PGC representa as iniciais dos nomes de seus autores: Penha, Guimarães e Cantaluppi.
23
Esta técnica, de acordo com SKIENA e REVILLA (2003), possui algumas
características importantes:
- busca sistemática de todas as possíveis soluções;
- garante que a solução será encontrada, ao enumerar todas as possibilidades;
- garante eficiência, nunca testando uma solução mais de uma vez;
- pode ser otimizada, ao descartar enumerações parciais que não conduzem ao
resultado desejado;
Assim, obtém-se de uma forma resumida a essência da técnica do Backtracking.
Particularmente, deve ser dada atenção para a última característica, observada por
SKIENA e REVILLA (2003), a qual agregará valor à fase de testes do código.
2.4.3. Código “Todos os Caminhos - PGC”
Este é o insumo para o projeto. Possui a lógica do algoritmo backtracking e da
busca em profundidade para a listagem de todos os caminhos. Foi implementado em
linguagem C++. O programa possui três fases principais: leitura de dados de entrada;
procura de caminhos entre dois pontos; e listagem dos caminhos.
A entrada de dados está dividida em linha de controle e os pontos. A linha de
controle é constituída pela quantidade de pontos da rede e pela quantidade de
observações. Na região de registro dos pontos, o formato segue a forma de numeração
dos pontos em duas colunas e cada observação coletada na terceira coluna (figura 2.8).
Após as iterações de busca concluídas, obtém-se a saída do programa no
formato de texto. Essa listagem de caminhos está sendo exibida em tela, porém também
pode ser exibida em arquivo no formato *.txt.
Com o objetivo de melhor visualizar o funcionamento do código, de acordo com
PENHA et alii (2006), é apresentado um fluxograma ilustrativo.(figura 2.8 )
24
FIG. 2.8 - Fluxograma da rotina implementada para listagem de todos os caminhos.
2.5. Grandezas Geodésicas Unidimensionais
A Geodésia pode ser dividida em 3 ramos principais: Geodésia Física,
Geométrica e Celeste. Ainda existe um outro ramo que pode ser também citado, que é a
geodinâmica, a qual seria o estudo dos movimentos de componentes da Terra.
Cada ramo possui um determinado objetivo e para que este seja atingido é
necessário que se obtenha conhecimentos específicos para cada um deles, ou seja,
determinação de algumas variáveis, construção de modelos, técnicas observacionais, etc.
Cada parte da geodésia pode ser, de maneira simplista, caracterizada por um conjunto de
produtos, associados a certas grandezas, como: gravidade, coordenadas cartesianas,
altitude ortométrica, altitude geométrica, ondulação geoidal, entre outras.
A obtenção desses produtos também é dependente de observações, ou seja,
valores medidos. Este é o aspecto principal para determinações da precisão e da escolha
de métodos. Para este projeto, o foco está em dados relativos, ou seja, variação das
grandezas unidimensionais obtidas por observações.
A altimetria possui vários métodos para determinação da altitude, dentre os quais
destaca-se o nivelamento geométrico. Na figura 2.9 o nível da luneta apontado
sucessivamente para as miras graduadas postadas em A e B permite leituras V (de vante)
e R (de ré), cuja simples diferença corresponde ao desnível ∆ hi entre os mencionados
pontos.
FIM
E
L
S
E
I≠F
V E
V1 V2 custo
V3 V4 custo
V5 V6 custo
. . . . .
Vn-1Vn custo
Estrutura dos
dados de entrada
Find Path Print Path
Next path
Path size
I
F
T
R
U
E
FOR THEN
Onde: V����nºvértices(pontos), E����nºarestas(observações),
custo���� valores unidimensionais, I����vértice inicial, F����vértice final
FALSE
First Path
25
FIG. 2.9 – Nivelamento Geométrico (ABENDE, 2006).
A repetição da operação de nivelamento até a estação N conduz à diferença de
altitudes entre os pontos extremos pela somatória dos desníveis parciais: (GEMAEL,1999)
∑∆=− iAN hhh
A Geodésia Física, por meio da gravimetria, tem por finalidade o estudo do campo
de gravidade, possibilitando, a partir dos seus resultados, aplicações na área da
Geociência como por exemplo, a determinação da forma e dimensões da Terra, a
investigação da crosta terrestre e a prospecção de recursos minerais (IBGE, 2006).
Segundo GEMAEL, 1999, entre os equipamentos de medição adotados pela
gravimetria está o gravímetro. Instrumentos estes que são pequenos, leves e de manejo
simples, não obstante a delicadeza de sua constituição interna, produziram, em termos de
gravimetria, o mesmo impacto que os distanciômetros eletrônicos na geodésia
geométrica. Na figura 2.10 está representada uma implantação de rede gravimétrica de
referência no Paraná, onde os dados foram obtidos por gravímetros.
26
FIG. 2.10 – Esquema de implantação de rede gravimétrica (UFSC, 2006).
Atrelados a estes métodos de medição estão as especificações técnicas. Esses
aspectos são de fundamental interesse para qualquer tomada de decisão ou realização
de um projeto específico.
O erro grosseiro, o qual é o fato motivador neste projeto, é inerente a qualquer
método empregado para determinação de uma grandeza unidimensional. Sua detecção
em qualquer observação é essencial para que se obtenha uma precisão que seja
compatível com o método e o aparelho empregado.
27
3. TESTES E PGC2
3.1. Testes no PGC
Após os aspectos de desenvolvimento relacionados à rotina PGC, passa-se à
fase de testes para que se possa verificar a robustez do sistema. Para tanto, uma primeira
simulação é relativa ao dimensionamento da rede, fundamental para a aplicação às redes
unidimensionais desejadas, particularmente aos aspectos de extensão e quantidade de
estações e medições das redes que geram um excessivo trabalho computacional do
PGC. Para que não houvesse prejuízos dessa natureza foram feitos diversos testes com
redes regulares e inicialmente pequenas, aumentando gradativamente o seu tamanho.
Foram realizados exemplos inicialmente como os que se seguem na figura 3.1.
FIG. 3.1 – Exemplos de redes regulares: exemplo 1 (com 4 vértices); 2 (com 5 vértices); 3
(com 6 vértices); e exemplo 4 (com 5 vértices), em todas as ligações possíveis da rede.
Coloca-se para estudo os Exemplos 1 (com 4 vértices), 2 (com 5 vértices) e 3
(com 6 vértices) que apresentam a característica de se aumentar um vértice e duas
arestas de um para o outro, para a realização da análise computacional. Enquanto o
exemplo 4 (com 5 vértices) apresenta todas as ligações possíveis em uma rede desta
ordem.
Assim, observa-se inicialmente os exemplos 1, 2 e 3 (apêndice B). Analisando
primeiramente os resultados listados dos caminhos percorridos por esses exemplos, onde
28
se acrescenta um vértice e duas arestas. Observa-se um aumento exponencial do
número de caminhos. Nota-se então que: o exemplo 1 (com as leituras 1 - 2, 1 - 3, 1 - 4,
2 - 3, 2 - 4, 3 - 4) apresenta 19 caminhos percorridos; o exemplo 2 (com as leituras 1 - 2,
1 - 3, 1 - 4, 1 - 5, 2 - 3, 2 - 4, 2 - 5, 3 - 4, 3 - 5, 4 - 5) apresenta 48 caminhos percorridos e
o exemplo 3 (com as leituras 1 – 2, 1 – 3, 1 – 4, 1 – 5, 1 – 6, 2 – 3, 2 – 4, 2 – 5, 2 – 6,
3 – 4, 3 – 5, 3 – 6, 4 – 5, 4 – 6, 5 - 6) apresenta 109 caminhos percorridos. Como pode
ser visto na tabela 3.1 a seguir:
TAB. 3.1 - Relação entre a quantidade de vértices e os caminhos por eles gerados.
Vértices Caminhos gerados
adicionando-se duas arestas
3 6
4 19
5 48
6 109
7 223
. . . . . .
42 ≈ 7 x 10 16
. . . . . .
64.000 ≈49910
Acrescentando a isso outros exemplos processados (constantes no apêndice C),
mas com as mesmas características, tem-se um gráfico que representa o aumento do
trabalho computacional ao se aumentar um vértice adicional com duas arestas, como
pode ser visto na figura 3.2:
29
Relação nº de Vértices X Caminhos Gerados
3 4 5 6 76 1948
109
223y = 2,8516e0,8978x
0
100
200
300
Quantidade de Vértices (x)
To
tal d
e C
amin
ho
s G
erad
os
(y)
Vértices 3 4 5 6 7
Caminhos 6 19 48 109 223
1 2 3 4 5
FIG. 3.2 – Gráfico da relação entre o número de vértices e a quantidade de caminhos
gerados no PGC.
Note que ajustando-se o resultado desses pontos (incluindo os resultados em
anexo acima de 6 vértices), encontra-se uma função exponencial na forma:
xey
8978,08516,2=
Isso permite compreender a dificuldade ao se trabalhar com uma rede real que
pode chegar à ordem de 64.000 pontos, gerando aproximadamente 49910 caminhos
percorridos. Aumentando gradativamente o tamanho da rede, foi possível verificar que
para uma rede de pouco mais de 40 pontos, da FIG 3.3, houve limitação computacional.
30
FIG. 3.3 – Exemplo genérico de rede com 42 vértices.
Houve um erro no programa PGC que gerou falhas na listagem acima desse
valor. Isso porque havia uma limitação de hardware no processamento, havendo assim a
sua interrupção. Para uma rede como essa, de 42 pontos, teria-se aproximadamente 7 x
10 16 caminhos listados.
Outro aspecto fundamental para o presente projeto foi verificar a capacidade do
código para redes com todas as suas ligações possíveis entre os vértices. Nesse sentido,
no exemplo 4, figura 3.1, buscou-se o maior tamanho possível para uma rede e verificar
se o programa rodava normalmente, não havendo qualquer complicação. Um dos
exemplos verificados foi o de 5 vértices.
Exemplo 4: [ 1 --> 2 ] 1 2 1 3 2 1 3 4 2 1 3 4 5 2 1 3 5 2 1 3 5 4 2 1 4 2 1 4 3 2 1 4 3 5 2 1 4 5 2
1 4 5 3 2 1 5 2 1 5 3 2 1 5 3 4 2 1 5 4 2 1 5 4 3 2 [ 1 --> 3 ] 1 2 3 1 2 4 3 1 2 4 5 3 1 2 5 3
1 2 5 4 3 1 3 1 4 2 3 1 4 2 5 3 1 4 3 1 4 5 2 3 1 4 5 3 1 5 2 3 1 5 2 4 3 1 5 3 1 5 4 2 3 1 5 4 3
[ 1 --> 4 ] 1 2 3 4 1 2 3 5 4 1 2 4 1 2 5 3 4 1 2 5 4 1 3 2 4 1 3 2 5 4 1 3 4 1 3 5 2 4 1 3 5 4
31
1 4 1 5 2 3 4 1 5 2 4 1 5 3 2 4 1 5 3 4 1 5 4 [ 1 --> 5 ] 1 2 3 4 5 1 2 3 5 1 2 4 3 5 1 2 4 5 1 2 5 1 3 2 4 5 1 3 2 5 1 3 4 2 5 1 3 4 5 1 3 5 1 4 2 3 5 1 4 2 5 1 4 3 2 5 1 4 3 5 1 4 5 1 5 [ 2 --> 3 ] 2 1 3 2 1 4 3 2 1 4 5 3 2 1 5 3 2 1 5 4 3 2 3 2 4 1 3
2 4 1 5 3 2 4 3 2 4 5 1 3 2 4 5 3 2 5 1 3 2 5 1 4 3 2 5 3 2 5 4 1 3 2 5 4 3 [ 2 --> 4 ] 2 1 3 4 2 1 3 5 4 2 1 4 2 1 5 3 4 2 1 5 4 2 3 1 4 2 3 1 5 4 2 3 4 2 3 5 1 4 2 3 5 4 2 4 2 5 1 3 4 2 5 1 4 2 5 3 1 4 2 5 3 4 2 5 4 [ 2 --> 5 ] 2 1 3 4 5 2 1 3 5 2 1 4 3 5 2 1 4 5
2 1 5 2 3 1 4 5 2 3 1 5 2 3 4 1 5 2 3 4 5 2 3 5 2 4 1 3 5 2 4 1 5 2 4 3 1 5 2 4 3 5 2 4 5 2 5 [ 3 --> 4 ] 3 1 2 4 3 1 2 5 4 3 1 4 3 1 5 2 4 3 1 5 4 3 2 1 4 3 2 1 5 4 3 2 4 3 2 5 1 4 3 2 5 4 3 4 3 5 1 2 4 3 5 1 4 3 5 2 1 4 3 5 2 4 3 5 4 [ 3 --> 5 ] 3 1 2 4 5
3 1 2 5 3 1 4 2 5 3 1 4 5 3 1 5 3 2 1 4 5 3 2 1 5 3 2 4 1 5 3 2 4 5 3 2 5 3 4 1 2 5 3 4 1 5 3 4 2 1 5 3 4 2 5 3 4 5 3 5 [ 4 --> 5 ] 4 1 2 3 5 4 1 2 5 4 1 3 2 5 4 1 3 5 4 1 5 4 2 1 3 5 4 2 1 5 4 2 3 1 5 4 2 3 5 4 2 5 4 3 1 2 5 4 3 1 5 4 3 2 1 5 4 3 2 5 4 3 5 4 5
Na rede com 5 vértices (figura 3.1), que explora todas as ligações possíveis em
uma rede desta ordem, nota-se que são gerados 160 caminhos. Portanto, se comparado
com o exemplo 2 com a mesma quantidade de vértices, tem-se um aumento de 112
caminhos. Isso indica que, como era de se esperar, essa função gerada (Eq. 2)
subestima os valores (dado que ela foi obtida com o mínimo acréscimo possível,
adicionando-se apenas um vértice e duas arestas), o que corrobora a tese de excesso de
esforço computacional.
Realizando esses testes, permitiu-se identificar e remover defeitos mais cedo e de
forma mais eficaz. O estudo mostra, portanto, que embora talvez não seja possível
remover todos os erros, boa parte dos custos computacionais poderiam ser eliminados
caso se utilizasse uma infra-estrutura computacional melhor, aplicando a técnica de
“dividir para conquistar” (MUHAMMAD, 2007). Gerar todos os caminhos de todas as
32
combinações é desnecessário e cria redundância tendenciosa, já que caminhos serão
combinações lineares de outros. Algumas combinações serão necessárias no suporte à
identificação de meios grosseiros, mas certamente não todo o conjunto. Ou seja, é
necessário que obtenha-se informações úteis para detecção do erro ao invés de
excessiva quantidade sem utilidade para o objetivo do projeto.
3.2. Novo Código “Todos os Caminhos – PGC2”
O programa PGC2 é composto por duas rotinas: PGC2-paths e PGC2-cycles.
Este novo programa foi gerado como refinamento ao PGC. Um código mais
simples e otimizado traz alguns pontos importantes:
- arquivo de saída de dados modificado, em relação ao programa PGC;
- possui a mesma estrutura de dados para o arquivo de entrada que o programa
PGC;
- possui uma classe Grafo e métodos de manipulação do grafo;
- existe uma limitação de 1000 vértices;
- possibilidade de escolha de todos os caminhos em um par ou em vários pares
de pontos.
O arquivo de entrada possui a mesma estrutura que o programa PGC, porém as
rotinas do PGC2 possibilitam o usuário poder escolher qualquer nome para o arquivo
texto de entrada. Anteriormente, todo arquivo de entrada precisava se chamar de
grafo.txt.
Para o arquivo de saída ( figura 3.4), a estrutura foi modificada com o objetivo de
servir como entrada para uma rotina de análise dos caminhos.
33
FIG. 3.4 – Modelo do Arquivo de saída do PGC2.
Esta estrutura de saída é válida para a rotina PGC2-paths, sendo que a saída do
PGC2-cycles possui uma estrutura análoga. Somente com a ressalva de que este último
lista caminhos saindo e chegando ao mesmo ponto, conseqüentemente, gerando ciclos.
A rotina PGC2-paths permite que o usuário possa escolher um par de pontos,
dentro da rede, para listagem dos caminhos, como também a escolha de todos os pares.
A rotina PGC2-cycles lista caminhos em ciclos, sendo uma ferramenta que irá auxiliar na
análise dos caminhos.
O arquivo de saída já realiza a soma das variações das grandezas
unidimensionais ( ∆ g, ∆ h, etc.). Este fato também é importante para a identificação do
erro grosseiro, já que a soma irá mostrar a discrepância dada por um ou mais valores com
erros grosseiros. Estes valores de somas, bem como os valores de variações coletadas
no campo, serão insumos para a rotina de análise dos caminhos.
O motivo do programa PGC2 ser simples e otimizado baseia-se no seu código,
tanto na rotina PGC2-paths quanto PGC2-cycles. Os códigos das rotinas possuem
poucas linhas, somente uma classe e alguns métodos. O algoritmo do programa é
retratado no apêndice G, sendo que o código do programa está escrito em C++, separado
em duas rotinas e compilado no sistema operacional linux pelo compilador g++ (GNU
C++).
8
P1 P2
2 Σ∆ | P1 P2
4 Σ∆ | P1 P4 P5 P2
6 Σ∆ | P1 P4 P5 P6 P3 P2
5 Σ∆ | P1 P4 P5 P3 P2
8 Σ∆ | P1 P4 P5 P7 P8 P6 P3 P2
-1 0 |
Listagem de todos os caminhos entre dois pontos da rede.
No início do arquivo existirá a quantidade de pontos da rede.
Indica o fim para a listagem de cada par de pontos.
Quantidade de pontos percorridos em cada caminho.
Somatório dos valores das variações de grandezas unidimensionais e o caminho listado.
34
A rotina PGC2-cycles baseia-se no mesmo algoritmo, somente diferenciando no
fato de não existir vértice final diferente do inicial. Outro detalhe é o fato do arquivo de
saída possuir valores “-1 0” (indicando fim de listagem entre dois vértices) e “-1 -1”
(indicando o final do arquivo). É um fato simples, mas computacionalmente é útil para a
rotina de análise dos caminhos.
Outro detalhe em relação ao código está no fato de que mostra uma restrição de
1000 vértices, mas este valor pode ser alterado no próprio código. Surge a partir desse
momento um problema computacional, que é o gasto de processamento para realizar a
busca e listagem dos caminhos.
O processamento passa a ser bastante exigido quando a rede inserida passa a
ter uma quantidade acima ou da ordem de 1000 pontos. O projeto não irá abordar este
tema de processamento, somente destaca-se sua relevância na modelagem e listagem de
caminhos.
De acordo com LEME (2006), uma sugestão para possibilitar uma solução a esse
gasto de processamento seria realizar a busca não na rede inteira ao mesmo tempo, e
sim por regiões. A busca seria realizada para cada região até completar a rede. E em
cada região poderia ter níveis de busca, chamados de camadas, para modelagem e
listagem de caminhos.
35
4. APLICAÇÃO
4.1. Simulação
1) Uma rede (figura 4.1) é sugerida, simulando os valores de desníveis coletados
em campo:
FIG. 4.1 – Exemplo de Rede Simulada.
2) Para esta rede, o arquivo de entrada terá a estrutura da figura 4.2:
FIG. 4.2 – Estrutura arquivo de entrada.
3) Utilizando o PGC2-paths, o arquivo de saída terá a seguinte estrutura resumida
na figura 4.3:
FIG. 4.3 – Parte do Arquivo de saída do PGC2-paths.
∆∆∆∆h=+90m
∆∆∆∆h=-10m
∆∆∆∆h=+32m ∆∆∆∆h=-10m
∆∆∆∆h=-50m
∆∆∆∆h=+52m
∆∆∆∆h=-20m
∆∆∆∆h=-20m
6 8
1 2 -50
1 3 -90
2 4 -20
3 4 20
3 5 10
5 4 10
2 6 -52
4 6 -32
6
1 2
2 -50 | 1 2
4 -50 | 1 3 4 2
5 -50 | 1 3 4 6 2
5 -50 | 1 3 5 4 2
6 -50 | 1 3 5 4 6 2
-1 0 |
1 3
4 -90 | 1 2 4 3
5 -90 | 1 2 4 5 3
5 -90 | 1 2 6 4 3
6 -90 | 1 2 6 4 5 3
2 -90 | 1 3
-1 0 |
1 4
3 -70 | 1 2 4
4 -70 | 1 2 6 4
3 -70 | 1 3 4
4 -70 | 1 3 5 4
-1 0 |
36
Neste caso, todos os caminhos “fecharam”, ou seja, o valor do desnível coletado
e o somatório de desníveis foram iguais. É uma rede sem erros grosseiros.
4)A rede coletada possui um erro grosseiro, como por exemplo, o sinal positivo do
desnível 5�4 foi trocado pelo negativo (figura 4.4).
FIG. 4.4 – Estrutura arquivo de entrada com erro.
5) Utilizando o PGC2-paths, o arquivo de saída terá a estrutura da figura 4.5:
6
1 2
2 -50 | 1 2
4 -50 | 1 3 4 2
5 -50 | 1 3 4 6 2
5 -70 | 1 3 5 4 2
6 -70 | 1 3 5 4 6 2
-1 0 |
1 3
4 -90 | 1 2 4 3
5 -70 | 1 2 4 5 3
5 -90 | 1 2 6 4 3
6 -70 | 1 2 6 4 5 3
2 -90 | 1 3
-1 0 |
1 4
3 -70 | 1 2 4
4 -70 | 1 2 6 4
3 -70 | 1 3 4
4 -90 | 1 3 5 4
-1 0 |
1 5
5 -80 | 1 2 4 3 5
4 -60 | 1 2 4 5
6 -80 | 1 2 6 4 3 5
5 -60 | 1 2 6 4 5
4 -60 | 1 3 4 5
3 -80 | 1 3 5
-1 0 |
1 6
4 -102 | 1 2 4 6
3 -102 | 1 2 6
5 -102 | 1 3 4 2 6
4 -102 | 1 3 4 6
6 -122 | 1 3 5 4 2 6
5 -122 | 1 3 5 4 6
-1 0 |
2 3
3 -40 | 2 1 3
3 -40 | 2 4 3
4 -20 | 2 4 5 3
4 -40 | 2 6 4 3
5 -20 | 2 6 4 5 3
-1 0 |
2 4
4 -20 | 2 1 3 4
5 -40 | 2 1 3 5 4
2 -20 | 2 4
3 -20 | 2 6 4
-1 0 |
2 5
5 -10 | 2 1 3 4 5
4 -30 | 2 1 3 5
4 -30 | 2 4 3 5
3 -10 | 2 4 5
5 -30 | 2 6 4 3 5
4 -10 | 2 6 4 5
-1 0 |
2 6
5 -52 | 2 1 3 4 6
6 -72 | 2 1 3 5 4 6
3 -52 | 2 4 6
2 -52 | 2 6
-1 0 |
3 4
4 20 | 3 1 2 4
5 20 | 3 1 2 6 4
2 20 | 3 4
3 0 | 3 5 4
-1 0 |
3 5
5 30 | 3 1 2 4 5
6 30 | 3 1 2 6 4 5
3 30 | 3 4 5
2 10 | 3 5
-1 0 |
3 6
5 -12 | 3 1 2 4 6
4 -12 | 3 1 2 6
4 -12 | 3 4 2 6
3 -12 | 3 4 6
5 -32 | 3 5 4 2 6
4 -32 | 3 5 4 6
-1 0 |
6 8
1 2 -50
1 3 -90
2 4 -20
3 4 20
3 5 10
5 4 -10
2 6 -52
4 6 -32
37
4 5
5 -10 | 4 2 1 3 5
3 -10 | 4 3 5
2 10 | 4 5
6 -10 | 4 6 2 1 3 5
-1 0 |
4 6
3 -32 | 4 2 6
5 -32 | 4 3 1 2 6
6 -12 | 4 5 3 1 2 6
2 -32 | 4 6
-1 0 |
5 6
6 -22 | 5 3 1 2 4 6
5 -22 | 5 3 1 2 6
5 -22 | 5 3 4 2 6
4 -22 | 5 3 4 6
4 -42 | 5 4 2 6
6 -42 | 5 4 3 1 2 6
3 -42 | 5 4 6
-1 0 |
-1 -1
FIG. 4.5 – Arquivo de saída de PGC2-paths.
6) Utilizando o PGC2-cycles, o arquivo de saída terá a estrutura da figura 4.6:
6
1
5 0 | 1 2 4 3 1
6 20 | 1 2 4 5 3 1
6 0 | 1 2 6 4 3 1
7 20 | 1 2 6 4 5 3 1
5 0 | 1 3 4 2 1
6 0 | 1 3 4 6 2 1
6 -20 | 1 3 5 4 2 1
7 -20 | 1 3 5 4 6 2 1
-1 0 |
2
5 0 | 2 1 3 4 2
6 0 | 2 1 3 4 6 2
6 -20 | 2 1 3 5 4 2
7 -20 | 2 1 3 5 4 6 2
5 0 | 2 4 3 1 2
6 20 | 2 4 5 3 1 2
4 0 | 2 4 6 2
4 0 | 2 6 4 2
6 0 | 2 6 4 3 1 2
7 20 | 2 6 4 5 3 1 2
-1 0 |
3
5 0 | 3 1 2 4 3
6 20 | 3 1 2 4 5 3
6 0 | 3 1 2 6 4 3
7 20 | 3 1 2 6 4 5 3
5 0 | 3 4 2 1 3
4 20 | 3 4 5 3
6 0 | 3 4 6 2 1 3
6 -20 | 3 5 4 2 1 3
4 -20 | 3 5 4 3
7 -20 | 3 5 4 6 2 1 3
-1 0 |
4
5 0 | 4 2 1 3 4
6 -20 | 4 2 1 3 5 4
4 0 | 4 2 6 4
5 0 | 4 3 1 2 4
6 0 | 4 3 1 2 6 4
4 -20 | 4 3 5 4
6 20 | 4 5 3 1 2 4
7 20 | 4 5 3 1 2 6 4
4 20 | 4 5 3 4
6 0 | 4 6 2 1 3 4
7 -20 | 4 6 2 1 3 5 4
4 0 | 4 6 2 4
-1 0 |
5
6 20 | 5 3 1 2 4 5
7 20 | 5 3 1 2 6 4 5
4 20 | 5 3 4 5
6 -20 | 5 4 2 1 3 5
4 -20 | 5 4 3 5
7 -20 | 5 4 6 2 1 3 5
-1 0 |
6
6 0 | 6 2 1 3 4 6
7 -20 | 6 2 1 3 5 4 6
4 0 | 6 2 4 6
4 0 | 6 4 2 6
6 0 | 6 4 3 1 2 6
7 20 | 6 4 5 3 1 2 6
-1 0 |
-1
FIG. 4.6 – Arquivo de saída de PGC2-cycles.
Analisando qualitativamente o arquivo de saída PGC2-cycles, obtém-se a
informação que todos os caminhos que os desníveis 4�5 e 5�3 estão incluídos existe
um erro de “fechamento”, ou seja, o somatório diferente de zero.
38
A metodologia utilizada para esta análise qualitativa está descrita a seguir :
- Dentre todos os caminhos listados pelo PGC2-cycles por um determinado
vértice, os caminhos com somatórios iguais a zero ou próximos deste, dentro de uma
tolerância para os dados, são considerados “corretos”, porém ainda podem conter erros, e
os dados destes caminhos terão uma confiança maior do que aqueles caminhos com
somatório diferente de zero.
- Comparando com os outros caminhos, os dados serão checados até que
identifique ou então restrinja a possibilidade de erro em alguma medição.
Esta simulação é um caso aonde não se chega com a certeza do valor com o erro
grosseiro com o PGC2 - cycles. Devido à existência de um ponto (na simulação é o ponto
5 da figura 4.1) que na teoria dos grafos não é considerado um nó. Neste caso é possível
somente restringir a área de procura. Porém, a retirada de valores de entrada e a
utilização do PGC2 - paths identificam a medição com erro grosseiro. Isto pode ser
constatado na segunda simulação.
A troca de sinal realizada na simulação é um exemplo de erro grosseiro, porém
existem muitos outros casos encontrados em outras simulações: os erros grosseiros se
compensando, erros em diferentes ordens de grandeza (como por exemplo: um erro na
casa do centímetro e outro na casa do milímetro), valores de variações das grandezas
unidimensionais trocados no momento do registro, etc.
A figura 4.7 retrata a segunda simulação, com os dados em metros, feita com
intuito de demonstrar a metodologia para a análise qualitativa descrita acima.
8 12
1 2 +0.3
2 3 +0.5
1 4 +0.1
2 5 +0.3
3 6 +0.4
4 5 +0.5
5 6 +0.6
1 5 +0.6
5 3 +0.2
5 7 +0.1
6 8 +0.2
7 8 +0.3
FIG. 4.7 – Rede e dados de entrada.
Utilizando o programa PGC2 – cycles são gerados os seguintes caminhos na figura
4.8, selecionando o ponto 2 :
39
8
2
5 5.55112e-17 | 2 1 4 5 2
7 0 | 2 1 4 5 6 3 2
6 2.22045e-16 | 2 1 4 5 3 2
9 -0.4 | 2 1 4 5 7 8 6 3 2
4 3.88578e-16 | 2 1 5 2
6 3.33067e-16 | 2 1 5 6 3 2
5 4.44089e-16 | 2 1 5 3 2
8 -0.4 | 2 1 5 7 8 6 3 2
5 7.21645e-16 | 2 3 6 5 2
7 7.21645e-16 | 2 3 6 5 4 1 2
6 7.21645e-16 | 2 3 6 5 1 2
7 0.4 | 2 3 6 8 7 5 2
9 0.4 | 2 3 6 8 7 5 4 1 2
8 0.4 | 2 3 6 8 7 5 1 2
4 5.55112e-16 | 2 3 5 2
6 4.996e-16 | 2 3 5 4 1 2
5 6.10623e-16 | 2 3 5 1 2
5 6.10623e-16 | 2 5 4 1 2
5 5.55112e-16 | 2 5 6 3 2
4 6.10623e-16 | 2 5 1 2
4 6.66134e-16 | 2 5 3 2
7 -0.4 | 2 5 7 8 6 3 2
-1 0 |
FIG. 4.8 – Caminhos gerados pelo PGC2 – cycles.
Os caminhos que resultam em zero ou próximo deste são “descartados”, ou seja,
recebem uma confiança maior em seus dados. Partindo deste princípio, as medições
1�2, 2�3, 1�4, 2�5, 3�6, 4�5, 5�6, 1�5, 5�3 estariam sem erros grosseiros.
Então o erro poderia estar nas medições 5�7, 6�8, 7�8.
Usando somente o cycles não será possível descobrir o erro, apenas restringir as
possibilidades para três medições.
A partir disto pode-se utilizar o PGC2 – paths para identificar qual das três
medições estaria com erro grosseiro. Se a medida com erro grosseiro for retirada da rede
e o PGC2 – paths for utilizado, todos os caminhos “fecharão” com mesmo valor ou
próximo deste.
Portanto, retira-se a medição 7�8 e o programa PGC2 – paths é utilizado,
obtendo como resposta o seguinte resultado descrito na figura 4.9.
8
1 2
2 0.3 | 1 2
4 0.3 | 1 4 5 2
6 0.3 | 1 4 5 6 3 2
5 0.3 | 1 4 5 3 2
3 0.3 | 1 5 2
1 3
3 0.8 | 1 2 3
5 0.8 | 1 2 5 6 3
4 0.8 | 1 2 5 3
5 0.8 | 1 4 5 2 3
5 0.8 | 1 4 5 6 3
4 0.8 | 1 4 5 3
4 0.8 | 1 5 2 3
1 4
6 0.1 | 1 2 3 6 5 4
5 0.1 | 1 2 3 5 4
4 0.1 | 1 2 5 4
2 0.1 | 1 4
3 0.1 | 1 5 4
-1 0 |
40
5 0.3 | 1 5 6 3 2
4 0.3 | 1 5 3 2
-1 0 |
4 0.8 | 1 5 6 3
3 0.8 | 1 5 3
-1 0 |
1 5
5 0.6 | 1 2 3 6 5
4 0.6 | 1 2 3 5
3 0.6 | 1 2 5
3 0.6 | 1 4 5
2 0.6 | 1 5
-1 0 |
1 6
4 1.2 | 1 2 3 6
5 1.2 | 1 2 3 5 6
4 1.2 | 1 2 5 6
5 1.2 | 1 2 5 3 6
6 1.2 | 1 4 5 2 3 6
4 1.2 | 1 4 5 6
5 1.2 | 1 4 5 3 6
5 1.2 | 1 5 2 3 6
3 1.2 | 1 5 6
4 1.2 | 1 5 3 6
-1 0 |
1 7
6 0.8 | 1 2 3 6 5 7
6 0.8 | 1 2 3 6 5 7
5 0.8 | 1 2 3 5 7
5 0.8 | 1 2 3 5 7
4 0.8 | 1 2 5 7
4 0.8 | 1 2 5 7
4 0.8 | 1 4 5 7
4 0.8 | 1 4 5 7
3 0.8 | 1 5 7
3 0.8 | 1 5 7
-1 0 |
1 8
5 1.4 | 1 2 3 6 8
6 1.4 | 1 2 3 5 6 8
5 1.4 | 1 2 5 6 8
6 1.4 | 1 2 5 3 6 8
7 1.4 | 1 4 5 2 3 6 8
5 1.4 | 1 4 5 6 8
6 1.4 | 1 4 5 3 6 8
6 1.4 | 1 5 2 3 6 8
4 1.4 | 1 5 6 8
5 1.4 | 1 5 3 6 8
-1 0 |
2 3
6 0.5 | 2 1 4 5 6 3
5 0.5 | 2 1 4 5 3
5 0.5 | 2 1 5 6 3
4 0.5 | 2 1 5 3
2 0.5 | 2 3
4 0.5 | 2 5 6 3
3 0.5 | 2 5 3
-1 0 |
2 4
3 -0.2 | 2 1 4
4 -0.2 | 2 1 5 4
5 -0.2 | 2 3 6 5 4
6 -0.2 | 2 3 6 5 1 4
4 -0.2 | 2 3 5 4
5 -0.2 | 2 3 5 1 4
3 -0.2 | 2 5 4
4 -0.2 | 2 5 1 4
-1 0 |
2 5
4 0.3 | 2 1 4 5
3 0.3 | 2 1 5
4 0.3 | 2 3 6 5
3 0.3 | 2 3 5
2 0.3 | 2 5
-1 0 |
2 6
5 0.9 | 2 1 4 5 6
6 0.9 | 2 1 4 5 3 6
4 0.9 | 2 1 5 6
5 0.9 | 2 1 5 3 6
3 0.9 | 2 3 6
4 0.9 | 2 3 5 6
3 0.9 | 2 5 6
4 0.9 | 2 5 3 6
-1 0 |
2 7
5 0.5 | 2 1 4 5 7
5 0.5 | 2 1 4 5 7
4 0.5 | 2 1 5 7
4 0.5 | 2 1 5 7
5 0.5 | 2 3 6 5 7
5 0.5 | 2 3 6 5 7
4 0.5 | 2 3 5 7
4 0.5 | 2 3 5 7
3 0.5 | 2 5 7
3 0.5 | 2 5 7
-1 0 |
2 8
6 1.1 | 2 1 4 5 6 8
7 1.1 | 2 1 4 5 3 6 8
5 1.1 | 2 1 5 6 8
6 1.1 | 2 1 5 3 6 8
4 1.1 | 2 3 6 8
5 1.1 | 2 3 5 6 8
4 1.1 | 2 5 6 8
5 1.1 | 2 5 3 6 8
-1 0 |
3 4
4 -0.7 | 3 2 1 4
5 -0.7 | 3 2 1 5 4
4 -0.7 | 3 2 5 4
5 -0.7 | 3 2 5 1 4
6 -0.7 | 3 6 5 2 1 4
4 -0.7 | 3 6 5 4
5 -0.7 | 3 6 5 1 4
5 -0.7 | 3 5 2 1 4
3 -0.7 | 3 5 4
4 -0.7 | 3 5 1 4
-1 0 |
3 5
5 -0.2 | 3 2 1 4 5
4 -0.2 | 3 2 1 5
3 -0.2 | 3 2 5
3 -0.2 | 3 6 5
2 -0.2 | 3 5
-1 0 |
3 6
6 0.4 | 3 2 1 4 5 6
5 0.4 | 3 2 1 5 6
3 7
6 -1.11022e-16 | 3 2 1 4
5 7
3 8
7 0.6 | 3 2 1 4 5 6 8
6 0.6 | 3 2 1 5 6 8
41
4 0.4 | 3 2 5 6
2 0.4 | 3 6
3 0.4 | 3 5 6
-1 0 |
6 -1.11022e-16 | 3 2 1 4
5 7
5 -1.11022e-16 | 3 2 1 5
7
5 -1.11022e-16 | 3 2 1 5
7
4 1.66533e-16 | 3 2 5 7
4 1.66533e-16 | 3 2 5 7
4 1.66533e-16 | 3 6 5 7
4 1.66533e-16 | 3 6 5 7
3 1.66533e-16 | 3 5 7
3 1.66533e-16 | 3 5 7
-1 0 |
5 0.6 | 3 2 5 6 8
3 0.6 | 3 6 8
4 0.6 | 3 5 6 8
-1 0 |
4 5
6 0.5 | 4 1 2 3 6 5
5 0.5 | 4 1 2 3 5
4 0.5 | 4 1 2 5
3 0.5 | 4 1 5
2 0.5 | 4 5
-1 0 |
4 6
5 1.1 | 4 1 2 3 6
6 1.1 | 4 1 2 3 5 6
5 1.1 | 4 1 2 5 6
6 1.1 | 4 1 2 5 3 6
6 1.1 | 4 1 5 2 3 6
4 1.1 | 4 1 5 6
5 1.1 | 4 1 5 3 6
5 1.1 | 4 5 2 3 6
3 1.1 | 4 5 6
6 1.1 | 4 5 1 2 3 6
4 1.1 | 4 5 3 6
-1 0 |
4 7
7 0.7 | 4 1 2 3 6 5 7
7 0.7 | 4 1 2 3 6 5 7
6 0.7 | 4 1 2 3 5 7
6 0.7 | 4 1 2 3 5 7
5 0.7 | 4 1 2 5 7
5 0.7 | 4 1 2 5 7
4 0.7 | 4 1 5 7
4 0.7 | 4 1 5 7
3 0.7 | 4 5 7
3 0.7 | 4 5 7
-1 0 |
4 8
6 1.3 | 4 1 2 3 6 8
7 1.3 | 4 1 2 3 5 6 8
6 1.3 | 4 1 2 5 6 8
7 1.3 | 4 1 2 5 3 6 8
7 1.3 | 4 1 5 2 3 6 8
5 1.3 | 4 1 5 6 8
6 1.3 | 4 1 5 3 6 8
6 1.3 | 4 5 2 3 6 8
4 1.3 | 4 5 6 8
7 1.3 | 4 5 1 2 3 6 8
5 1.3 | 4 5 3 6 8
-1 0 |
5 6
4 0.6 | 5 2 3 6
6 0.6 | 5 4 1 2 3 6
2 0.6 | 5 6
5 0.6 | 5 1 2 3 6
3 0.6 | 5 3 6
-1 0 |
5 7
2 0.2 | 5 7
-1 0 |
5 8
5 0.8 | 5 2 3 6 8
7 0.8 | 5 4 1 2 3 6 8
3 0.8 | 5 6 8
6 0.8 | 5 1 2 3 6 8
4 0.8 | 5 3 6 8
-1 0 |
6 7
7 -0.4 | 6 3 2 1 4 5 7
7 -0.4 | 6 3 2 1 4 5 7
6 -0.4 | 6 3 2 1 5 7
6 -0.4 | 6 3 2 1 5 7
5 -0.4 | 6 3 2 5 7
5 -0.4 | 6 3 2 5 7
4 -0.4 | 6 3 5 7
4 -0.4 | 6 3 5 7
3 -0.4 | 6 5 7
3 -0.4 | 6 5 7
-1 0 |
6 8
2 0.2 | 6 8
-1 0 |
7 8
6 0.6 | 7 5 2 3 6 8
8 0.6 | 7 5 4 1 2 3 6 8
4 0.6 | 7 5 6 8
7 0.6 | 7 5 1 2 3 6 8
5 0.6 | 7 5 3 6 8
6 0.6 | 7 5 2 3 6 8
42
8 0.6 | 7 5 4 1 2 3 6 8
4 0.6 | 7 5 6 8
7 0.6 | 7 5 1 2 3 6 8
5 0.6 | 7 5 3 6 8
-1 0 |
-1 -1
FIG. 4.9 – Saída PGC2 – paths sem a medição 7�8.
Descobre-se que o valor incorreto era da medição 7�8. Neste caso é possível até
mesmo inferir o valor desta, pois todo o restante está correto (ainda podendo haver erro
se compensando), como é mostrado na figura 4.10. Esta inferência foi realizada atribuindo
um valor qualquer a um ponto e seguindo a orientação da rede.
FIG. 4.10 – Inferência do valor na medição 7�8.
Para que esta inferência seja realizada é necessária a utilização da equação 3,
onde Px e Py são valores de pontos x e y da rede e ∆ é medição da variação de um ponto
para outro.
∆±= yx PP
A partir destas simulações o projeto apresenta uma metodologia para
identificação dos erros grosseiros em dados geodésicos unidimensionais. Esta baseia-se
nos seguintes passos:
1º) Utiliza-se o PGC2 - cycles sobre a rede;
2º) Primeira análise dos resultados;
3º) Definição de testes adicionais para utilizar o PGC2 - paths;
43
4º) Utiliza-se o PGC2 - paths;
5º) Análise dos resultados;
6º) Tomada de providência.
Um ponto importante, ocorrido também nos testes, é a listagem entre dois pontos
que possuem poucas observações coletadas e que não estejam ligados por uma
observação direta. A maior quantidade de caminhos (figura 4.11) será gerada por estes
pontos. Esse resultado observado possui um grande valor para a busca do erro grosseiro,
será como uma diretriz para automatização do processo de análise dos dados de saída
do programa. Essa maior quantidade de caminhos gerada por estes pontos
característicos da rede torna-se um ponto principal para uma metodologia de análise
automatizada para busca de erros grosseiros.
FIG. 4.11 – Pares de pontos com maior nº de caminhos.
Esta característica torna-se essencial para auxiliar na busca pelo erro grosseiro,
torna a escolha de pontos mais eficiente, ou seja, economia de processamento e tempo
de análise.
Em relação à rede geodésica brasileira, com seus milhares de pontos, este
projeto precisa ser muito trabalhado e discutido, porque existem dois fatores de grande
importância: hardware e técnicas para análise da rede.
O fator hardware é destacado pela grande quantidade de dados que o PGC2,
tanto o paths quanto o cycles, produz. Também se destaca o processamento para
identificação dos erros, cálculos que terão que ser feitos, etc.
Para que a análise da rede seja feita de forma eficiente é necessário que esta
seja dividida em sub-redes (a técnica de “dividir para conquistar” (Muhammad)), e
também trabalhar estas sub-redes com “camadas”, ou seja, caminhos com comprimento
limitado. Estes são alguns exemplos para dar condições de aplicabilidade ao programa
para redes com milhares de pontos.
1 6
4 -102 | 1 2 4 6
3 -102 | 1 2 6
5 -102 | 1 3 4 2 6
4 -102 | 1 3 4 6
6 -102 | 1 3 5 4 2 6
5 -102 | 1 3 5 4 6
-1 0 |
1 5
5 -80 | 1 2 4 3 5
4 -80 | 1 2 4 5
6 -80 | 1 2 6 4 3 5
5 -80 | 1 2 6 4 5
4 -80 | 1 3 4 5
3 -80 | 1 3 5
-1 0 |
5 6
6 -22 | 5 3 1 2 4 6
5 -22 | 5 3 1 2 6
5 -22 | 5 3 4 2 6
4 -22 | 5 3 4 6
4 -22 | 5 4 2 6
6 -22 | 5 4 3 1 2 6
3 -22 | 5 4 6
-1 0 |
44
Para alguns exemplos de erros grosseiros, o programa obteve resultados
satisfatórios somente com uma análise qualitativa. Foram testados erros de troca de sinal,
troca de algarismos, variação de grandeza de determinado dado e erros que se
compensam. Todos estes casos foram detectados (apêndice F).
A identificação de erros neste programa, em termos práticos, mostrou-se
dependente da configuração da rede e da quantidade de erros. Ou seja, se a rede for
pequena com muitos erros grosseiros, torna-se inviável a utilização do programa. Isto
ocorre porque o programa não consegue obter dados confiáveis que sirvam de
comparação para que seja descoberto o erro grosseiro, sendo necessário recalcular toda
a rede.
Ou então, se a rede tiver muitos erros em pontos que não são nós (já definido
pela teoria dos grafos), também inviabiliza o encontro do mesmo.
45
5. CONCLUSÕES
No final deste projeto é necessário destacar o conhecimento que foi agregado em
todas as suas fases. Este conhecimento representado pela teoria dos grafos, teoria dos
erros, técnica do backtracking, busca em profundidade (DFS - Deep First Search) e
linguagem de programação C++. O código gerado não é uma substituição do método
existente (circuitos fechados), e sim uma alternativa para que a busca da qualidade dos
dados sempre esteja sendo o foco.
A identificação de erros grosseiros não é simples e tampouco óbvia. Com este
projeto ficou evidente a quantidade de variáveis aleatórias sobre este assunto. Qualquer
coisa pode gerar um erro grosseiro. Como por exemplo: inexperiência do operador,
inserção de valores incorretos (como altura do tripé para nivelamento), queda de aparelho
durante a medição e a novo posicionamento estar incorreto, etc. Neste projeto foram
simulados erros que se compensam na rede, troca de sinal, variação de grandeza da
medição (como por ex.: o número 10,2 pode se tornar 1,02), inversão de algarismos, etc.
E o programa demonstrou todo o problema de “fechamento” nos caminhos. Juntamente
com a metodologia proposta neste projeto, foram detectados os erros.
O objetivo de um processo automatizado existe com este projeto, mas a
automatização completa para todos os casos possíveis, ou seja, do início da coleta dos
dados até o final da análise é improvável. Isto porque a análise é extremamente subjetiva,
dado que existem muitas variáveis. O que pode ser feito é uma automatização para
alguns casos da análise, diminuindo, restringindo a quantidade de variáveis a ser
analisada. Um exemplo disto é a metodologia de análise apresentada no item 3.3, a qual
pode ser automatizada.
Outro aspecto interessante neste projeto foi a integração com outras
especialidades da engenharia. A engenharia cartográfica e as outras engenharias
necessitam de uma maior aproximação para seus projetos. Isto porque esta integração é
extremamente importante para que projetos futuros possam ser mais inovadores, mais
eficientes e possam solucionar problemas existentes e futuros.
Por fim, como sugestões para projetos futuros, estão a automatização da análise
e a inserção da estatística para os dados gerados pelo programa PGC2. Além disso, um
estudo para o tratamento de redes grandes com milhares de pontos por meio do princípio
“dividir para conquistar” (MUHAMMAD, 2007) com a rede sendo dividida em camadas,
começando da camada menor para a maior com mais pontos.
46
6. REFERÊNCIAS BIBLIOGRÁFICAS
ABENDE - Associação Brasileira de Ensaios Não Destrutivos e Inspeção. CONTROLE
DIMENSIONAL TOPOGRAFIA NIVELAMENTO GEOMÉTRICO PR-095. Disponível
em: <http://www.abende.org.br/down2/pr_095.pdf - acesso em 16/out/06> Acesso
em: 20 Nov 06.
CRISTINA, Maria e PIMENTEL, Graça. Site do Instituto de Ciências Matemáticas e de
Computação - Departamento de Computação e Estatística Disponível em: <
http://www.icmc.sc.usp.br/manuals/sce183/gfint.html > Acesso em: 04 Out 06.
FEOFILOFF, Paulo; KOHAYAKAWA, Y. e WAKABAYASHI, Y. Uma Introdução Sucinta
à Teoria dos Grafos. Disponível em: <http://www.ime.usp.br/~pf > Acesso em: 04
Jan 06.
GEMAEL, Camil. Introdução à Geodésia Física. Curso de Pós-graduação em Ciências
Geodésicas, UFPR. Curitiba, 1999.
HENRIQUES, Célia. Medições. Departamento de Física.Universidade Nova de Lisboa.
Disponível em: < http://sme.dcm.fct.unl.pt/u/dias/docencia/FISI/TP1%20Medicoes.pdf>. Acesso
em: 31 de Out de 2006
IBGE. Disponível em: <http://www.ibge.gov.br/home/geociencias/geodesia/default.shtm> Acesso em:
17 Out 06.
LEME, Renato Purita Paes. Consulta pessoal. Aluno do curso de engenharia de
computação do IME, 2006.
MUHAMMAD, Rashid Bin. Design and Analysis of Computer Algorithms. Disponível
em: <http://www.personal.kent.edu/~rmuhamma/Algorithms/MyAlgorithms/divide.htm> Acesso em:
20 Mai 07.
PENHA, Alex de Lima Teodoro da; FILHO, Antônio Gaudêncio Guimarães e FREITAS,
Ângelo Cantaluppi Silvestri. Aplicação da Teoria dos Grafos como Suporte à
47
Identificação de Erros Grosseiros em Dados Geodésicos Unidimensionais.
Iniciação à Pesquisa, Rio de Janeiro, IME, 2006.
SALVIANO, Adriano e SANTIAGO, Basílio. Posicionamento das Estrelas. Astronomia
Geodésica. Disponível em: < www.if.ufrgs.br/oei/santiago/fis2005/livro_v2.doc>. Acesso em:
31 de Out de 2006.
SKIENA, Steven e REVILLA, Miguel. Programming Challenges: The Programming
Contest Training Manual. Springer-Verlag, New York 2003. Disponível em:
<http://www.cs.sunysb.edu/~skiena/392/programs/> Acesso em: 15 Nov 05.
UFSC, Esquema de implantação de rede gravimétrica. (Universidade Federal de Santa
Catarina). Disponível em: <http://geodesia.ufsc.br/Geodesia-
online/arquivo/GeoColoq_2003/artigos/T097.pdf> Acesso em: 20 Nov 06.
WEST, Douglas. Open Problems – Graph Theory and Combinatorics. Disponível em:
<http://www.math.uiuc.edu/~west/openp/ >Acesso em: 13 Jan 06.
48
7. BIBLIOGRAFIA
DARBY, Gary. Graph Searching. Introdução à Teoria de DFS. Disponível em:
<http://www.delphiforfun.org/Programs/Library/Graphs1.htm > Acesso em: 22 Dez 05.
GRIMSHAW, David. Introdução à Teoria de DFS. Disponível em:
<http://www.ryerson.ca/~dgrimsha/courses/cps721/nDepth.html>Acesso em: 02 Dez 05.
Introdução à Teoria de DFS. Disponível em: <http://ww3.algorithmdesign.net/handouts/DFS.pdf>
Acesso em: 03 Fev 05.
Introdução à Teoria de DFS. University of Saskatchewan. Departament of Computer
Science. Saskatoon, Saskatchewan, Canadá. Disponível em:
<http://www.cs.usask.ca/resources/tutorials/csconcepts/1998_3/DFS/2-4.html> Acesso em: 24
Jan 06.
KOERICH, Alessandro L. Lidando com Limitações do Poder dos Algoritmos. Nota de
Aula da PUCPR, 2006.
LESSER, Miriam. Site de Northeastern University – Departamento de Engenharia Elétrica
e Computação Disponível em:
<http://www.ece.neu.edu/groups/rcl/libHLS/index.html> Acesso em: 12 Jan 06.
LOCKE, Stephen. Graph Theory. Disponível em: <http://www.math.fau.edu/locke/graphthe.htm>
Acesso em: 17 Dez 05.
MathWorld da Wolfram Research. Graph Theory. Disponível em:
<http://mathworld.wolfram.com/topics/GraphTheory.html> Acesso em: 20 Fev 06.
NONATO, Luis Gustavo. Introdução à Teoria de DFS. Disponível em:
<http://www.lcad.icmc.usp.br/~nonato/ED/Coloracao/pcoloracao.html > Acesso em: 20 Fev 06.
The MacTutor History of Mathematics. St. Andrews University, Escócia. Disponível em:
< http://turnbull.mcs.st-and.ac.uk/~history/Indexes/HistoryTopics.html> Acesso em:
11 Dez 05.
49
APÊNDICE A – ROTINA DE TODOS OS CAMINHOS - PGC
#include <iostream> #include <fstream> #include <vector> #include <string> #include <algorithm> #include <set> using namespace std; class Aresta { public: int v; double custo; Aresta(int v, double custo) { this->v = v; this->custo = custo; } }; class Vertice { public: vector<Aresta> adj; void inserirAresta(Aresta aresta) { adj.push_back(aresta); } }; class Grafo { public: int V; // numero de vertices int E; // numero de arestas (edges) int I; // inicio do caminho int F; // fim do caminho vector<Vertice> v; //lista de vertices no grafo set<int> S; vector<int> path; vector<int> adj; Grafo(string file) { ifstream inFile (file.c_str());
50
int u1, u2; double custo; inFile >> V; inFile >> E; v.resize(V+1); for (int j=0; j<E; j++) { inFile >> u1 >> u2 >> custo; v[u1].inserirAresta(Aresta(u2, custo)); v[u2].inserirAresta(Aresta(u1, -custo)); } inFile.close(); } bool firstPath(int I, int F) { this->I = I; this->F = F; path.clear(); path.push_back(I); adj.push_back(0); S.clear(); S.insert(I); return findPath(F); } bool nextPath() { S.erase(path.back()); path.pop_back(); adj.pop_back(); adj[adj.size()-1]++; return findPath(F); } bool findPath(int F) { //printStatus(); if (path.size()==0) return false; else { if (v[path.back()].adj.size()<=adj.back()) { S.erase(path.back()); path.pop_back(); adj.pop_back();
51
adj[adj.size()-1]++; return findPath(F); } else { int u = v[path.back()].adj[adj.back()].v; if (S.find(u)!=S.end()) { adj[adj.size()-1]++; return findPath(F); } else { path.push_back(u); adj.push_back(0); S.insert(u); if (path.back()==F) return true; else return findPath(F); } } } } void printPath() { for (int j=0; j<path.size(); j++) cout << path[j] << " "; cout << endl; } void printGraph() { for (int j=1; j<v.size(); j++) { cout << "[" << j << "] - "; for (int k=0; k<v[j].adj.size(); k++) cout << v[j].adj[k].v << " "; cout << endl; } } void printStatus() { cout << "< "; for (int j=0; j<path.size(); j++) cout << path[j] << " "; cout << "| "; for (int j=0; j<adj.size(); j++) cout << adj[j] << " "; cout << "| "; for (set<int>::iterator it=S.begin(); it!=S.end(); it++) cout << *it << " "; cout << " >" << endl; }
52
}; main() { Grafo g("grafo.txt"); //g.printGraph(); for (int I=1; I<=g.V; I++) for (int F=I+1; F<=g.V; F++) { g.firstPath(I,F); cout << "[ " << I << " --> " << F << " ]" << endl; do{ g.printPath(); } while (g.nextPath()); cout << endl;
53
APÊNDICE B – SAÍDAS 1,2,3 DO PGC Neste apêndice são apresentados os resultados obtidos pelo PGC nas redes
1, 2 e 3, visualizadas na página 25.
Exemplo 1: [ 1 --> 2 ] 1 2 1 4 3 2 1 4 2 [ 1 --> 3 ] 1 2 3 1 2 4 3 1 4 3 1 4 2 3 [ 1 --> 4 ] 1 2 3 4 1 2 4 1 4 [ 2 --> 3 ] 2 1 4 3 2 3 2 4 3 [ 2 --> 4 ] 2 1 4 2 3 4 2 4 [ 3 --> 4 ] 3 2 1 4 3 2 4 3 4 Exemplo 2: [ 1 --> 2 ] 1 2 1 4 2 1 4 3 2 1 5 4 2 1 5 4 3 2 [ 1 --> 3 ] 1 2 3 1 2 4 3 1 4 2 3 1 4 3 1 5 4 2 3 1 5 4 3
[ 1 --> 4 ] 1 2 3 4 1 2 4 1 4 1 5 4 [ 1 --> 5 ] 1 2 3 4 5 1 2 4 5 1 4 5 1 5 [ 2 --> 3 ] 2 1 4 3 2 1 5 4 3 2 3 2 4 3 [ 2 --> 4 ] 2 1 4 2 1 5 4 2 3 4 2 4 [ 2 --> 5 ] 2 1 4 5 2 1 5 2 3 4 1 5 2 3 4 5 2 4 1 5 2 4 5 [ 3 --> 4 ] 3 2 1 4 3 2 1 5 4 3 2 4 3 4 [ 3 --> 5 ] 3 2 1 4 5 3 2 1 5 3 2 4 1 5 3 2 4 5 3 4 1 5 3 4 2 1 5 3 4 5
[ 4 --> 5 ] 4 1 5 4 2 1 5 4 3 2 1 5 4 5 Exemplo 3: [ 1 --> 2 ] 1 2 1 6 5 2 1 6 5 4 2 1 6 5 4 3 2 1 5 2 1 5 4 2 1 5 4 3 2 [ 1 --> 3 ] 1 2 3 1 2 4 3 1 2 5 4 3 1 6 5 2 3 1 6 5 2 4 3 1 6 5 4 2 3 1 6 5 4 3 1 5 2 3 1 5 2 4 3 1 5 4 2 3 1 5 4 3 [ 1 --> 4 ] 1 2 3 4 1 2 4 1 2 5 4 1 6 5 2 3 4 1 6 5 2 4 1 6 5 4 1 5 2 3 4 1 5 2 4 1 5 4 [ 1 --> 5 ] 1 2 3 4 5 1 2 4 5 1 2 5 1 6 5 1 5
[ 1 --> 6 ] 1 2 3 4 5 6 1 2 4 5 6 1 2 5 6 1 6 1 5 6 [ 2 --> 3 ] 2 1 6 5 4 3 2 1 5 4 3 2 3 2 4 3 2 5 4 3 [ 2 --> 4 ] 2 1 6 5 4 2 1 5 4 2 3 4 2 4 2 5 4 [ 2 --> 5 ] 2 1 6 5 2 1 5 2 3 4 5 2 4 5 2 5 [ 2 --> 6 ] 2 1 6 2 1 5 6 2 3 4 5 1 6 2 3 4 5 6 2 4 5 1 6 2 4 5 6 2 5 1 6 2 5 6 [ 3 --> 4 ] 3 2 1 6 5 4 3 2 1 5 4 3 2 4 3 2 5 4 3 4 [ 3 --> 5 ]
54
3 2 1 6 5 3 2 1 5 3 2 4 5 3 2 5 3 4 2 1 6 5 3 4 2 1 5 3 4 2 5 3 4 5 [ 3 --> 6 ] 3 2 1 6 3 2 1 5 6 3 2 4 5 1 6
3 2 4 5 6 3 2 5 1 6 3 2 5 6 3 4 2 1 6 3 4 2 1 5 6 3 4 2 5 1 6 3 4 2 5 6 3 4 5 1 6 3 4 5 2 1 6 3 4 5 6 [ 4 --> 5 ] 4 2 1 6 5
4 2 1 5 4 2 5 4 3 2 1 6 5 4 3 2 1 5 4 3 2 5 4 5 [ 4 --> 6 ] 4 2 1 6 4 2 1 5 6 4 2 5 1 6 4 2 5 6 4 3 2 1 6
4 3 2 1 5 6 4 3 2 5 1 6 4 3 2 5 6 4 5 1 6 4 5 2 1 6 4 5 6 [ 5 --> 6 ] 5 1 6 5 2 1 6 5 4 2 1 6 5 4 3 2 1 6 5 6
55
APÊNDICE C – SAÍDAS DOS CAMINHOS DO PGC
Neste apêndice são apresentados os resultados obtidos pelo PGC nos testes, com
figuras regulares de 3 e 7 vértices
Exemplo com 3
vértices
[ 1 --> 2 ] 1 3 2 1 2 [ 1 --> 3 ] 1 3 1 2 3 [ 2 --> 3 ] 2 1 3 2 3
Exemplo com 7 vértices [ 1 --> 2 ] 1 2 1 7 2 1 5 2 1 5 4 2 1 5 4 3 2 1 6 5 2 1 6 5 4 2 1 6 5 4 3 2 [ 1 --> 3 ] 1 2 3 1 2 4 3 1 2 5 4 3 1 7 2 3 1 7 2 4 3 1 7 2 5 4 3 1 5 2 3 1 5 2 4 3 1 5 4 2 3 1 5 4 3 1 6 5 2 3 1 6 5 2 4 3 1 6 5 4 2 3 1 6 5 4 3 [ 1 --> 4 ] 1 2 3 4
1 2 4 1 2 5 4 1 7 2 3 4 1 7 2 4 1 7 2 5 4 1 5 2 3 4 1 5 2 4 1 5 4 1 6 5 2 3 4 1 6 5 2 4 1 6 5 4 [ 1 --> 5 ] 1 2 3 4 5 1 2 4 5 1 2 5 1 7 2 3 4 5 1 7 2 4 5 1 7 2 5 1 5 1 6 5 [ 1 --> 6 ] 1 2 3 4 5 6 1 2 4 5 6 1 2 5 6 1 7 2 3 4 5 6 1 7 2 4 5 6 1 7 2 5 6 1 5 6 1 6 [ 1 --> 7 ] 1 2 7 1 7 1 5 2 7 1 5 4 2 7 1 5 4 3 2 7 1 6 5 2 7 1 6 5 4 2 7 1 6 5 4 3 2 7 [ 2 --> 3 ] 2 1 5 4 3 2 1 6 5 4 3 2 3
2 4 3 2 5 4 3 2 7 1 5 4 3 2 7 1 6 5 4 3 [ 2 --> 4 ] 2 1 5 4 2 1 6 5 4 2 3 4 2 4 2 5 4 2 7 1 5 4 2 7 1 6 5 4 [ 2 --> 5 ] 2 1 5 2 1 6 5 2 3 4 5 2 4 5 2 5 2 7 1 5 2 7 1 6 5 [ 2 --> 6 ] 2 1 5 6 2 1 6 2 3 4 5 1 6 2 3 4 5 6 2 4 5 1 6 2 4 5 6 2 5 1 6 2 5 6 2 7 1 5 6 2 7 1 6 [ 2 --> 7 ] 2 1 7 2 3 4 5 1 7 2 3 4 5 6 1 7 2 4 5 1 7 2 4 5 6 1 7 2 5 1 7 2 5 6 1 7 2 7 [ 3 --> 4 ]
3 2 1 5 4 3 2 1 6 5 4 3 2 4 3 2 5 4 3 2 7 1 5 4 3 2 7 1 6 5 4 3 4 [ 3 --> 5 ] 3 2 1 5 3 2 1 6 5 3 2 4 5 3 2 5 3 2 7 1 5 3 2 7 1 6 5 3 4 2 1 5 3 4 2 1 6 5 3 4 2 5 3 4 2 7 1 5 3 4 2 7 1 6 5 3 4 5 [ 3 --> 6 ] 3 2 1 5 6 3 2 1 6 3 2 4 5 1 6 3 2 4 5 6 3 2 5 1 6 3 2 5 6 3 2 7 1 5 6 3 2 7 1 6 3 4 2 1 5 6 3 4 2 1 6 3 4 2 5 1 6 3 4 2 5 6 3 4 2 7 1 5 6 3 4 2 7 1 6 3 4 5 1 6 3 4 5 2 1 6 3 4 5 2 7 1 6 3 4 5 6 [ 3 --> 7 ] 3 2 1 7 3 2 4 5 1 7 3 2 4 5 6 1 7
56
3 2 5 1 7 3 2 5 6 1 7 3 2 7 3 4 2 1 7 3 4 2 5 1 7 3 4 2 5 6 1 7 3 4 2 7 3 4 5 1 2 7 3 4 5 1 7 3 4 5 2 1 7 3 4 5 2 7 3 4 5 6 1 2 7 3 4 5 6 1 7 [ 4 --> 5 ] 4 2 1 5 4 2 1 6 5 4 2 5 4 2 7 1 5 4 2 7 1 6 5 4 3 2 1 5 4 3 2 1 6 5 4 3 2 5 4 3 2 7 1 5 4 3 2 7 1 6 5
4 5 [ 4 --> 6 ] 4 2 1 5 6 4 2 1 6 4 2 5 1 6 4 2 5 6 4 2 7 1 5 6 4 2 7 1 6 4 3 2 1 5 6 4 3 2 1 6 4 3 2 5 1 6 4 3 2 5 6 4 3 2 7 1 5 6 4 3 2 7 1 6 4 5 1 6 4 5 2 1 6 4 5 2 7 1 6 4 5 6 [ 4 --> 7 ] 4 2 1 7 4 2 5 1 7 4 2 5 6 1 7 4 2 7
4 3 2 1 7 4 3 2 5 1 7 4 3 2 5 6 1 7 4 3 2 7 4 5 1 2 7 4 5 1 7 4 5 2 1 7 4 5 2 7 4 5 6 1 2 7 4 5 6 1 7 [ 5 --> 6 ] 5 1 6 5 2 1 6 5 2 7 1 6 5 4 2 1 6 5 4 2 7 1 6 5 4 3 2 1 6 5 4 3 2 7 1 6 5 6 [ 5 --> 7 ] 5 1 2 7 5 1 7 5 2 1 7
5 2 7 5 4 2 1 7 5 4 2 7 5 4 3 2 1 7 5 4 3 2 7 5 6 1 2 7 5 6 1 7 [ 6 --> 7 ] 6 1 2 7 6 1 7 6 1 5 2 7 6 1 5 4 2 7 6 1 5 4 3 2 7 6 5 1 2 7 6 5 1 7 6 5 2 1 7 6 5 2 7 6 5 4 2 1 7 6 5 4 2 7 6 5 4 3 2 1 7 6 5 4 3 2 7
57
APÊNDICE D – EXEMPLOS 1, 2 E 3 DO PGC 2
Estes exemplos aqui listados referem-se aos visualizados na página 25.
Exemplo 1: 1) Grafo 1: 4 5 1 2 0.11 1 4 0.47 2 3 0.21 2 4 0.36 3 4 0.15 2) Saída 1, cycles, inicio: ponto 3 4 3 5 -2.77556e-17 | 3 2 1 4 3 4 -2.77556e-17 | 3 2 4 3 5 -2.77556e-17 | 3 4 1 2 3 4 -2.77556e-17 | 3 4 2 3 -1 0 | 3) Saída 1, cycles, todos pontos 4 1 5 0 | 1 2 3 4 1 4 0 | 1 2 4 1 4 -1.38778e-17 | 1 4 2 1 5 -4.16334e-17 | 1 4 3 2 1 -1 0 | 2 4 0 | 2 1 4 2 5 0 | 2 1 4 3 2 5 1.38778e-17 | 2 3 4 1 2 4 0 | 2 3 4 2 4 1.38778e-17 | 2 4 1 2 4 0 | 2 4 3 2 -1 0 | 3 5 -2.77556e-17 | 3 2 1 4 3 4 -2.77556e-17 | 3 2 4 3 5 -2.77556e-17 | 3 4 1 2 3 4 -2.77556e-17 | 3 4 2 3 -1 0 |
4 5 0 | 4 1 2 3 4 4 0 | 4 1 2 4 4 0 | 4 2 1 4 4 0 | 4 2 3 4 5 0 | 4 3 2 1 4 4 0 | 4 3 2 4 -1 0 | -1 4) Saída 1, paths, todos pontos 4 1 2 2 0.11 | 1 2 3 0.11 | 1 4 2 4 0.11 | 1 4 3 2 -1 0 | 1 3 3 0.32 | 1 2 3 4 0.32 | 1 2 4 3 4 0.32 | 1 4 2 3 3 0.32 | 1 4 3 -1 0 | 1 4 4 0.47 | 1 2 3 4 3 0.47 | 1 2 4 2 0.47 | 1 4 -1 0 | 2 3 4 0.21 | 2 1 4 3 2 0.21 | 2 3 3 0.21 | 2 4 3 -1 0 | 2 4 3 0.36 | 2 1 4 3 0.36 | 2 3 4 2 0.36 | 2 4 -1 0 |
58
3 4 4 0.15 | 3 2 1 4 3 0.15 | 3 2 4 2 0.15 | 3 4 -1 0 | -1 –1 Exemplo 2: 1) Grafo 2: 5 7 1 2 0.36 1 4 1.31 1 5 2.11 2 3 0.25 2 4 0.95 3 4 0.70 4 5 0.80 2) Saída 2, cycles, todos pontos 5 1 5 0 | 1 2 3 4 1 6 4.44089e-16 | 1 2 3 4 5 1 4 2.22045e-16 | 1 2 4 1 5 4.44089e-16 | 1 2 4 5 1 4 5.55112e-16 | 1 4 2 1 5 5.55112e-16 | 1 4 3 2 1 4 4.44089e-16 | 1 4 5 1 4 2.22045e-16 | 1 5 4 1 5 3.33067e-16 | 1 5 4 2 1 6 3.33067e-16 | 1 5 4 3 2 1 -1 0 | 2 4 1.11022e-16 | 2 1 4 2 5 1.11022e-16 | 2 1 4 3 2 5 -2.22045e-16 | 2 1 5 4 2 6 -2.22045e-16 | 2 1 5 4 3 2 5 -2.22045e-16 | 2 3 4 1 2 4 -2.22045e-16 | 2 3 4 2 6 -1.11022e-16 | 2 3 4 5 1 2 4 -3.33067e-16 | 2 4 1 2 4 -2.22045e-16 | 2 4 3 2 5 -1.11022e-16 | 2 4 5 1 2
-1 0 | 3 5 1.11022e-16 | 3 2 1 4 3 6 -2.22045e-16 | 3 2 1 5 4 3 4 -2.22045e-16 | 3 2 4 3 5 -3.33067e-16 | 3 4 1 2 3 4 -3.33067e-16 | 3 4 2 3 6 -3.33067e-16 | 3 4 5 1 2 3 -1 0 | 4 5 -1.11022e-16 | 4 1 2 3 4 4 -1.11022e-16 | 4 1 2 4 4 -2.22045e-16 | 4 1 5 4 4 0 | 4 2 1 4 5 -2.22045e-16 | 4 2 1 5 4 4 -1.11022e-16 | 4 2 3 4 5 0 | 4 3 2 1 4 6 -2.22045e-16 | 4 3 2 1 5 4 4 -1.11022e-16 | 4 3 2 4 6 -1.11022e-16 | 4 5 1 2 3 4 5 -1.11022e-16 | 4 5 1 2 4 4 0 | 4 5 1 4 -1 0 | 5 6 0 | 5 1 2 3 4 5 5 0 | 5 1 2 4 5 4 2.22045e-16 | 5 1 4 5 4 -4.44089e-16 | 5 4 1 5 5 -4.44089e-16 | 5 4 2 1 5 6 -4.44089e-16 | 5 4 3 2 1 5 -1 0 | -1 3) Saída 2, paths, todos pontos 5 1 2 2 0.36 | 1 2 3 0.36 | 1 4 2 4 0.36 | 1 4 3 2 4 0.36 | 1 5 4 2 5 0.36 | 1 5 4 3 2 -1 0 | 1 3 3 0.61 | 1 2 3
59
4 0.61 | 1 2 4 3 4 0.61 | 1 4 2 3 3 0.61 | 1 4 3 5 0.61 | 1 5 4 2 3 4 0.61 | 1 5 4 3 -1 0 | 1 4 4 1.31 | 1 2 3 4 3 1.31 | 1 2 4 2 1.31 | 1 4 3 1.31 | 1 5 4 -1 0 | 1 5 5 2.11 | 1 2 3 4 5 4 2.11 | 1 2 4 5 3 2.11 | 1 4 5 2 2.11 | 1 5 -1 0 | 2 3 4 0.25 | 2 1 4 3 5 0.25 | 2 1 5 4 3 2 0.25 | 2 3 3 0.25 | 2 4 3 -1 0 | 2 4 3 0.95 | 2 1 4 4 0.95 | 2 1 5 4 3 0.95 | 2 3 4 2 0.95 | 2 4 -1 0 | 2 5 4 1.75 | 2 1 4 5 3 1.75 | 2 1 5 5 1.75 | 2 3 4 1 5 4 1.75 | 2 3 4 5 4 1.75 | 2 4 1 5 3 1.75 | 2 4 5 -1 0 | 3 4 4 0.7 | 3 2 1 4 5 0.7 | 3 2 1 5 4 3 0.7 | 3 2 4 2 0.7 | 3 4 -1 0 | 3 5
5 1.5 | 3 2 1 4 5 4 1.5 | 3 2 1 5 5 1.5 | 3 2 4 1 5 4 1.5 | 3 2 4 5 4 1.5 | 3 4 1 5 5 1.5 | 3 4 2 1 5 3 1.5 | 3 4 5 -1 0 | 4 5 3 0.8 | 4 1 5 4 0.8 | 4 2 1 5 5 0.8 | 4 3 2 1 5 2 0.8 | 4 5 -1 0 | -1 –1 Exemplo 3:
1) Grafo 3: 6 9 1 2 0.22 1 5 1.54 1 6 2.31 2 3 0.33 2 4 0.77 2 5 1.32 3 4 0.44 4 5 0.55 5 6 0.77
2) Saída 3, cycles, todos pontos 6 1 6 0 | 1 2 3 4 5 1 7 0 | 1 2 3 4 5 6 1 5 0 | 1 2 4 5 1 6 0 | 1 2 4 5 6 1 4 0 | 1 2 5 1 5 0 | 1 2 5 6 1 4 -2.77556e-17 | 1 5 2 1 5 -2.77556e-17 | 1 5 4 2 1 6 2.77556e-17 | 1 5 4 3 2 1 4 0 | 1 5 6 1 4 0 | 1 6 5 1 5 -2.77556e-17 | 1 6 5 2 1 6 -2.77556e-17 | 1 6 5 4 2 1
60
7 2.77556e-17 | 1 6 5 4 3 2 1 -1 0 | 2 4 0 | 2 1 5 2 5 0 | 2 1 5 4 2 6 0 | 2 1 5 4 3 2 5 -2.22045e-16 | 2 1 6 5 2 6 -2.22045e-16 | 2 1 6 5 4 2 7 -2.22045e-16 | 2 1 6 5 4 3 2 4 -2.22045e-16 | 2 3 4 2 6 -1.94289e-16 | 2 3 4 5 1 2 5 -2.22045e-16 | 2 3 4 5 2 7 -1.94289e-16 | 2 3 4 5 6 1 2 4 -2.22045e-16 | 2 4 3 2 5 -1.94289e-16 | 2 4 5 1 2 4 -2.22045e-16 | 2 4 5 2 6 -1.94289e-16 | 2 4 5 6 1 2 4 -1.94289e-16 | 2 5 1 2 4 -2.22045e-16 | 2 5 4 2 5 -2.22045e-16 | 2 5 4 3 2 5 -1.94289e-16 | 2 5 6 1 2 -1 0 | 3 6 -5.55112e-17 | 3 2 1 5 4 3 7 -5.55112e-17 | 3 2 1 6 5 4 3 4 -5.55112e-17 | 3 2 4 3 5 -5.55112e-17 | 3 2 5 4 3 4 -5.55112e-17 | 3 4 2 3 6 -5.55112e-17 | 3 4 5 1 2 3 5 -5.55112e-17 | 3 4 5 2 3 7 -5.55112e-17 | 3 4 5 6 1 2 3 -1 0 | 4 5 0 | 4 2 1 5 4 6 0 | 4 2 1 6 5 4 4 0 | 4 2 3 4 4 0 | 4 2 5 4 6 0 | 4 3 2 1 5 4 7 0 | 4 3 2 1 6 5 4 4 0 | 4 3 2 4 5 0 | 4 3 2 5 4 6 0 | 4 5 1 2 3 4 5 0 | 4 5 1 2 4 5 0 | 4 5 2 3 4 4 0 | 4 5 2 4 7 0 | 4 5 6 1 2 3 4 6 0 | 4 5 6 1 2 4 -1 0 |
5 6 0 | 5 1 2 3 4 5 5 0 | 5 1 2 4 5 4 0 | 5 1 2 5 4 0 | 5 1 6 5 4 0 | 5 2 1 5 5 0 | 5 2 1 6 5 5 0 | 5 2 3 4 5 4 0 | 5 2 4 5 5 0 | 5 4 2 1 5 6 0 | 5 4 2 1 6 5 4 0 | 5 4 2 5 6 0 | 5 4 3 2 1 5 7 0 | 5 4 3 2 1 6 5 5 0 | 5 4 3 2 5 7 0 | 5 6 1 2 3 4 5 6 0 | 5 6 1 2 4 5 5 0 | 5 6 1 2 5 4 0 | 5 6 1 5 -1 0 | 6 7 2.22045e-16 | 6 1 2 3 4 5 6 6 2.22045e-16 | 6 1 2 4 5 6 5 2.22045e-16 | 6 1 2 5 6 4 2.22045e-16 | 6 1 5 6 4 4.44089e-16 | 6 5 1 6 5 0 | 6 5 2 1 6 6 0 | 6 5 4 2 1 6 7 0 | 6 5 4 3 2 1 6 -1 0 | -1
3) Saída 3, paths, todos pontos 6 1 2 2 0.22 | 1 2 3 0.22 | 1 5 2 4 0.22 | 1 5 4 2 5 0.22 | 1 5 4 3 2 4 0.22 | 1 6 5 2 5 0.22 | 1 6 5 4 2 6 0.22 | 1 6 5 4 3 2 -1 0 | 1 3 3 0.55 | 1 2 3 4 0.55 | 1 2 4 3 5 0.55 | 1 2 5 4 3
61
4 0.55 | 1 5 2 3 5 0.55 | 1 5 2 4 3 5 0.55 | 1 5 4 2 3 4 0.55 | 1 5 4 3 5 0.55 | 1 6 5 2 3 6 0.55 | 1 6 5 2 4 3 6 0.55 | 1 6 5 4 2 3 5 0.55 | 1 6 5 4 3 -1 0 | 1 4 4 0.99 | 1 2 3 4 3 0.99 | 1 2 4 4 0.99 | 1 2 5 4 5 0.99 | 1 5 2 3 4 4 0.99 | 1 5 2 4 3 0.99 | 1 5 4 6 0.99 | 1 6 5 2 3 4 5 0.99 | 1 6 5 2 4 4 0.99 | 1 6 5 4 -1 0 | 1 5 5 1.54 | 1 2 3 4 5 4 1.54 | 1 2 4 5 3 1.54 | 1 2 5 2 1.54 | 1 5 3 1.54 | 1 6 5 -1 0 | 1 6 6 2.31 | 1 2 3 4 5 6 5 2.31 | 1 2 4 5 6 4 2.31 | 1 2 5 6 3 2.31 | 1 5 6 2 2.31 | 1 6 -1 0 | 2 3 5 0.33 | 2 1 5 4 3 6 0.33 | 2 1 6 5 4 3 2 0.33 | 2 3 3 0.33 | 2 4 3 4 0.33 | 2 5 4 3 -1 0 | 2 4 4 0.77 | 2 1 5 4 5 0.77 | 2 1 6 5 4 3 0.77 | 2 3 4 2 0.77 | 2 4 3 0.77 | 2 5 4
-1 0 | 2 5 3 1.32 | 2 1 5 4 1.32 | 2 1 6 5 4 1.32 | 2 3 4 5 3 1.32 | 2 4 5 2 1.32 | 2 5 -1 0 | 2 6 4 2.09 | 2 1 5 6 3 2.09 | 2 1 6 6 2.09 | 2 3 4 5 1 6 5 2.09 | 2 3 4 5 6 5 2.09 | 2 4 5 1 6 4 2.09 | 2 4 5 6 4 2.09 | 2 5 1 6 3 2.09 | 2 5 6 -1 0 | 3 4 5 0.44 | 3 2 1 5 4 6 0.44 | 3 2 1 6 5 4 3 0.44 | 3 2 4 4 0.44 | 3 2 5 4 2 0.44 | 3 4 -1 0 | 3 5 4 0.99 | 3 2 1 5 5 0.99 | 3 2 1 6 5 4 0.99 | 3 2 4 5 3 0.99 | 3 2 5 5 0.99 | 3 4 2 1 5 6 0.99 | 3 4 2 1 6 5 4 0.99 | 3 4 2 5 3 0.99 | 3 4 5 -1 0 | 3 6 5 1.76 | 3 2 1 5 6 4 1.76 | 3 2 1 6 6 1.76 | 3 2 4 5 1 6 5 1.76 | 3 2 4 5 6 5 1.76 | 3 2 5 1 6 4 1.76 | 3 2 5 6 6 1.76 | 3 4 2 1 5 6 5 1.76 | 3 4 2 1 6 6 1.76 | 3 4 2 5 1 6 5 1.76 | 3 4 2 5 6 5 1.76 | 3 4 5 1 6
62
6 1.76 | 3 4 5 2 1 6 4 1.76 | 3 4 5 6 -1 0 | 4 5 4 0.55 | 4 2 1 5 5 0.55 | 4 2 1 6 5 3 0.55 | 4 2 5 5 0.55 | 4 3 2 1 5 6 0.55 | 4 3 2 1 6 5 4 0.55 | 4 3 2 5 2 0.55 | 4 5 -1 0 | 4 6 5 1.32 | 4 2 1 5 6 4 1.32 | 4 2 1 6 5 1.32 | 4 2 5 1 6 4 1.32 | 4 2 5 6
6 1.32 | 4 3 2 1 5 6 5 1.32 | 4 3 2 1 6 6 1.32 | 4 3 2 5 1 6 5 1.32 | 4 3 2 5 6 4 1.32 | 4 5 1 6 5 1.32 | 4 5 2 1 6 3 1.32 | 4 5 6 -1 0 | 5 6 3 0.77 | 5 1 6 4 0.77 | 5 2 1 6 5 0.77 | 5 4 2 1 6 6 0.77 | 5 4 3 2 1 6 2 0.77 | 5 6 -1 0 | -1 –1
63
APÊNDICE E – ALGORITMO PGC 2 - PATHS O algoritmo referente ao PGC2 – cycles é análogo a este apresentado, somente
difere pelos vértices de início e final que serão iguais.
Classe Grafo{ nºvertices nºarestas cor[nºmaximovertices] vetor vetor adjacente[nºmaximovertices] vetor vetor caminhos matriz variações[nºmaximovertices][nºmaximovertices] método grafo(vértice){ n=vértice e=0 para cada vértice com cor[0 até vertice-1] = branco} método adicionararesta(u,v,h){ coloque vertice (v) no vetor adjacente [u] coloque vertice (u) no vetor adjacente [v] variações[u][v]=h variações[v][u]=-h nºaresta++} método encontretodoscaminhos(verticeI,verticeF){ limpacaminho coloque vertice (I) no vetor caminhos cor [I] = cinza método encontre(verticeF); valorvariações=0; cor[I] = branco; retira ultimo valor do vetor caminhos; } método encontre(verticeF){ seja u e v
coloque (v) no vetor caminhos se (v = verticeF){ método imprimevetorcaminhos; retorna;} para i=0, sendo menor que tamanho vetoradjacente[v]{ u=adjacente[u][i] se(cor[u]= branco){
coloque vertice(u) no vetor caminhos cor[u]=cinza valorvariações = execute soma variações[v][u] com valorvariações
método encontre(verticeF)
64
valorvariações = execute subtração variações[v][u] com valorvariações cor[u]=branco retira ultimo do vetor caminhos}}} método imprimevetorcaminhos} Inicio programa Entre com arquivo de entrada Entre com arquivo de saída Abrir arquivo entrada Abrir arquivo saída Entre todos os pares? sim ou não caso (todos os pares){ caso sim: todos os pares = verdadeiro sair caso não: todos os pares = falso Entre vérticeI Entre vérticeF sair} ler do arquivo entrada nºvertices e nºarestas execute classe Grafo método grafo(nºvertices) Para i=0, sendo menor que o nºarestas{ Ler do arquivo de entrada vértice(u), vértice(v), variação Diminua 1 de vértice(u) e de vértice(v) Executa classe Grafo método adicionaaresta(u,v,h)} Escrever no arquivo de saída � nºvertices Se(todos os pares){ Para i=0, sendo menor que nºvertices{ Para j=i+1, sendo menor que nºvertices{
Escrever no arquivo de saída � i+1 e j+1 Executa classe Grafo método encontretodoscaminhos(i,j)
Escrever no arquivo de saída � -1 0 } Escrever no arquivo de saída � -1 e 1} Se não{ Escrever no arquivo de saída � I+1 e J+1 Grafo.encontretodoscaminhos(I,J) Escrever no arquivo de saída � -1 0} Fecha arquivo de entrada Fecha arquivo de saída Fim do programa