Якщо я вас правильно зрозумів, лише точки в невеликому обсязі n-мірного простору відповідають вашим обмеженням.
Ваше перше обмеження обмежує його внутрішність гіперсфери, що нагадує мені comp.graphics.algorithms FAQ "Уніфіковані випадкові точки на сфері" та Як генерувати рівномірно розподілені точки в 3-денному кулі одиниці?
Друге обмеження зрізається трохи від гіперсфери, а інші обмеження ще більше зменшують обсяг, який відповідає вашим обмеженням.
Я думаю, що найпростіше зробити один із підходів, запропонованих FAQ:
- вибрати деяку довільну обмежувальну рамку, вирівняну за вісь яке, напевне, містить весь обсяг. У цьому випадку -c <a_1 <c, -c <a_2 <c, ... -c <a_n <c містить весь обмежений об'єм, оскільки він містить гіперсферу, описану першим обмеженням, а інші обмеження не збиваються. від цього обсягу.
- Алгоритм рівномірно набирає точки по всьому цьому обмежувальному вікні. У цьому випадку алгоритм незалежно встановлює кожну координату вектора-кандидата на якесь незалежне рівномірно розподілене випадкове число від -c до + c. (Я припускаю, що ви хочете, щоб точки, розподілені з однаковою щільністю по всьому цьому обсягу. Я вважаю, що ви могли б змусити алгоритм вибрати деякі або всі координати за допомогою розподілу Пуассона чи іншого нерівномірного розподілу, якщо у вас були якісь причини для цього).
- Отримавши вектор кандидата, перевірте кожне обмеження. Якщо це не вдалося жодному з них, поверніться та виберіть іншу точку.
- Коли у вас є кандидат-вектор, зберігайте його десь для подальшого використання.
- Якщо у вас недостатньо збережених векторів, поверніться назад і спробуйте створити ще один.
З достатньо якісним генератором випадкових чисел це дає набір збережених координат, які відповідають вашим критеріям з (очікуваною) рівномірною щільністю.
На жаль, якщо у вас порівняно велика розмірність n (тобто, якщо ви побудуєте кожен вектор із відносно довгого списку координат), вписана сфера (набагато менший ваш збитий вниз обсяг) має напрочуд невелику частину загального обсягу повне обмежувальне поле, тому може знадобитися виконати багато ітерацій, більшість з яких генерує відхилені точки за межами обмеженої області, перш ніж знайти точку у вашій обмеженій області. Оскільки комп'ютери сьогодні досить швидкі, чи буде це досить швидко?