Este es un problema de programación lineal [1]. El origen está en el casco convexo de un conjunto de puntos [math] \ mathbf {x} _i \ in \ mathbb {R} ^ n [/ math] si y solo si para todas las funciones afines [math] \ alpha: \ mathbb {R} ^ n \ to \ mathbb {R} [/ math] tal que [math] \ alpha (\ mathbf {x} _i) \ geq 0 [/ math], también tenemos [math] \ alpha (\ mathbf {0}) \ geq 0 [/ math].
Dicho de otra manera, podemos intentar minimizar [math] \ alpha (\ mathbf {0}) [/ math] sujeto a las restricciones [math] \ alpha (\ mathbf {x} _i) \ geq 0 [/ math]. Si el resultado es positivo, entonces el origen está en el casco convexo. Si es negativo, el origen no está en el casco convexo.
Para evitar un problema ilimitado, es útil agregar una condición de normalización en [math] \ alpha [/ math]. Podemos elegir un punto [math] \ mathbf {y} [/ math] que sabemos que está en el casco convexo (por ejemplo, el centro de masa de los puntos [math] \ mathbf {x} _i [/ math]) , y también exigen que [math] \ alpha (\ mathbf {y}) = 1 [/ math].
- Cómo comenzar a aprender cómo crear algoritmos de comercio Quant en Java
- Cómo preparar estructuras de datos y algoritmos desde cero
- ¿Qué tan sofisticados son los algoritmos involucrados en el control de crucero en los automóviles?
- En Codeforces Round # 308 (Div. 2), ¿cómo descubrieron todos la cantidad de dígitos de un número usando un algoritmo eficiente de toma de tiempo? ¿Alguien puede explicarlo?
- ¿Cuáles son las diferencias entre las estructuras de datos y los algoritmos?
Para poner esto en términos más convencionales, deje que [math] \ alpha (\ mathbf {x}) = \ mathbf {a} ^ T \ mathbf {x} + b [/ math]. Podemos escribir esto como una función lineal extendiendo todos los puntos para tener una coordenada adicional igual a 1. Denotaré los vectores correspondientes en [math] \ mathbb {R} ^ {n + 1} [/ math] por capital letras, [math] \ mathbf {X} = (\ mathbf {x}, 1) [/ math], y llama al vector correspondiente al origen [math] \ mathbf {O} = (\ mathbf {0}, 1 )[/mates]. Entonces [math] \ alpha [/ math] se convierte en [math] \ mathbf {A} ^ T \ mathbf {X} [/ math], donde [math] \ mathbf {A} = (\ mathbf {a}, b) [/mates].
Nuestro problema es: minimizar [math] \ mathbf {A} ^ T \ mathbf {O} [/ math], sujeto a:
[math] \ mathbf {A} ^ T \ mathbf {X} _i \ geq 0 [/ math]
[math] \ mathbf {A} ^ T \ mathbf {Y} = 1 [/ math]
Esto se puede lanzar fácilmente a una de las muchas bibliotecas de programación lineal disponibles. Como beneficio adicional, la rutina de programación lineal también le dará una faceta del casco convexo: simplemente compruebe y vea en qué [math] \ mathbf {X} _i [/ math] desaparece la funcionalidad óptima. Estos abarcan una faceta. La faceta que obtenga depende de la elección del punto de normalización [math] \ mathbf {Y} [/ math]. Puede calcular la distancia a ella utilizando la fórmula habitual [2].
[1] http://en.wikipedia.org/wiki/Lin…
[2] La generalización obvia a [matemáticas] n [/ matemáticas] -dimensiones de la fórmula aquí: http://en.wikipedia.org/wiki/Pla…