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?