Имитация броска с предвзятым кубиком - PullRequest
0 голосов
/ 01 мая 2011

Я сделал поиск , но на самом деле не получил ни одного правильного хита.Может быть, я использовал неправильные термины?

Я хочу спросить об алгоритме , имитирующем предвзятую роль , а не о стандартном предположительно случайном броске.

Это не будет проблемой, если вы не сможете дать мне точные ответы (может быть, объяснение слишком длинное?), Но я был бы признателен за ссылки на материалы, которые я могу прочитать об этом.

Что у меня есть внапример, нужно сместить смещение в сторону области 5, 6, чтобы броски чисел имели более высокие шансы получить 5 или 6;Вот такую ​​проблему я пытаюсь решить.

[Обновить]

После дальнейших размышлений и изучения некоторых ответов я понял, чтоЯ хочу добиться того, чтобы оператор Выбор колеса рулетки действительно использовался в генетических алгоритмах, так как наличие большего сектора означает увеличение шансов попадания мяча туда.Правильно ли я согласен с этим мнением?

Ответы [ 5 ]

6 голосов
/ 01 мая 2011

В общем, если ваши вероятности: {p1, p2, ..., p6}, создайте следующий список помощников:

{a1, a2, ... a5} = { p1, p1+p2, p1+p2+p3, p1+p2+p3+p4, p1+p2+p3+p4+p5}  

Теперь получите случайное число X в [0,1]

Если

        X <= a1  choose 1 as outcome  
   a1 < X <= a2  choose 2 as outcome 
   a2 < X <= a3  choose 3 as outcome  
   a3 < X <= a4  choose 4 as outcome  
   a4 < X <= a5  choose 5 as outcome  
   a5 < X        choose 6 as outcome 

Или более эффективный псевдокод

   if     X > a5 then N=6
   elseif X > a4 then N=5
   elseif X > a3 then N=4
   elseif X > a2 then N=3
   elseif X > a1 then N=2
   else               N=1

Редактировать

Это эквивалентно выбору колеса рулетки , которое вы упомянули в своем обновлении вопроса, как показано на рисунке:

enter image description here

2 голосов
/ 01 мая 2011

Создайте двумерный массив возможных значений и их весов. Суммируйте все веса. Произвольно выберите значение в диапазоне от 0 до суммы весов. Теперь перебираем массив, сохраняя накопитель весов, которые мы видели до сих пор. Как только это значение превысит ваше случайное число, выберите значение кубика, представленного здесь.

Надеюсь, это поможет

1 голос
/ 01 мая 2011

Допустим, матрица смещена в сторону 3.

Вместо того, чтобы выбирать случайную запись из массива 1..6 из 6 записей, выберите случайную запись из массива 1..6, 3,3. (8 записей).

1 голос
/ 01 мая 2011

Один из способов, который обычно довольно прост - начать со случайного числа в расширенном диапазоне и разбить его на неравные части.

Например, при идеально ровном (шестигранном) кубе каждое число должно выходить в 1/6 го времени. Предположим, вы выбрали круглые проценты - все остальные числа должны появляться в 16% случаев, а 2 - в 17%.

Вы можете сделать это, генерируя числа от 1 до 100. Если число от 1 до 16, оно получается как 1. Если оно от 17 до 34, оно получается как 2. Если это от 34 до 50, это получается как 3 (а остальные блоки по 16 штук).

1 голос
/ 01 мая 2011

Хм.Скажем, вы хотите иметь 1/2 шанс получить шесть, и 1/10 шанс получить любое другое лицо.Чтобы смоделировать это, вы можете сгенерировать случайное целое число n в [1, 2, ... , 10], и результат будет отображаться в шесть, если n в [6, 7, 8, 9, 10], и в n в противном случае.

...