Имя: Пароль:
1C
 
Коэффициенты для вероятных событий
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)
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn