Как написать генератор случайных чисел на 1С? #120425


#0 by Груздь
Если получить последовательность случайных чисел в диапазоне от n до m любым из известных генераторов, то среднее арифметическое чисел этой последовательности будет стремиться к (m-n+1)/2, при количестве членов последовательности стремящемся к бесконечности. Нужно написать генератор, для которого это среднее арифметическое можно было бы задавать. Вывихнул мозги, а алгоритм придумать не могу. Помогите, пожалуйста ...
#1 by ДенисЧ
Открывается учебник матстатистики, читается про матожидание...
#2 by Asmody
поиск по "генератор случайных чисел" зело много ссылок дает...
#3 by SnarkHunter
А при чем тут 1С...
#4 by Танюха
#5 by ДенисЧ
потом понимается что всё равно получатся ПСЕВДОслучайные числа...
#6 by снипер
тот что от avb нормально генерит
#7 by wuxep
отсчет начинать беря что-нибудь типа времени. Перескакивать с интервалами в зависимости от времени. Почти случайные получатся :)
#8 by Лис в курятнике
#9 by povar
Купи аппаратный генератор
#10 by снипер
у avd алгоритм тот же... но числа получаються шустрее
#11 by снипер
+10 это для Лиса
#12 by vvv29
ТОлько зачем в 1с генератор случайных чисел?, чтобы сумму случайно в отчеты писать? или зачем?
#13 by Груздь
Для настоящих одинэсников поясню на пиримере: Предположим n=1, m=3 и чисел нужно 10 штук ... Генерим последовательность: 2,1,2,3,1,1,3,2,3,1 Складываем все её члены и делим на их количество (получаем среднее арифметическое) ... = 1,9 ~ 2 Понятно, что, чем длиннее последовательность, тем ближе это среднее будет к двойке. А мне нужен алгоритм, который генерил бы последовательности такие, чтоб это среднее было бы задаваемым пользователем. Ну, предположим, для примера выше, я бы задал это среднее равным 2.8 ... Разумеется, троек в ней должно быть больше, чем двоек ..., а единичек ещё меньше ... ... Понятно теперь?
#14 by Конечно
Так бы сразу и сказал Только ответь -зачем в 1с генератор случайных чисел?,
#15 by Волшебник
#16 by снипер
это уже не генератор случайных чисел...
#17 by dk
Делал нечто подобное :) но на Дельфи -------- Идея: 1) Выбираешь функцию распределения в пределах ограничений 1С :( 2) Делишь на участки (скажем штук на 100). Можно в зависимости от нужного кол-ва случ. чисел 3) Для каждого участка считаешь интеграл (ИнтУчастка), подразумевая, что интеграл функции распределения на нужном участке равен 100% (ИнтОбщ) и высчитываешь % этого интеграла от 100 % Проц = ИнтУчастка / ИнтОбщ 4) Получаешь количество чисел на данном участке как КоличествоНаУчастке = ОбщееКоличество * Проц 5) Получаешь случайные числа в количестве КоличествоНаУчастке в интервале участка (функцией равномерного распределения (см. 4)) Так по всем участкам ------- Нужно учитывать, что если на участок приходится меньше одного случайного числа, то нужно складывать соседние участки, пока не получишь значение больше одного --------------- Хм, получилось сумбурно, но надеюсь суть ясна -------------------- Основные проблемы (в рамках 1С): - Вычисление интеграла (функцию распределения нужно брать попроще) - Вычисление случ. чисел по равномерному з-ну распределения
#18 by pupkin
Взять текущее время и расколбасить его как нить. Каки там интугралы.
#19 by dk
(pupkin) Внимательно читаем
#20 by Груздь
Спасибо ... Но я примерно так же и начал делать, только слишком уж громоздко и заумно плучается, неговоря уже о тормозах ... Наверняка есть более красивые решения ...
#21 by dk
17+ Потом нужно полученные числа перемешать :)
#22 by Груздь
А если последовательность постоянно дополняться должна, с соблюдением всех условий её формирования, то алгоритм получается сложней втрое ...
#23 by raykom
Пешу: генератор случайных чисел :)
#24 by Груздь
Сергей Дроботенко?
#25 by raykom
Не отвлекайтесь. Я тока обстановку разрядит. Уже меня нет.
#26 by Zoltan
#27 by Груздь
Прикольно ... Уже в начальных классах на уроках информатики детей приучают к платформе 1С ...
#28 by Груздь
ап Может какой-нить NS придёт сюда завтра ...
#29 by NS
у AVB нормальный генератор, но он со временем начинает тормозить (число начинает увеличиваться) Вообще проще всего где-нибудь скачать таблицу случайных чисел. Тебе нужно задать среднее, и чтоб он на него выходил? Диапазан при этом задается? Сейчас соображу.
#30 by Груздь
Да, диапазон задаётся жёстко ..., а количество чисел в последовательности может увеличиваться в любой момент ...
#31 by NS
Стремится к (n+m)/2 ;-)) Устроит генератор в котором вероятность всех чисел одинакова, кроме одного из крайних - m, либо n ?
#32 by Груздь
Так я и сам смогу ... Но, увы, не пойдет ...
#33 by NS
А как пойдет?
#34 by NS
Более равномерно?
#35 by Груздь
В принципе я уже сделал, кое-как ... Втупую разбил весь диапазон на сотню маленьких, оценил вероятности выпадения чисел в каждом, генерю для каждого диапазона количество чисел кратное этой вероятности, затем из полученой кучи случайно выбираю одно ... Изврат, но на большее меня не хватило ...
#36 by NS
Я на выходных подумаю. Сейчас не могу - нервы шалят. С женой в очередной раз из-за её б..дства посрался. Вообще можно сделать линейную зависимость вероятности от числа(вероятность выпадения к:а+в(к-n)), где а и в - коэффициенты. Числа целые?
#37 by Груздь
Бабы - зло! ... Числа целые ... Я тоже в выходные ещё подумаю ..., интересно ..., хоть какая-то зарядка для ума ...
#38 by Guk
С годами это должно пройти. Жди...
#39 by NS
К пятидесяти? ;-))
#40 by Guk
Всегда надо искать консенсус...
#41 by NS
Подумал... Сдуру вывел форумулу для линейной зависимости вероятности выпадения числа от самого числа. И понял, что это не надо. Понятно, что смысл в том, чтобы скрыть, что вероятность неодинакова. 1 вариант - сделать максимум отклонения вероятности выпадения числа от равномерного (1/(m-n+1)) минимальным. 2 вариант сделать разность максимальной и минимальной вероятности минимальной. ....... Для этого, допустим, если необходимое среднее больше, чем (m+n)/2 - Нужно сделать вероятность для к, меньших требуемого среднего - одинаковым, и меньшим 1/(m-n+1)) А для больших - то-же одинаковым, но большим... Через часик накидаю программку.
#43 by Лошадка в пальто
а чо NS курит? или очередные шахматы пишет?
#44 by NS
Не понял... Я ответил на вопрос в ноль. Написал генератор случайных чисел (целых, в заданном интервале) с средним значением, задаваемым в процедуре инициализации. Где ВерСр=1/КоличествоЭлементов КоличествоЭлементов=(максЗначение-минЗначение+1) Плюс попутно подправил генератор СЧ написанный avb
#45 by Лошадка в пальто
Сережа, мне совершенно непонятно что написано в ... про молчу в тряпочку...
#46 by NS
Зато отлично знает, что он попросил. И в - точно верное решение.
#47 by Лошадка в пальто
Завтра сделаю копи-пасте и проверю всё ...
#48 by Груздь
Очень похоже на правду ... Спасибо ОГРОМНОЕ!!!
#49 by NS
Только я не написал контроли. 3) МинЗначение<МаксЗначение 4) Вероятность может выйти за ноль (отрицательная) нет контроля на то, что срЗначение входит в допустимый диапазон.
#50 by Груздь
Это ничего ... Генератор будет использовать продвинутый программист и ему это не понадобится ...
#51 by Груздь
А я в воскресенье попыжился часок ..., нифига толкового не вышло ... и я, как обычно, отложил задачку до лучших времён ... :((
#52 by NS
на срЗначение лучше поставить ограничение |срЗначение - ((максЗначение+минЗначение) / 2)| <= (КоличествоЭлементов / 10);
#53 by NS
Плюс - из-за особенностей работы цел в 1С - (минЗначение+максЗначение)/2 должно быть >=0,либо должно быть целым (в случае, если меньше нуля)
Тэги: Математика и алгоритмы
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С