![]() |
|
Коэффициенты для вероятных событий | ☑ | ||
---|---|---|---|---|
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)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |