¿Cómo podemos verificar si un punto (digamos el origen) se encuentra en un casco convexo 6-D (o ND) y qué tan lejos está el punto de cualquiera de los lados (facetas) del casco convexo?

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].

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…

Este es un problema fácil. El casco convexo está hecho de facetas A, los puntos st en el casco convexo satisfacen A ^ t X> 0 (o <0 - más común - usted elige). Para probar un punto, debe tomar todos los productos de puntos y verificar que todos sean positivos. No necesita hacer optimización para eso.

El valor del producto escalar es la distancia a lo largo de la dirección. Si los hiperplanos están normalizados a la longitud de la unidad, esa es solo la distancia. Por lo tanto, lo obtendrá fácilmente como un subproducto de las multiplicaciones anteriores.

Si está probando el origen, estos productos de puntos toman una forma bastante trivial.

More Interesting

Cómo resolver un problema usando C ++

Juez en línea de Esfera (SPOJ): ¿Por qué el siguiente código da como resultado TLE? Quiero saber cómo se puede optimizar mi código para evitarlo.

¿Qué idioma es mejor para comprender la importancia de las estructuras de datos?

Dado un número N y un flujo continuo de enteros de entrada, ¿podría encontrar dos números en el flujo cuya suma fuera el primer número N?

¿Cuáles son los 5 mejores algoritmos con los que debería estar familiarizado para tener éxito en una entrevista de desarrollador junior?

¿Por qué necesito el complemento de un gráfico?

¿Qué es una matriz en Java? ¿Y cuál es un ejemplo de su uso?

¿Qué debo usar para reducir los atributos en mi conjunto de datos, PCA o algoritmos de selección de características?

Dado un gráfico de N vértices con m1 bordes unidireccionales y m2 bordes bidireccionales, ¿cómo podemos dirigir los bordes bidireccionales de modo que no tengamos ninguna caminata cerrada?

Cómo comenzar a aprender y explorar el campo de los Algoritmos de Big Data

Para los bucles, ¿cuál será más eficiente si se ha eliminado la optimización del compilador?

¿Cuáles son los errores en el libro Data Structures and Algorithms Made Easy by Narsimha Karumanchi?

¿Cuáles son algunos de los diferentes casos que debería considerar usar matrices bidimensionales sobre matrices unidimensionales en Java?

¿Qué algoritmo se usa para comprimir todos los tipos de archivos (es decir, archivos de imagen, texto, audio, video)?

¿Cuál es su estructura de datos favorita y por qué?