• Nenhum resultado encontrado

Desafios de Implementa¸c˜ao

Ap´os a confec¸c˜ao da arquitetura e a defini¸c˜ao das atribui¸c˜oes de cada classe, teve in´ıcio a implementa¸c˜ao do aplicativo. Durante essa fase, surgiram diversos desafios que foram transpostos ou contornados. Alguns desses desafios, os mais importantes, s˜ao discutidos a seguir.

B.4.1

Regi˜ao de Visibilidade

Uma grande quantidade de desafios surgiram durante a busca por um algoritmo que constru´ısse uma regi˜ao de visibilidade corretamente, principalmente devido ao fato de que, ao trabalhar-se com guardas estacion´arios em v´ertices e com as instˆancias descritas na Se¸c˜ao 2.4, v´arios casos degenerados ocorrem.

Inicialmente, foram pesquisadas algumas implementa¸c˜oes dispon´ıveis em bibliotecas geom´etricas, mas nenhuma delas tratava corretamente os casos degenerados. Por fim, recorreu-se `a literatura, onde foram sucessivamente propostos alguns algoritmos com complexidade linear [30, 31, 33], at´e que um deles tornou-se confi´avel. No entanto, ao elevar o n´umero de v´ertices, o algoritmo n˜ao se mostrou robusto na pr´atica, falhando com freq¨uˆencia na constru¸c˜ao de determinadas regi˜oes de visibilidade. Isso ocorreu de- vido ao emprego pelo algoritmo de opera¸c˜oes n˜ao alg´ebricas, cujos resultados dependem da precis˜ao aritm´etica utilizada. Assim, o algoritmo fica sujeito a problemas de apro- xima¸c˜ao, arredondamento e precis˜ao, que se acumulam quando se utilizam ˆangulos em longas sequˆencias de c´alculos.

B.4. Desafios de Implementa¸c˜ao 149

c´alculo da regi˜ao de visibilidade, formas de evitar o uso de opera¸c˜oes n˜ao alg´ebricas. Isso conduziu `a modifica¸c˜ao do algoritmo [30] com a introdu¸c˜ao da t´ecnica de pseudo-ˆangulos, a qual extinguiu a necessidade do uso de tais opera¸c˜oes, tornando o c´alculo das regi˜oes de visibilidade correto, preciso e robusto.

B.4.2

Localiza¸c˜ao de Ponto dentro de Pol´ıgono Estrelado

Durante a implementa¸c˜ao do algoritmo, percebeu-se que um tempo n˜ao desprez´ıvel era despendido para determinar se um ponto da discretiza¸c˜ao fazia parte da regi˜ao de visibili- dade de determinado candidato a guarda. O algoritmo utilizado para executar essa tarefa era aquele disponibilizado no cgal que tem complexidade O(n), visto que ele n˜ao explora qualquer conhecimento mais amplo do tipo de pol´ıgono com o qual est´a trabalhando.

Sabendo que a regi˜ao de visibilidade de um ponto ´e um pol´ıgono estrelado, pode-se utilizar um algoritmo [40] que consome tempo O(log n) para esse mesmo c´alculo, fazendo simplesmente uma busca bin´aria. No entanto, experimentalmente, o algoritmo desen- volvido para essa busca n˜ao superou a eficiˆencia daquele implementado no cgal que, embora leve tempo linear no pior caso, possui um n´umero m´edio de opera¸c˜oes – para o tamanho das instˆancias trabalhadas – menor que o outro algoritmo, que tem que construir estruturas auxiliares mais complexas.

B.4.3

Arranjo de Visibilidade

Durante a computa¸c˜ao de determinadas estrat´egias, faz-se necess´ario a gera¸c˜ao do arranjo de visibilidade, composto pelas arestas do pol´ıgono e por todas as arestas das regi˜oes de visibilidade dos candidatos a guardas.

Para a constru¸c˜ao desse arranjo, foram pesquisadas algumas t´ecnicas e algoritmos que poderiam se encaixar melhor nos objetivos desse trabalho. Inicialmente, foi decidido construir o arranjo com uma estrutura criada sobre half-edges [35]. A partir do pol´ıgono original, adiciona-se uma a uma as arestas da regi˜ao de visibilidade, atualizando e man- tendo essa estrutura consistente. No entanto, devido a sobre utiliza¸c˜ao de objetos, classes, e checagens, n˜ao se chegou a uma implementa¸c˜ao do algoritmo com a eficiˆencia esperada. Ap´os alguma pesquisa, optou-se por trabalhar com o modelo de Arrangement 2 do cgal, constru´ıdo sobre a estrutura de half-edge e com um observador, que permitia a com- puta¸c˜ao de valores para serem adicionados `a estrutura, de forma que determinadas pro- priedades pudessem ser constru´ıdas e recuperadas mais tarde. Com essa implementa¸c˜ao, a eficiˆencia da constru¸c˜ao do arranjo de visibilidade aumentou, e passou a ser fact´ıvel a resolu¸c˜ao de instˆancias com um maior n´umero de v´ertices.

150 Apˆendice B. Implementa¸c˜ao do Algoritmo

B.4.4

Instˆancias Degeneradas

Por ser um problema pr´atico, o algoritmo deve ser robusto o suficiente para lidar com todos os tipos de instˆancias. O desafio ´e que a maior parte das instˆancias, em especial as aleat´orias ortogonais e as de von Koch, s˜ao degeneradas, isto ´e, possuem in´umeros v´ertices colineares. Desse modo, uma importante parte do trabalho foi adaptar determi- nados algoritmos para lidar corretamente com essas instˆancias, em especial a adapta¸c˜ao do algoritmo que realiza a constru¸c˜ao da regi˜ao de visibilidade de um ponto. Foi feito um estudo minucioso desse algoritmo e levantados diversos casos onde o mesmo falhava (compare o exemplo da Figura B.5 com o da Figura B.6).

Figura B.5: Falha no algoritmo de visibilidade devido a casos degenerados.

Atrav´es de um cuidadoso processo de an´alise, fez-se algumas mudan¸cas pontuais no c´odigo que permitiram que esses casos fossem solucionados corretamente, gerando resul- tados consistentes, como pode ser visto no mesmo exemplo anterior, mas agora corrigido, na Figura B.6.

B.4. Desafios de Implementa¸c˜ao 151

Figura B.6: Falha corrigida no algoritmo de visibilidade.

B.4.5

Aritm´etica Exata

Um dos primeiros e mais essenciais pontos a serem considerados ao se desenvolver apli- cativos geom´etricos ´e a forma como ser´a tratada a aritm´etica do projeto. Aqui, v´arios aspectos da implementa¸c˜ao e dos objetivos a serem alcan¸cados devem ser ponderados, de modo que o resultado seja t˜ao robusto e eficiente como esperado. Note que um pequeno erro de aproxima¸c˜ao pode fazer com que todo o resultado seja interpretado erroneamente. Para o algoritmo implementado nessa disserta¸c˜ao, foi escolhida uma aritm´etica que fosse exata e robusta nos termos apresentados e, ao mesmo tempo, fosse eficiente. Utilizou- se para esse fim a biblioteca gmp, do inglˆes GNU Multiple-Precision Library. Essa bibli- oteca pode ser utilizada como parˆametro para os templates da biblioteca de algoritmos geom´etricos. Al´em de ser gratuita, ela trabalha com aritm´etica de precis˜ao arbitr´aria, onde o limite pr´atico da sua precis˜ao ´e a quantidade de mem´oria dispon´ıvel na m´aquina. A gmp ´e tida como uma das mais r´apidas bibliotecas que trabalham com grandes valores de n´umeros pois, entre outros fatores, utiliza diferentes algoritmos para diferentes tamanhos de operandos, al´em de possuir c´odigo otimizado para diferentes processadores.

´

152 Apˆendice B. Implementa¸c˜ao do Algoritmo

do aplicativo foram os erros referentes ao uso de aritm´etica inexata. O maior deles foi a utiliza¸c˜ao de opera¸c˜oes n˜ao alg´ebricas para o c´alculo da regi˜ao de visibilidade de um ponto. Esse problema acabou contornado com o uso da t´ecnica de pseudo-ˆangulos.

Documentos relacionados