Так. Я подумал ночью над решением
Попросту генерируем случайные шестёрки чисел, отбраковываем те, в которых хоть кто-то кого-то бьёт, ну а уж потом разыгрываем распределение цветов по тем трём точкам.
и, в общем, к сожалению, я просто вчера тормозил. Это решение не удовлетворительное по той же причине, по которой неудовлетворительна последовательная генерация - частота отбраковки различных вариантов неравномерна. Просто в данном случае это учитывается сразу для 3х ладей.
Объясню проблему. Вот если у нас на одной линии (в рамках данного примера для упрощения представим, что ладьи бьют только по горизонтали, и их две) находятся клетки, совокупная вероятность нахождения в которых красной ладьи равна .3, и совокупная вероятность нахождения зеленой ладьи равна .3. С учетом отбракованых вариантов, вероятность нахождения ладей на этой линии изменится до .21 и .21 соответственно. То есть, будут отбракованы варианты, при которых ладьи одновременно выпадают на этой линии. Если же на другой линии совокупные вероятности нахождения красной и зеленой ладей равны .1 и .1 соответственно, то после отбраковки эти вероятности будут равны .09 и .09. Поскольку 0.21/0.09 не равно 0.3/0.1, мы видим, что вероятности меняются неравномерно. То есть, генерируются результаты с другим распределением.
Практический вариант:
Сперва генерировать случайную перестановку цветов ладей. И размещать не красную, затем жёлтую, затем зелёную, а в соответствии с выпавшим порядком.
В этом случае просто итоговое распределение для красной, например, ладьи, будет усредненным распределением между тремя распределениями 1) "истинное распределение красной ладьи", 2) "распределение красной ладьи, прореженное одной ладьей", 3) "распределение красной ладьи, прореженное двумя ладьями". То есть, это тоже не будет точным.
-- 16.01.2013, 12:09 --На первые 100 генераций не обращайте внимания, считайте их разогревом двигателя перед стартом.
Да, я склонялся к чему-то такому. Вычесть случайное колличество из каждого элемента перед началом генерации. Я подумаю еще над этим вариантом, сейчас пытаюсь с другой стороны зайти. Впрочем, тут есть те же проблемы, что в других вариантах:
Предположим, что у нас есть клетка, на которой красная и зеленая ладья находятся с вероятностью .5, а желтая - 0, при этом на остальных клетках строки и столбца все вероятности равны нулю. Понятно, что в данном случае на этом месте обязана стоять либо красная ладья, либо зеленая - иначе совокупная вероятность нахождения здесь будет меньше 1. Но пока ни при одном из методов генерации (включая этот) данная проблема не решена. То есть, чем ближе на каком то столбце/строке совокупная вероятность нахождения всех ладей к 1, тем больше отклоняются распределения.
Этот момент мне кажется самой серьезной из имеющихся проблем.