1. Собираем статистику одночастичных распределений.
2. Генерируем по ним конфигурации, с отбрасыванием.
3. Смотрим, какие теперь получились одночастичные распределения и как они отличаются от нужных.
4. Корректируем в противоположную сторону те распределения, по которым генерировали.
5. goto 2.
Чем плохо?
Тем, что:
6. В столбцах, где суммарная вероятность близка к 1, наш процесс задерёт плотность одночастичных распределений тоже близко к 1, отбрасывать придётся большинство, и процесс генерации чертовски замедлится.
Так?
Нет. Проблема более глубокая. Смотрите. Рассмотрим упрощенный вариант:
У нас есть 3 ладьи, но которые бьют только по столбцу, но не по строке.
У нас есть 2 столбца, на каждом из которых
совокупная вероятность нахождения одной из 3х ладей равна 1. Еще одна еденица вероятности распределена по оставшимся клеткам доски. Не важно, сколько мы подгоняем процесс генерации. В любом случае, у нас произойдет одно из следующих событий:
Либо вероятности нахождения ладей за пределами данных столбцов будут не нулевыми, и сможет произойти событие с ненулевой вероятностью, при котором все ладьи сгенерируются за пределами этих столбцов (хотя оба столбца должны быть заняты с вероятностью 1), либо все вероятности за пределами этих столбцов занулятся. Но тогда возникает вопрос - куда ставить третью ладью? Информация об оставшемся распределении просто потеряется.
Да, и кроме того, по мере задирания вероятности нахождения отдельных ладей в 1 по конкретным столбцам - распределение ладей по этим столбцам тоже потеряется - у каждой из них будет равная вероятность попасть туда.
Вообще,
столбцы - это просто одномерный случай. Лучше переформулировать задачу в одномерном виде: Просто есть 8 клеток и распределение по ним 3х ладей, которые просто не могут занимать одно место.-- 16.01.2013, 13:26 --Вы сами сказали, что вероятности получены экспериментально, поэтому реализуемы. Неужели практически можно наблюдать по 0.5 для двух ладей на одной клетке? Или это теоретическая боязнь?
Ну если каждый раз, когда мы открывали ящик, мы видели, что на данной клетке стоит либо зеленая, либо красная ладья - тогда их вероятности будут в сумме равны 1. Я опасаюсь не того, что алгоритм не будет работать на распределении, вероятность которого один к бесконечности, а того, что по мере приближения к этому распределению, алгоритм начнет все больше ошибаться.
Если бы этого не было - можно было бы не обращать внимание на крайние случаи.