Está en la página 1de 8

Algoritmos ACO aplicados a

problemas geométricos de optimización∗



M. G. Dorzán, E. O. Gagliardi, M. G. Leguizamón, M. T. Taranilla

G. Hernández

Resumen

Muchos problemas de optimización en configuraciones geométricas son NP-duros por lo que


interesa obtener soluciones aproximadas. En este trabajo proponemos la utilización de una técnica
metaheurı́stica, Optimización basada en Colonias de Hormigas (Ant Colony Optimization - ACO)
para la resolución aproximada de los siguientes problemas para un conjunto de puntos en el plano:
triangulación de peso mı́nimo, pseudotriangulación de peso mı́nimo y poligonización de perı́metro
mı́nimo.

1 Introducción

En Geometrı́a Computacional hay numerosos problemas que, o bien son de naturaleza NP-dura, o
bien son problemas para los cuales no se conocen soluciones eficientes. De todos modos, resulta de
interés encontrar soluciones a tales problemas, aunque las mismas sean aproximadas a las óptimas, por
medio de métodos de naturaleza heurı́stica. En particular, es interesante el estudio de problemas de
optimización geométrica relacionados con ciertas configuraciones geométricas obtenidas a partir de un
conjunto de puntos como son las triangulaciones, las pseudotriangulaciones y las poligonizaciones. En
estos problemas se busca optimizar ciertas propiedades que miden la calidad de las configuraciones:
peso, perı́metro, dilación, factor de carga, etc. Dada la dificultad inherente de dichos problemas, los
algoritmos aproximados surgen como candidatos alternativos para su aplicación. Éstos, pueden dar
soluciones cercanas a las óptimas y pueden ser especı́ficos para un problema tratado o formar parte
de una estrategia general aplicable en la resolución de distintos problemas, como lo son las técnicas
metaheurı́sticas.

Una metaheurı́stica es un proceso de generación iterativo que guı́a la búsqueda de soluciones com-
binando inteligentemente diferentes conceptos de diversos campos como: inteligencia artificial [13],
evolución biológica [2], inteligencia colectiva [9], sistemas inmunes [3], entre otros. Una metaheurı́stica
da un marco algorı́tmico general que puede ser aplicado en problemas de optimización con pocas
modificaciones que lo adapten a un problema especı́fico. Estos métodos son simples de implementar
y han demostrado ser exitosos en encontrar de forma eficiente buenas soluciones para problemas de
optimización NP-duros [11].
Los algoritmos propuestos en este trabajo derivan de una metaheurı́stica basada en inteligen-
cia colectiva (swarm intelligence), más especı́ficamente, en el comportamiento de ciertas colonias de
hormigas. Este marco presupone un sistema de agentes que obedecen a un conjunto de reglas muy
simples, pero que actuando cooperativamente, componen un sistema complejo. En particular, trata-
mos con la técnica Ant Colony Optimization (ACO), la cual es un proceso distribuido, en el que un
∗ Parcialmente subvencionado por Proyecto UPM AL09-PAC-12 y por Proyecto Tecnologı́as Avanzadas de Bases de

Datos N◦ 22/F614, UNSL


† Departamento de Informática, Facultad de Ciencias Fı́sico Matemáticas y Naturales, Universidad Nacional de San

Luis, Argentina {mgdorzan, oli, legui, tarani}@unsl.edu.ar


‡ Facultad de Informática, Universidad Politécnica de Madrid, España, gregorio@fi.upm.es
conjunto de agentes (reactivos) actúan en forma independiente y cooperan esporádicamente en forma
indirecta, para llevar a cabo un objetivo común.
En este artı́culo presentamos el diseño de algoritmos ACO para la obtención de soluciones apro-
ximadas a los siguientes problemas: Triangulación de Peso Mı́nimo (Minimum Weight Triangulation
- M W T ), Pseudotriangulación de Peso Mı́nimo (Minimum Weight Pseudo-triangulation - M W P T ) y
Poligonización de Perı́metro Mı́nimo (Minimum Perimeter Polygonization - M P P ).
El trabajo se ha organizado de la siguiente forma. En la Sección 2 presentamos los aspectos teóricos
y generales de ACO. En la Sección 3 describimos los algoritmos ACO propuestos para la resolución
de los problemas estudiados. En la Sección 4 presentamos algunos aspectos de la experimentación y
terminamos en la Sección 5 con las conclusiones y trabajos futuros.

2 Optimización basada en Colonias de Hormigas

La Optimización basada en Colonias de Hormigas (Ant Colony Optimization, ACO en el resto del
trabajo) es una metaheurı́stica inspirada en el comportamiento que siguen las hormigas para encontrar
los caminos más cortos entre las fuentes de comida y el hormiguero, surgida a partir del trabajo inicial
de Dorigo, Maniezzo y Colorni sobre Sistema de Hormigas (Ant System) [4].
Los algoritmos ACO son aptos para resolver problemas de optimización combinatoria. Se basan en
una colonia de hormigas artificiales, representadas por agentes computacionales simples, que trabajan
de manera cooperativa y se comunican mediante rastros de feromona artificiales [5].
Son esencialmente algoritmos constructivos: en cada iteración del algoritmo, cada hormiga cons-
truye una solución al problema recorriendo un grafo de construcción. Cada arista (p, q) del grafo
representa los posibles pasos que la hormiga puede dar y tiene asociadas dos informaciones que guı́an
el movimiento de la hormiga:

• Información heurı́stica, que mide la preferencia heurı́stica, ηpq , de moverse desde el nodo p hasta
el nodo q, o sea, de recorrer la arista. Las hormigas no modifican esta información durante la
ejecución del algoritmo.
• Información de los rastros de feromona artificiales, que miden la “deseabilidad aprendida” del
movimiento, τpq , de p a q, imitando a la feromona real depositada por las hormigas reales.
Esta información se modifica durante la ejecución del algoritmo dependiendo de las soluciones
encontradas por las hormigas.

Una vez que cada hormiga ha generado una solución se evalúa la misma y se puede depositar una
cantidad de feromona en función de la calidad de su solución. Esta información representa el sesgo de
búsqueda que influye al resto de las hormigas de la colonia en el futuro.
Además, el modo de operación genérico de un algoritmo ACO incluye dos procedimientos adi-
cionales, la evaporación de los rastros de feromona y las acciones del demonio. La evaporación de
feromona la lleva a cabo el entorno y se usa como un mecanismo que evita el estancamiento en la
búsqueda y permite que las hormigas busquen y exploren nuevas regiones del espacio. Las acciones
del demonio son acciones opcionales, que no tienen una correspondencia con el comportamiento de las
hormigas reales, para implementar tareas desde una perspectiva global. Algunos ejemplos de acciones
del demonio son: observar la calidad de todas las soluciones generadas y depositar una nueva cantidad
de feromona adicional sólo en las aristas asociadas a algunas soluciones, o aplicar un procedimiento de
búsqueda local a las soluciones generadas por las hormigas antes de actualizar los rastros de feromona.
A continuación presentamos los pasos fundamentales de la estrategia de ACO.
Algoritmo 2.1. ACO-General

{
Inicializar /* inicialización de parámetros y estructuras */
Para c=1 hasta NroCiclos
Para k=1 hasta NroHormigas
ConstSolucionk /* hormiga-k construye solución k */
ActualizarMejorSolución /* selección de la mejor solución */
ActualizarRastro /* actualización de rastro de feromonas */
FinPara
RetornarMejorSolución
}

Inicializar
Incluye la inicialización de los valores de los parámetros que se consideran en el algoritmo. Entre
otros, se deben fijar: el rastro inicial de feromona asociado a cada arista, τ0 , que es un valor positivo
pequeño, normalmente el mismo para todas las aristas, el número de hormigas en la colonia, k, y
los pesos que definen la proporción en la que afectarán la información heurı́stica y de los rastros de
feromonas en la regla de transición probabilı́stica, denominados β y α respectivamente.
Construcción de una solución por la hormiga k
Se inicia con una solución parcial vacı́a, que se extiende a cada paso añadiéndole un componente
de solución factible elegido entre los vecinos de la solución actual. Esto equivale a encontrar una ruta
en el grafo de construcción guiada por el mecanismo que define el conjunto de vecinos factibles con
respecto a la solución parcial. La elección de un vecino factible se realiza de manera probabilı́stica en
cada paso de la construcción, dependiendo de la variante ACO utilizada. En este trabajo, el modelo
de probabilidad con retroalimentación utilizado en los algoritmos de construcción es:

 α β

 τij .ηij
P α .η β
, j ∈ F(pi );
τih
Pij (k) = ih (1)

 0,
h∈F (pi )

en otro caso.

donde:

• F(pi ) es el conjunto de puntos factibles para el punto pi .


• τij es el valor de feromona asociado a la arista (pi , pj ).
• ηij = 1/dij es el valor heurı́stico asociado a la arista (pi , pj ). (dij es la distancia euclı́dea entre
los puntos pi y pj ).
• α y β son parámetros positivos que determinan la importancia relativa de la feromona con
respecto a la información heurı́stica.

Actualización del rastro


En este paso se aumenta el nivel de feromona de los caminos prometedores y disminuye el de los
caminos no tan buenos. Primero, se reducen todos los valores de feromona por medio del proceso de
evaporación. Luego, se incrementa el nivel de feromona al conjunto de soluciones buenas. Se utiliza la
siguiente fórmula:
τij = (1 − ρ)τij + ∆τij (2)
donde:

• ρ ∈ (0, 1] es el factor de persistencia del rastro.


P
N roHormigas
• ∆τij = ∆k τij es la acumulación de rastro, proporcional a la calidad de las soluciones.
k=1
½
1/Lk , si la hormiga k utilizó la arista pi , pj ;
• ∆k τij =
0, en otro caso.
• Lk representa el valor objetivo de la solución k (aparece en el denominador para problemas de
minimización).

La evaporación de feromona evita una convergencia demasiado rápida del algoritmo. Además, esta
forma de olvidar permite la exploración de nuevas áreas del espacio de búsqueda.

La actualización del rastro de feromona se puede realizar al menos de dos formas: elitista o no
elitista. En el caso elitista, se utiliza la mejor solución encontrada para dar un refuerzo adicional a los
niveles de feromona. El no elitista utiliza las soluciones encontradas por todas las hormigas para dar
un refuerzo adicional a los niveles de feromona. Nuestra propuesta incluye la aplicación de estas dos
formas de actualización del rastro de feromona.

3 Algoritmos ACO propuestos

Presentamos la adaptación del algoritmo ACO-General a tres problemas de optimización geométrica


sobre un conjunto de puntos en el plano, triangulación de peso mı́nimo, pseudotriangulación de peso
mı́nimo y poligonización de perı́metro mı́nimo.

3.1 Triangulación de peso mı́nimo MWT

Dado un conjunto S de puntos en el plano, una triangulación de S es un conjunto maximal de segmentos


cuyos extremos son los puntos de S y tales que dos cualesquiera de esos segmentos no se cortan en
puntos interiores. El peso de una triangulación T es la suma de las longitudes euclı́deas de todos
los segmentos (o aristas) de T. La triangulación que minimiza esta suma se denomina triangulación
de peso mı́nimo de S y se denota por M W T (S). Esta triangulación óptima es útil en problemas de
aproximación de datos en dos variables. La complejidad de su cálculo fue uno de los problemas abiertos
más interesantes en Geometrı́a Computacional hasta que Mulzer y Rote demostraron en 2006 que la
construcción de M W T (S) es un problema NP-duro [12]. En cuanto a resultados aproximados el mejor
resultado conocido es un algoritmo con factor constante de aproximación de Krznaric y Levcopoulos
[10].

En el algoritmo ACO, cada hormiga construye una triangulación, partiendo de un punto inicial
cualquiera, agregando aristas a la triangulación mientras no se corten. En caso de no haber aristas
factibles desde el punto actual, la elección del próximo punto de referencia se realiza mediante alguno
de los siguientes criterios: i) en forma aleatoria; ii) que tenga mayor cantidad de aristas factibles; iii)
tenga menor cantidad de aristas factibles.
Algoritmo 3.1. ConstSolucionk

{
Sk ← ∅ /* Sk Solución construida por la hormiga k */
pi ← SeleccionarPuntoInicial(S)
Mientras CantFactibles(Sk ) > 0
Fpi ← Factibles(pi , Sk )
Si Fpi = ∅ /* no existen puntos factibles desde pi */
pi ← SeleccionarPunto(S, Sk )
Fpi ← Factibles(pi , Sk )
FinSi
pj ← SeleccionarPuntoProbabilisticamente(Fpi )
Sk ← Sk ∪ {(pi , pj )} /* agrega la arista (pi , pj ) a la solución */
ActualizarFactibles(pi , pj )
pi ← pj
FinMientras
}
donde:
Factibles(pi , Sk ): retorna un conjunto de puntos p ∈ S, tal que la arista (pi , p) no corta a ninguna
arista perteneciente a la solución Sk .
SeleccionarPuntoInicial(S): retorna un punto p ∈ S, elegido aleatoriamente.
CantFactibles(Sk ): retorna la cantidad de puntos factibles calculada de acuerdo a las aristas que forman
parte de la solución Sk hasta el momento.
SeleccionarPunto(S, Sk ): retorna un punto p ∈ S, tal que Factibles(p, Sk ) debe contener al menos un
punto. Esta selección se realiza teniendo en cuenta las aristas que forman parte de la solución Sk y
alguno de los siguientes criterios: 1) se elige el punto p en forma aleatoria; 2) se elige el punto p que
tenga mayor cantidad de puntos factibles; 3) se elige el punto p que tenga menor cantidad de puntos
factibles.
SeleccionarPuntoProbabilisticamente(Fpi ): retorna un punto pj ∈ Fpi elegido de acuerdo al modelo
de probabilidad dado en la ecuación 1.

3.2 Pseudo-triangulación de peso mı́nimo MWPT

Dado un conjunto S de puntos en el plano, una pseudotriangulación es una partición del cierre convexo
de S en pseudotriángulos cuyo conjunto de vértices son los puntos de S. Un pseudotriángulo es un
polı́gono simple con exactamente tres vértices convexos. El peso de una pseudotriangulación P es la
suma de las longitudes euclı́deas de todas las aristas de P. La pseudotriangulación que minimiza esta
suma se denomina pseudotriangulación de peso mı́nimo de S y la denotaremos por M W P T (S). El
término pseudotriangulación fue introducido por Pocchiola y Vegter en [14] por analogı́a con los arreglos
de pseudorrectas y en [15] hay un excelente resumen de muchos resultados sobre pseudotriangulaciones.
En cuanto al peso, Gudmundsson y Levcopoulos presentaron en [8] un algoritmo que construye, en
tiempo cúbico, la pseudotriangulación de peso mı́nimo de un polı́gono convexo. Y también una solución,
en tiempo O(nlogn), que aproxima la solución óptima con un factor O(logn) con respecto al peso del
árbol generador de peso mı́nimo sobre S.

En el algoritmo ACO, cada hormiga construye una solución, partiendo de la cara formada por el
cierre convexo de la nube de puntos, CH(S). Ası́ se inicia un proceso de partición de regiones o caras
hasta que se consigue que todas sean pseudotriángulos vacı́os de puntos interiores. En el paso general
se considera el conjunto Carask donde se mantienen las caras no tratadas. En el análisis de una cara
se verifica en primer lugar si es pseudotriángulo vacı́o de puntos interiores, en cuyo caso pasa a formar
parte del conjunto final de pseudotriángulos (PST). En otro caso, se parte en dos nuevas regiones, o
bien seleccionando un punto interior y dos del borde, o bien, si no hay puntos interiores, dos del borde,
para descomponer la cara inicial en dos nuevas. Se actualiza Carask y se repite el proceso hasta que
todas las caras de Carask se han analizado.

Algoritmo 3.2. ConstSolucionk

{
PST ← ∅
Mientras CARASk 6= ∅
Sea F ∈ CARASk
Si F es pseudotriángulo vacı́o de puntos interiores
PST ← PST ∪ {F} /* F es un nuevo pseudotriángulo */
CARASk ← CARASk - {F}
Sino
ParticionarCara(F) /* particiona la cara F */
FinSi
FinMientras
Sk ← Convertir(PST)
}

En el procedimiento Inicializar del ACO-general, se realiza CARASk ← {CH(S)}.


Convertir(PST): construye la pseudotriangulación a partir de los pseudotriángulos obtenidos en PST.
SubAlgoritmo ParticionarCara(F)
{
/* selecciona los puntos para formar nueva cara */
pi ← SeleccionarPunto(F) /* interior - borde de F */
pj ← SeleccionarPuntoProbabilisticamente(F, pi , 0) /* del borde de F, respecto de pi */
Si pi no pertenece al borde de F
pk ← SeleccionarPuntoProbabilisticamente(F, pi , pj )
Sino
pk ← 0
FinSi
DividirCara(F, pi , pj , pk , F1 , F2 )
CARASk ← CARASk - F ∪ F1 , F2
}

Donde:
SeleccionarPuntoProbabilisticamente(F, pi , pj ): si pi es cero retorna un punto p ∈ Factibles(F, pi ).
En otro caso, retorna un punto p ∈ {Factibles(F, pi )-pj }. En ambos casos, p es elegido de acuerdo al
modelo de probabilidad dado en la ecuación 1. Factibles(F, pi ) es el conjunto de puntos visibles de pi ,
no unidos a pi por una arista, en la cara F.
DividirCara(F, pi , pj , pk , F1 , F2 ): construye dos caras F1 y F2 , a partir de F y de los puntos pi , pj y
pk .

SubAlgoritmo SeleccionarPunto(F)
{
I ← Interiores(F)
Si I 6= ∅
p ← SeleccionarPuntoInterior(F)
Sino
p ← SeleccionarPuntoBorde(F)
FinSi
Retornar p
}

Los criterios de selección en SeleccionarPuntoInterior(F) y SeleccionarPuntoBorde(F), pueden ser: i)


se elige el punto p en forma aleatoria; ii) se elige el punto p que tenga mayor cantidad de puntos
factibles; iii) se elige el punto p que tenga menor cantidad de puntos factibles.

3.3 Poligonización de perı́metro mı́nimo MPP

Dado un conjunto finito de puntos S en el plano, se llama poligonización de S a un polı́gono simple


cuyos vértices sean todos los puntos de S. Un conjunto S de n puntos en el plano tiene una cantidad
exponencial de poligonizaciones por lo que es interesante detectar aquellas que son óptimas respecto
de algún criterio, por ejemplo minimizar o maximizar el área o el perı́metro del polı́gono obtenido.
Fekete demostró en [6] que la optimización del área es un problema NP-completo. La minimización
del perı́metro es también un problema NP-completo dada su relación con la versión geométrica del
Problema del Viajante, [7].
Presentamos a continuación la estrategia ACO para construir una solución aproximada a la poligonización
de perı́metro mı́nimo. Cada hormiga construye una solución, utilizando el método Steady Growth prop-
uesto en [1]. El algoritmo de construcción parte de un triángulo con vértices en los puntos de S y
sin otros puntos de S en su interior y, en cada paso, construye un polı́gono con un vértice más del
conjunto S. Para ello selecciona un punto factible p ∈ S, tal que ningún otro punto de S - {p} está
contenido en CH(Sk ∪ {p}), y tal que existe al menos una arista de Sk (la solución parcial) que sea
completamente visible desde p, agregándolo a la solución.
Algoritmo 3.3. ConstSolucionk

{
Sk ← ConstruirSoluciónInicial(S) /* Sk : Solución construida por la hormiga k */
S ← S - {p / p ∈ Sk }
AristasUsadas ← ∅ /* conjunto de aristas utilizadas en la construcción de la poligonización */
Mientras S 6= ∅
p ← SeleccionarProximoPunto(S)
AgregarPuntoSolucion(p, Sk )
S ← S - {p}
FinMientras
}

SubAlgoritmo SeleccionarProximoPunto(S)
{
PuntoNoFactible ← true
Mientras PuntoNoFactible
p ← SeleccionarPunto(S)
Si (el interior del CH(Sk ∪ {p}) es vacı́o de puntos pertenecientes a S) Y (AristasVisibles(p, Sk ) 6= ∅)
PuntoNoFactible ← false
FinSi
FinMientras
Retornar p
}

donde:
ConstruirSoluciónInicial(S): retorna el triángulo formado por tres puntos pi , pj , pk pertenecientes a
S elegidos en forma aleatoria, tal que dicho triángulo no contiene puntos interiores.
SeleccionarPunto(S): retorna un punto p ∈ S elegido aleatoriamente.
AristasVisibles(p, Sk ): retorna el conjunto de aristas de Sk completamente visibles desde p.
CH(Sk ∪ {p}): calcula el cierre convexo del conjunto de puntos formado por los puntos del polı́gono
Sk y el punto p.
AgregarPuntoSolucion(p, Sk ): selecciona una arista (pj , pk ) ∈ AristasVisibles(p, Sk ), para reem-
plazarla por las aristas (pj , p) y (p, pk ) pertenecientes a Sk , guardando la arista (pj , pk ) en AristasU-
sadas. La selección se realiza de acuerdo al modelo de probabilidad dado en la ecuación 1.

4 Experimentación

La evaluación de heurı́sticas aplicadas en la resolución de problemas geométricos necesita generar


aleatoriamente instancias de prueba, para contar con conjuntos de tamaño y complejidad variados.
Se implementó un generador de conjuntos de puntos, utilizando diferentes funciones de generación
aleatoria de la librerı́a CGAL. Dichos conjuntos varı́an en tamaño y distribución en el plano, como por
ejemplo puntos generados en un disco, en un cuadrado, en un cı́rculo, entre otros.
Se ha implementado el algoritmo ACO para los tres problemas, M W T , M W P T y M P P en
lenguaje C, encontrándose actualmente en etapa de desarrollo y evaluación de la experimentación. Se
están realizando pruebas con conjuntos de 40, 80, 120, 160 y 200 puntos, con 50 hormigas y 1000
iteraciones por ejecución. Los valores utilizados en los parámetros del algoritmo ACO son ρ: 0.1, 0.25
y 0.5; α: 1; y β: 1 y 5. Se realizan 30 ejecuciones para cada combinación de valores de parámetros, y
se obtiene la mediana y el promedio de los resultados obtenidos.

5 Conclusiones y trabajos futuros

En este artı́culo hemos presentado el diseño de algoritmos ACO para la obtención de soluciones apro-
ximadas a los siguientes problemas: triangulación de peso mı́nimo, pseudotriangulación de peso mı́nimo
y poligonización de perı́metro mı́nimo. La etapa experimental se realizará empleando casos de prueba
diversos, que permitan determinar cuáles de los parámetros de los algoritmos ACO son los más ade-
cuados para los problemas de optimización presentados.
Pretendemos continuar en la obtención de buenas aproximaciones a las estructuras geométricas
presentadas, considerando otras medidas de calidad tales como dilación, número de apuñalamiento,
área, etc., utilizando ACO y otras técnicas metaheurı́sticas.

Referencias
[1] T. Auer y M. Held, Heuristics for the generation of random polygons. Proc. 8th Canadian Con-
ference Computational Geometry, pp. 38-44, 1996.
[2] T. Bäck, D. Fogel y Z. Michalewicz, Handbook of Evolutionary Computation. IOP Publishing Ltd
and Oxford University Press, 1997.
[3] D. Corne, M. Dorigo y F. Glover, New Ideas in Optimization. McGraw-Hill, 1997
[4] M. Dorigo, V. Maniezzo y A. Colorni, The Ant System: An autocatalytic optimizing process.
Technical report 91-016 revised, Dipartimento di Elettronica, Politecnico di Milano, Milan, 1991.

[5] M. Dorigo y T. Stützle, Ant Colony Optimization. Massachusetts Institute of Technology, 2004.
[6] S. Fekete, On simple polygonizations with optimal area. Discrete and Computational Geometry,
23, pp. 73-110, 2000.
[7] M. Garey y D. Johnson, Computers and Intractability: a guide of theory of NP-completeness.
Freeman, 1979.
[8] J. Gudmundsson y C. Levcopoulos, Minimum weight pseudo-triangulations. Computational Geom-
etry, Theory and applications, 38, pp. 139-153, 2007.
[9] J. Kennedy y R. Eberhart, Swarm Intelligence. Morgan Kaufmann Publishers, 2001

[10] D. Krznaric, C. Levcopoulos, Quasi-greedy triangulations approximating the minimum weight tri-
angulation. Journal of Algorithms, 27 (2) pp. 303–338, 1998.
[11] Z. Michalewicz y D. Fogel, How to Solve It: Modern Heuristics. 2nd Edition, Springer, 2004.

[12] W. Mulzer y G. Rote, Minimum weight triangulation is NP-hard. Proceedings of the 22nd Annual
ACM Symp. on Computational Geometry. pp. 1-10, 2006.

[13] I. Osman y J. Kelly, MetaHeuristics: Theory & Application. Kluwer Academic Publishers, 1996.
[14] M. Pocchiola y G. Vegter, Pseudo-triangulations: theory and applications. Proceedings of the 12th
Annual ACM Symposium on Computational Geometry, pp. 291-300, 1996.
[15] G. Rote, F. Santos y I. Streinu, Pseudo-triangulations - a survey. Surveys on Discrete and Com-
putational Geometry-Twenty Years Later, Contemporary Mathematics, E. Goodman, J. Pach, R.
Pollack, eds. American Mathematical Society, 2008.

También podría gustarte