|
Коэффициенты для вероятных событий
| ☑ |
0
Адимр
20.06.15
✎
00:47
|
К примеру есть
События: 1, 2, 3
События хранятся в таблице значений в колонке событие.
От генератора случайных чисел получаем случайное число от 1 до количества строк в таблице. Вероятность наступления всех событий одинакова, если хотим что бы событие 1 наступало чаще добавляем в таблицу новую строку с событием 1 генератором случайных чисел получаем число от 1 до 4 (количество строк в таблице)
Как можно избавится от дублирования строк и увеличивать вероятность наступления события с помощью коэффициента? Допустим добавим колонку количество событий и в ней укажем что событие 1 коэффициент 2. Не идет мысль как привязать генерируемое случайное число к коэффициенту.
|
|
1
Zhuravlik
20.06.15
✎
00:51
|
как-нибудь кешировать... а зачем это надо??.
|
|
2
romix
20.06.15
✎
03:14
|
(0) Завести прямоугольный массив, часть клеток запрещены, в соответствии с желаемым графиком распределения вероятности. Если попало на запрещенную ячейку, то сделать еще одну попытку случайного выбора ячейки.
|
|
3
romix
20.06.15
✎
03:16
|
(1) Генерят чеки, наверное. Или тараканьи бега автоматизируют. :-)
|
|
4
victor79
20.06.15
✎
03:46
|
пусть будет список, размерностью равный количеству событий. В каждом значении хранится числовое значение соответствующее вероятности события, точнее вероятность события будет СуммаСобытия/ИтогВсехСуммСобытий.
ВыборСобытия = Рандом(ИтогВсехСуммСобытий);
// ВыборСобытия должен быть меньше чем Итог
// на 1 если целые числа, или просто меньше если дробные
Для н_событие = 1 по сп.РазмерСписка() Цикл
СуммаЭтогоСобытия = сп.ПолучитьЗначение(н_событие);
ВыборСобытия = ВыборСобытия - СуммаЭтогоСобытия;
Если ВыборСобытия < 0 Тогда
Возврат н_событие;
КонецЕсли;
КонецЦикла;
т.е. хранить не обязательно именно вероятности, а достаточно сумму доли. Если будут храниться именно вероятности, то алгоритм изменится в том, что Рандом будет от единицы.
Где-то давно видел упоминание, что это называлось кажется выбором по рулетке.
|
|
5
Escander
20.06.15
✎
03:49
|
(0) ну пусть твой генератор генерит некое число [0;1], для равномерного распределения млукдет отнести результат генерации [0;0,3333) как 1, [0,3333;0,67) как 2, [0,67; 1] как 3
если нужно увеличить вероятность получения результата 1 - следует расширить диаппазон [0;0,3333) до требуемого за счёт других диаппазонов
|
|
6
victor79
20.06.15
✎
03:52
|
(4) Если же нужно представление, как будто бы добавляем по одной строке, то эти единицы просто суммируем, т.е. то что и желалось в (0)
|
|