Generando vectores aleatorios con restricciones


10

Necesito crear vectores aleatorios de números reales a_i que satisfagan las siguientes restricciones:

abs(a_i) < c_i;      
sum(a_i)< A;        # sum of elements smaller than A
sum(b_i * a_i) < B; # weighted sum is smaller than B 
aT*A*a < D          # quadratic multiplication with A smaller than D

where c_i, b_i, A, B, D are constants.

¿Cuál sería el algoritmo típico para generar eficientemente este tipo de vector?


1
¿Qué quiere decir con la cuarta restricción, "La magnitud de a es ..."
M. Tibbits

Mi error. Descripción terminada. Gracias por la respuesta.
LouisChiffre

¿Cómo es que a_isigue la distribución p_iy también es menos eso c? ¿Eso es porque la distribución p_itambién es menor c? ¿En qué distribución estás pensando?
deps_stats

@deps_stats. Muy buenos puntos. El pseudocódigo no era muy claro. La distribución que tengo en mente es la distribución de Poisson. Cada elemento sigue una distribución de Poisson con una lambda diferente. Con eso en mente, supongo que la primera condición (a_i <c) no es necesaria, ya que puedo reescalar a_i al final de la generación para satisfacerla.
LouisChiffre

Déjeme preguntarle algo más ... son los c, A, By lambdas fijos?
deps_stats

Respuestas:


4

Si te entiendo correctamente, solo los puntos en un pequeño volumen de espacio n-dimensional cumplen tus limitaciones.

Su primera restricción lo limita al interior de una hiperesfera, lo que me recuerda las preguntas frecuentes de comp.graphics.algorithms "Puntos aleatorios uniformes en la esfera" y ¿Cómo generar puntos distribuidos uniformemente en la bola de la unidad tridimensional? La segunda restricción se separa un poco de la hiperesfera, y las otras restricciones reducen aún más el volumen que cumple con sus restricciones.

Creo que lo más sencillo es uno de los enfoques sugeridos por las preguntas frecuentes:

  • elija un cuadro delimitador arbitrario alineado con el eje que estamos seguros contiene todo el volumen. En este caso, -c <a_1 <c, -c <a_2 <c, ... -c <a_n <c contiene todo el volumen restringido, ya que contiene la hiperesfera descrita por la primera restricción, y las otras restricciones siguen disminuyendo. lejos en ese volumen.
  • El algoritmo selecciona puntos de manera uniforme en todo ese cuadro delimitador. En este caso, el algoritmo establece independientemente cada coordenada de un vector candidato en algún número aleatorio independiente distribuido uniformemente de -c a + c. (Supongo que quiere puntos distribuidos con igual densidad en todo este volumen. Supongo que podría hacer que el algoritmo seleccione algunas o todas las coordenadas con una distribución de Poisson u otra distribución no uniforme, si tuviera alguna razón para hacerlo).
  • Una vez que tenga un vector candidato, verifique cada restricción. Si falla alguno de ellos, regrese y elija otro punto.
  • Una vez que tenga un vector candidato, guárdelo en algún lugar para su uso posterior.
  • Si no tiene suficientes vectores almacenados, regrese e intente generar otro.

Con un generador de números aleatorios de calidad suficientemente alta, esto le proporciona un conjunto de coordenadas almacenadas que cumplen sus criterios con una densidad uniforme (esperada).

Por desgracia, si tiene una dimensionalidad relativamente alta n (es decir, si construye cada vector a partir de una lista relativamente larga de coordenadas), la esfera inscrita (mucho menos su volumen reducido) tiene una parte sorprendentemente pequeña del volumen total de el cuadro delimitador total, por lo que es posible que deba ejecutar muchas iteraciones, la mayoría de ellas generando puntos rechazados fuera de su área restringida, antes de encontrar un punto dentro de su área restringida. Dado que las computadoras en estos días son bastante rápidas, ¿será lo suficientemente rápido?


Entonces, lo que estás sugiriendo es efectivamente probar el espacio. Tengo un problema similar, excepto que encontrar un cuadro delimitador no se puede hacer estáticamente (es decir, no se puede codificar). Por experiencia, esto se rompe si sus limitaciones son de la forma ¿ f1(x1) + f2(x2) == CAlguna sugerencia aquí?
Groostav

Sí, el método de muestreo no funciona si tiene restricciones de igualdad ("=="). Restricciones tales como puntos que están en la superficie de una esfera, o en la superficie de un cilindro, etc. (radio == R), en lugar de dentro de la esfera (radio <= R). La selección uniforme de puntos sobre todo el volumen "nunca" (probabilidad cercana a 0) alcanzará la superficie deseada. Entonces, de alguna manera, solo debe elegir los puntos que están en esa superficie, es decir, para encontrar puntos [x1, x2, x3] de modo que f1 (x1) + f2 (x2) == C, pueda elegir aleatoriamente x1 y luego forzar x2 = inversa_f2 (C - f1 (x1)).
David Cary

Para el caso especial de puntos distribuidos uniformemente en la superficie de una esfera, consulte "Puntos aleatorios uniformes en la esfera" .
David Cary

@Groostav: ¿Quizás su pregunta es lo suficientemente diferente de la pregunta original como para publicarla como una nueva pregunta de nivel superior? "Me acaban de decir que tengo que publicar una pregunta de seguimiento, ¿por qué y cómo?"
David Cary
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.