|   |   | 
| 
 | Алгоритм управляемого рандома | ☑ | ||
|---|---|---|---|---|
| 0
    
        1Сергей 29.04.19✎ 10:08 | 
        Допустим, есть функция, которая генерирует случайное число, эмулируя бросание игральной кости
 
Как можно повлиять на "удачливость" результата? Скажем, при удачливости=50 необходимо чтобы вероятность выпадения всех чисел была одинаковой. При удачливости=0, выпадение единицы было 100%, остальных 0%. Ну, и при удачливости=100, то же самое для шестёрки. Жду вариантов | |||
| 1
    
        Garykom гуру 29.04.19✎ 10:11 | 
        ГенераторСлучайныхЧисел = Новый ГенераторСлучайныхЧисел(Ф(Удачливость));     | |||
| 2
    
        RomanYS 29.04.19✎ 10:12 | 
        (0) Задаешь интервалы для каждого значения, потом проверяешь на попадание в интервал     | |||
| 3
    
        Генератор 29.04.19✎ 10:12 | 
        если колво вариантов не очень большое, используй массив вариантов. Удачливые варианты добавляй в массив несколько раз, а потом выбирай из массива уже по обычному равномерному распределению     | |||
| 4
    
        Garykom гуру 29.04.19✎ 10:12 | 
        Дарю.
 Функцию Ф сам напишешь. | |||
| 5
    
        Garykom гуру 29.04.19✎ 10:12 | 
        (4) к (1)     | |||
| 6
    
        Garykom гуру 29.04.19✎ 10:14 | 
        Интересно последовательности от одного начального числа на разных компах и платформах 1С разные?     | |||
| 7
    
        1Сергей 29.04.19✎ 10:15 | 
        (6) давай проверим     | |||
| 8
    
        Garykom гуру 29.04.19✎ 10:15 | 
        ГенераторСлучайныхЧисел (RandomNumberGenerator)
 Конструктор по умолчанию Синтаксис: Новый ГенераторСлучайныхЧисел(<НачальноеЧисло>) Параметры: <НачальноеЧисло> (необязательный) Тип: Число. Начальное число, которым инициализируется генератор случайных чисел. Описание: Генератор случайных чисел инициализируется начальным числом из параметра. Последовательность случайных чисел для одного и того же начального числа будет одинакова. | |||
| 9
    
        1Сергей 29.04.19✎ 10:23 | 
        (2) (3) ОК
 и как задавать эти интервалы, массивы? | |||
| 10
    
        Генератор 29.04.19✎ 10:29 | 
        >> При удачливости=0, выпадение единицы было 100%, остальных 0%.
 Почему именно единицы? Противоположная сторона? | |||
| 11
    
        1Сергей 29.04.19✎ 10:30 | 
        (10) ну, типа удача ноль - больше единицы не выпадет
 Удача сто - только шестёрки выпадают | |||
| 12
    
        Mort 29.04.19✎ 10:40 | 
        Результат = 6 - 5 * ГСЧ() * (1-Удача)     | |||
| 13
    
        Mort 29.04.19✎ 10:42 | 
        Не, децл не так.     | |||
| 14
    
        ЛЮС 29.04.19✎ 10:43 | 
        (11) а при 1 - что должно выпасть?
 В целом подход такой: расширяешь диапазон генерации и начинаешь играться шириной интервалов: генеришь число 0-60, разбиваешь на диапазоны: 0-10 - единица и т.д. Это стандартное. 0-60 - единица - это удача = 0. А уж как разбивать будешь - твое дело. | |||
| 15
    
        1Сергей 29.04.19✎ 10:46 | 
        (14) я понимаю, что в (0) не достаточно данных. Какая там кривая должна получиться - не понятно. Поэтому интересны все варианты     | |||
| 16
    
        ЛЮС 29.04.19✎ 10:57 | 
        (15) Если развить тему из (12) то можно получить такую бредятину:
 Рез = ГСЧ()*У*(100-У)/2500 + 1*(100-У)*(50-У)/5000 + 6*У*(50-У)/(-5000) Первое слагаемое - для 50, второе для 0, третье - для 100. Остальные варианты лень считать, возможно даже не укладывается в диапазон 1-6. Но этого в исходной постановке и не было. А вообще тут не кривая распределения, а двумерная поверхность. | |||
| 17
    
        Mort 29.04.19✎ 10:57 | 
        1 + 5 * (Удача) + (2.5 * (1 - ABS(2 * Удача - 1))) * ГСЧ(-1,1)     | |||
| 18
    
        Mort 29.04.19✎ 10:58 | 
        Нечто подобное делал недавно когда генерировал плавынй переход из одного шума Перлина в другой.     | |||
| 19
    
        1Сергей 29.04.19✎ 10:58 | 
        Получается, надо придумать функцию к таким данным:
 http://pics.rsh.ru/img/temp_8yw39ynq.png | |||
| 20
    
        exwill 29.04.19✎ 11:00 | 
        (0) Лучший способ влиять на удачливость в костях - это использовать сравнительно малоизвестный и контринтуитивный математический факт отсутствия транзитивности для вероятностей.     | |||
| 21
    
        Кодер 29.04.19✎ 11:00 | 
        Распиши, что должно получаться для двойки.     | |||
| 22
    
        Mort 29.04.19✎ 11:00 | 
        +(17) 
 При Удача = 0, результат : 1 Удача = 1, результат : 6 Удача = 0.5, результат: 3.5 + 2.5 * ГСЧ(1, 1) Промежуточные значения линейных образом, хотя это не указано в задаче. | |||
| 23
    
        Кирпич 29.04.19✎ 11:08 | 
        (19) А в чем проблеме то?
 Функция Кость6(Удачливость=50) Если Удачливость = 0 Тогда Возврат 1 КонецЕсли; Если Удачливость = 100 Тогда Возврат 6 КонецЕсли; ГенераторСлучайныхЧисел = Новый ГенераторСлучайныхЧисел(); Возврат ГенераторСлучайныхЧисел.СлучайноеЧисло(1, 6); КонецФункции | |||
| 24
    
        Mort 29.04.19✎ 11:10 | 
        (23) Удачливость может быть и 30%.     | |||
| 25
    
        Кирпич 29.04.19✎ 11:10 | 
        (24) в таблице нет про 30     | |||
| 26
    
        Nikoss 29.04.19✎ 11:16 | 
        (0) не честное онлайн казино на 1С пилишь чтоли?))     | |||
| 27
    
        Mort 29.04.19✎ 11:17 | 
        (17) Тоже неверно. По идее 60% удачливости должны давать чаще выпадение 6 чем 5, 5 чем 4 и т.д, а не больше шанса для 4 как стоящей на 60%.     | |||
| 28
    
        Вафель 29.04.19✎ 11:20 | 
        возьми отрезок поболее и нарежь его не ровно. например 1 - 10 = 1, 10-80 = 2, 80-90 = 3 ... | |||
| 29
    
        RomanYS 29.04.19✎ 11:28 | 
        (9) Вид коллекции непринципиален: массивы, структуры или ТЗ.
 Не понятна суть проблемы (0) математика? - это одно, нужны какие-то критерии; техника реализации - интервалы и цикл проверки, здесь вроде проблем не видно. | |||
| 30
    
        1Сергей 29.04.19✎ 11:31 | 
        (29) с учетом (15), просто интересно посмотреть на предложенные варианты. При которых удачливость более-менее равномерно размазывалась на шансы выпадения той или иной цифры     | |||
| 31
    
        ЛЮС 29.04.19✎ 11:36 | 
        Нда, математика страшная штука. Вон Mort сам с собой дискуссию ведет.     | |||
| 32
    
        RomanYS 29.04.19✎ 11:36 | 
        (30) Понятно. Всё-таки математика и никаких критериев)) 
 Предложу свой критерий: матожидание результата должно равномерно изменяться от удачливости: при 0% - матожидание 1 при 50% - 3.5 при 100% - 6 | |||
| 33
    
        1Сергей 29.04.19✎ 11:36 | 
        (31) он хоть что-то предложил     | |||
| 34
    
        Nikoss 29.04.19✎ 11:40 | 
        (0) при удачливости 10% может выпасть 6ка?     | |||
| 35
    
        1Сергей 29.04.19✎ 11:44 | 
        (34) не важно. Если можешь предложить вариант с ответом да или нет на этот вопрос, буду рад     | |||
| 36
    
        Deon 29.04.19✎ 13:30 | 
        (35) Я бы для понимабельности удачливость считал от -100 до +100.
 Если удачливость 0, то вероятность выпадения 6 = 1/6 = 16.6% Если удачливось +100, то вероятность выпадения 6 = 100% Соответственно, между 0 и +100 вероятность выпадения 6-ки линейна. Так при +10 вероятность уже 25%. На остальные 5 цифр остается 75%. При выпадении этих 75%, они делятся по такому же принципу, как и с 6кой, но как-будто у нас кубик 5-сторонний И уже при небольшой удаче +10 у меня получается округленное распределение вероятности такое: 1-10%, 2-12%, 3-15%, 4-18%, 5-21%, 6-25% | |||
| 37
    
        Вафель 29.04.19✎ 13:38 | 
        (34) конечно может     | |||
| 38
    
        Nikoss 29.04.19✎ 13:39 | 
        (37) в скольки случаях из 1 000 000?     | |||
| 39
    
        ЛЮС 29.04.19✎ 13:47 | 
        (36) Зависимость не может быть линейной. На одном конце диапазона она 1, на другом 0, посередине 1/6. Эти три точки никак не дают линейную зависимость, в лучшем случае - комбинацию двух линейных с переломом
 . | |||
| 40
    
        Deon 29.04.19✎ 13:50 | 
        (39) Я потому и предлагаю удачу считать от -100 до +100, где в переломной точке 0 вероятность любого числа 1/6
 Если удача отрицательна, то зависимость линейно тянет к выпадению единицы. Если положительна, то тянет к шестерке | |||
| 41
    
        Mort 29.04.19✎ 14:02 | 
        Допустим удача у нас определяет линейную функцию вероятности y = kx. 
 Где (x) - это данные генератора случайных числе (0...1) "у" это значение функции, который мы потом приведем к результатам костей следующим образом: y < 16.7 это 1 y < 2*16.7 это 2 и т.д. т.е. НомерГрани = Макс(y * 6, 6) и (k) - коэффициент (наклон прямой) зависимый от удачи. В случае удачи = 0.5 график выглядит y = х, т.е. k = 1. В случае удачи = 0 график выглядит горизонтально как y = 0, В случае удачи = 1 график вертикальный, y = бесконечность. Отсюда k = удача/(1-удача) Получаем: РезультатНомерГрани = Макс(6, удача/(1-удача) * 6 * ГСЧ(0,1)) | |||
| 42
    
        Mort 29.04.19✎ 14:03 | 
        *НомерГрани = МИН(y * 6, 6) Минимум конечно     | |||
| 43
    
        Mort 29.04.19✎ 14:04 | 
        Вариант с удачей = 1 надо отдельно обработать, чтобы не попасть на деление на 0.     | |||
| 44
    
        Mort 29.04.19✎ 14:10 | 
        А блин, низкий уровень удачи вообще сделает невозможным выпадение 6, чего не должно быть. Линейной функцией не обойтись. Надо результат ГСЧ в степень возводить.     | |||
| 45
    
        garantNo4x 29.04.19✎ 14:13 | 
        статистики сейчас наверное в гробах заворочались     | |||
| 46
    
        Mort 29.04.19✎ 14:14 | 
        Или даже так :
 Результат = ?(ГСЧ()<Удача, 1,0) + ?(ГСЧ()<Удача, 1,0) + ?(ГСЧ()<Удача, 1,0) + ?(ГСЧ()<Удача, 1,0) + ?(ГСЧ()<Удача, 1,0) + ?(ГСЧ()<Удача, 1,0) Этот вариант мне нравится больше. | |||
| 47
    
        Йохохо 29.04.19✎ 14:15 | 
        (44) отсеки по три сигма)     | |||
| 48
    
        RomanYS 29.04.19✎ 14:16 | 
        (46) Невезучий получит 0. Такого даже самый бракованный кубик себе не позволяет))     | |||
| 49
    
        Mort 29.04.19✎ 14:18 | 
        (48) 
 1 + ?(ГСЧ()<Удача, 1,0) + ?(ГСЧ()<Удача, 1,0) + ?(ГСЧ()<Удача, 1,0) + ?(ГСЧ()<Удача, 1,0) + ?(ГСЧ()<Удача, 1,0) Впрочем тут ГСЧ должен работать 0 - 0.9999999. Можно отдельно проработать граничные варианты. | |||
| 50
    
        ejikbeznojek 29.04.19✎ 14:30 | 
        если удача = 0 тогда 
 возврат 1; если удача=100 возврат 6 иначе окр(ГенераторСлучайныхЧисел.СлучайноеЧисло(1, 6)*(удача/50),0) конец | |||
| 51
    
        garantNo4x 29.04.19✎ 14:33 | 
        не понятно что такое удачливость 50 (точнее это и не требует понимания, так как это бред записанный в цифре.) Т.е. вместо привычных вероятностей появления неких чисел должны появляться те же числа но не равные загаданному. Т.е. допустим человек загадал  1 но ему не везет)) для этого надо или кубиков больше или знать что он загадал.     | |||
| 52
    
        Nikoss 29.04.19✎ 14:38 | 
        (49)
 Выпало Колво раз 1 3 064 2 15 527 3 31 307 4 31 118 5 15 827 6 3 157 из 100к проходов, при 50% удачи | |||
| 53
    
        Mort 29.04.19✎ 14:41 | 
        (52) практически нормальное распределение( Подозревал что так может быть. Надо ещё думать.     | |||
| 54
    
        PuhUfa 29.04.19✎ 14:42 | 
        >>Скажем, при удачливости=50 необходимо чтобы вероятность выпадения всех чисел была одинаковой
 Кто и как проверяет это? "вероятность выпадения" <> "фактическому выпадению" | |||
| 55
    
        Nikoss 29.04.19✎ 14:45 | 
        (54) я проверю, давай свою формулу)     | |||
| 56
    
        Вафель 29.04.19✎ 14:52 | 
        (54) запускаешь тыщу, нет 10 тыщ раз и смотришь     | |||
| 57
    
        Deon 29.04.19✎ 15:46 | 
        (55) 
 Функция Число6(Параметр_Удача, ГСЧ) Распределить = 1000000; Выпало = ГСЧ.СлучайноеЧисло(1, Распределить); Удача = (Параметр_Удача*2-100)/100; // от -1 до 1 рУдача = ?(Удача < 0, -Удача, Удача); Распределено = 0; Для н = -6 по -1 Цикл Куб = -н; БазоваяДоля = (Распределить-Распределено) / Куб; ПределУдачиКуба = Распределено + БазоваяДоля + рУдача*((Распределить-Распределено)-БазоваяДоля); Если Выпало <= ПределУдачиКуба Тогда Если Удача < 0 Тогда Возврат 7-Куб; Иначе Возврат Куб; КонецЕсли; КонецЕсли; Распределено = ПределУдачиКуба; КонецЦикла; КонецФункции | |||
| 58
    
        Ванпанчмен 29.04.19✎ 19:29 | 
        (0) Предлагаю такой вариант:
 x = Рандомное число от 0 до 1, не целое. y = удача, от 0 до 1, не целое Результат = Округлить(x ^ (1 / y - 1)) * 5 + 1); целое число от 1 до 6. Округляем меньше 0.5 в меньшую сторону, больше 0.5 в большую сторону. | |||
| 59
    
        Franchiser 29.04.19✎ 19:36 | 
        Почитай про парадокс монти холла.
 Можно применить для удачливости | |||
| 60
    
        Franchiser 29.04.19✎ 19:37 | 
        просто дважды генерируй число с изменением решения     | |||
| 61
    
        Ванпанчмен 29.04.19✎ 23:02 | 
        +(58) более интуитивный способ решения, без математических формул, чисто на алгоритме:
 Рассмотрим удачу не как число от 1 до 100, а как положительное/отрицательное число. Например удача 0 - ничего не добавляет, то есть выпадение любого значения равновероятно. А удача +5 дает выше шанс выиграть. Удача -5 наоборот уменьшает шанс выиграть. Тогда алгоритм такой: Кидаем кость столько раз + 1, какое абсолютное значение удачи, и выбираем самое удачное/неудачное значение. Например, если удача +1, то кидаем 2 раза и выбираем лучший бросок. А если удача -2, то кидаем 3 раза и выбираем худший вариант. Если удача 0, то кидаем 1 раз. | |||
| 62
    
        RomanYS 29.04.19✎ 23:25 | 
        (61) Идея хороша, логична. Но от равномерности там очень далеко, на экспоненту похоже(зависимость среднего результата от твоей "удачи")
 1 3,504 2 4,515 3 4,937 4 5,254 5 5,431 6 5,487 7 5,622 8 5,681 9 5,773 10 5,797 11 5,846 12 5,875 13 5,904 14 5,919 15 5,921 16 5,95 17 5,944 18 5,96 19 5,976 20 5,972 | |||
| 63
    
        RomanYS 29.04.19✎ 23:27 | 
        +(62) среднее считалось на тысяче повторов. Левая колонка - число бросков из которых делаем выбор.     | |||
| 64
    
        Ванпанчмен 30.04.19✎ 00:15 | 
        (62) Да, она не равномерна. Потому что 100% удача в данном случае равна "+бесконечность" к удаче.
 100% удача должна быть не достижима, ИМХО, если это не "режим Бога". | |||
| 65
    
        seevkik 30.04.19✎ 03:50 | 
        Вообще, все зависит от того, какой результат мы хотим видеть - удача число от 0 до 100 или от -100 до 100?
 Что дает удача 100 -сто побед из ста или как? | |||
| 66
    
        seevkik 30.04.19✎ 03:51 | 
        (65) упс, не прочитал тему полностью)     | |||
| 67
    
        Сияющий в темноте 20.05.19✎ 18:52 | 
        Предположим вероятность выпадения 1 у вас V(1) и т.д. до 6.
 получаем интервалы 0..v(1) это 1 v(1)..v(1)+v(2) это 2 ... v(1)+...+v(5)..v(1)+...+v(6) это 6 генерим число в интервале 0..v(1)+...+v(6) и получаем то,что нужно. | |||
| 68
    
        RomanYS 20.05.19✎ 19:14 | 
        (67) судя по (30) ТС ждал предложений как раз по расчету этих v(i)     | |||
| 69
    
        garantNo4x 20.05.19✎ 19:40 | 
        Вероятность это просто число для некой функции P() заданной на неком множестве исходов принимающее значение от 0 до 1. 
 Вы требуете что бы вероятность была сколь угодно мала на неком множестве и все же принимала значения которые бы делали ее похожими на вероятность. Так вот похожими на вероятность она похожа если для всех событий равна 1. Ну понимаете ? Далее вы добиваетесь того, что бы сама вероятность была или близка к равной для каждой грани или же наоборот. Ну допустим вы начали конструировать такую функцию - для нее требования то понятные. Пространство то исходов кто определит по-человечески ? Потому что далее вообще то ничего сложного. | |||
| 70
    
        Йохохо 20.05.19✎ 19:43 | 
        (69) пятница?     | |||
| 71
    
        garantNo4x 20.05.19✎ 19:47 | 
        (70) типа того. Только не я ее начал.     | |||
| 72
    
        Тарзанчик Бостон 20.05.19✎ 20:01 | 
        Таки чем не подошел вариант (58), предложенный неким Ванпанчменом? Сразу видно, что человек разбирается в вопросах.     | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |