Значение
(вероятность нулевого вектора) входит только в первое ограничение нормировки, поэтому его нужно задать самым последним так, чтобы превратить его в равенство. Аналогично, значения
(одна единица на
-й позиции) участвует только в одном из заданных ограничений, поэтому оно также должно задаваться последним исходя из условия соответствующего равенства.
Поэтому можно попробовать сделать так: перебирать в произвольном порядке остальные значения, задавая их достаточно произвольно так, чтобы выполнялись все требуемые ограничения в виде неравенств. А в конце задать указанные значения так, чтобы неравенства превратились в равенства. Правда, это все равно не всегда гарантирует успех процедуры. Можно попробовать расписать все более аккуратно так, чтобы учитывать условия и сверху, и снизу, и всегда гарантировать существование хотя бы одного такого распределения.
-- Чт мар 22, 2012 08:09:56 --Впрочем, есть идея проще и нагляднее. Фактически Вы задали все маргинальные распределения компонент вектора. Если потребовать, чтобы они были независимы, то тем самым мы задаем одно совместное распределение. Другие распределения будут получаться, если от условия независимости отказаться.
Похоже, что строить распределение легче и нагляднее всего последовательно увеличивая
. Допустим, Вы задали каким-то образом вероятности для
, то есть все числа
. Перейти к
- это означает разбить каждое такое число в сумму двух
и
. При этом все существующие условия не нарушаются, и нужно только следить за тем, которое соответствует новой компоненте. Это всегда можно сделать, потребовав независимости этой компоненты от предыдущих. При этом вероятности будут задаваться по формулам:
Этот набор можно взять в качестве "базового", а новые генерировать, прибавляя к этим значениям
поправки. При этом вектор поправок должен иметь нулевую сумму компонент, а также каждая компонента имеет ограничение сверху и снизу. Придумать разумный способ генерирования такого вектора поправок совсем несложно.