Вы должны иметь компромисс между случайностью и ограничением максимального расстояния между исходными стимулами.Максимальное расстояние получается, когда вы размещаете стимулы в 4 идентичных рядах из 48 стимулов (неслучайное представление).Расстояние фиксировано на 48 для каждого исходного стимула в этом случае.
Если вы распределяете 192 пары полностью случайным образом, среднее расстояние между исходными стимулами в среднем составляет 38,6, с минимальным и максимально возможным расстояниями 1 и 144 соответственно:
t = Flatten[Table[i, {4}, {i, 48}]];
{Mean[#], StandardDeviation[#]} &@
Table[
rs = RandomSample[t, 192];
Mean[Mean[Differences[Flatten[Position[rs, #]]]] & /@ Range[48]] //
N, {10000}
]
(* ==> {38.60370417, 1.397151004} *)
Вы можете сделатьэто по-другому.Сначала разделите 48 стимулов на 2 блока по 24 (1-24 [блок I] и 25-48 [блок II]).Затем генерируют случайные перестановки (p) I и II: p (I) p (II) p (I) p (II) p (I) p (II) p (I) p (II).
Среднее расстояние теперь становится:
{Mean[#], StandardDeviation[#]} &@
Table[
rs =
Join[RandomSample[Range[24]], RandomSample[Range[25, 48]],
RandomSample[Range[24]], RandomSample[Range[25, 48]],
RandomSample[Range[24]], RandomSample[Range[25, 48]],
RandomSample[Range[24]], RandomSample[Range[25, 48]]
];
Mean[Mean[Differences[Flatten[Position[rs, #]]]] & /@ Range[48]] //N, {10000}]
(* ==> {48., 0.} *)
Таким образом, у нас теперь гораздо более случайное представление, в то время как среднее расстояние все еще равно 48 (минимальное расстояние теперь равно 24, а максимальное расстояние равно 47).Обратите внимание на стандартное отклонение 0. В качестве упражнения я оставлю доказательство того, почему это должно быть так для вас.
Обновление 1
Здесь я разбил стимулы на две группы: 1-24 и 25-48.Я предлагаю вам использовать новое случайное начальное расположение для каждого предмета, прежде чем вы начнете разбиваться на две группы.Это добавит немного дополнительной балансировки по предметам.
Обновление 2
А теперь, код для генерации комбинации со стимулом-условием:
Во-первых, рандомизируйте условие по всем стимулам:
m = MapThread[
List,
{
Table[Range[48], {4}],
Table[RandomSample[{1, 2, 3, 4}], {48}]\[Transpose]
}, 2
]
Затем разбейте их на группы по 24, перемешайте их и сгруппируйте в один список:
Flatten[RandomSample /@ Partition[Flatten[m, 1], 24], 1]
Чтобы рандомизировать порядок для каждогопредмет (как я предложил выше в обновлении 1) необходимо внести небольшие изменения в первую часть:
initialArrangement = RandomSample[Range[48]];
m =
MapThread[
List,
{
Table[initialArrangement, {4}],
Table[RandomSample[{1, 2, 3, 4}], {48}]\[Transpose]
}, 2
]
Обратите внимание, что было бы неправильно вставлять первую строку (RandomSample[Range[48]]
) внутри Table
!
Для Mr.Wizard здесь версия нотации инфикса, показывающая, что я действительно пытаюсь; -)
m~Set~MapThread[List, (Range[48]~Table~{4}~
List~((RandomSample[{1, 2, 3, 4}]~Table~ {48})\[Transpose])), 2]
и вторая часть:
(RandomSample /@ m~Flatten~1~Partition~24)~Flatten~1
Вариант первой части, как указано выше:
initialArrangement~Set~RandomSample[Range[48]];
m~Set~MapThread[List, (initialArrangement~Table~{4}~
List~((RandomSample[{1, 2, 3, 4}]~Table~ {48})\[Transpose])), 2]
Кстати, забудьте о скобках во второй части, и результат, хотя и выглядит похожим, будет совершенно неверным.