Команда разработчиков TAIGA.Labs стремительными темпами развивается и ставит перед собой новые задачи повышенной сложности в мире технологий блокчейна TON.
Одной из задач стал расчёт вероятностей событий при подбрасывании монеты. Вроде бы задача элементарная: «орёл» и «решка» с вероятностью выпадения 50%, но ведь существует вероятность падения монеты на ребро, а значит и вероятность событий «орёл» и «решка» должны быть менее 50%.
В реальном мире на бросок монеты влияет множество параметров:
-
размеры монеты;
-
симметричность и однородность монеты, и как следствие расположение центра тяжести;
-
начальная высота подбрасывания;
-
направление и сила броска;
-
скорость вращения и направление вращения;
-
гладкость и упругость поверхности, на которую падает монета.
Первым делом мы уточнили формулировку стоящей перед нами задачи:
Монета, у которой диаметр в X раз больше толщины, подбрасывается вертикально вверх с вращением в одной плоскости (чередование горизонтального положения сторон «орёл»/«решка»), а затем падает на ровную поверхность (без подскоков, скорость падения и скорость вращения обнуляются при касании поверхности, после чего спокойно опускается на одну из двух сторон или на ребро в зависимости от своего положения при касании с поверхностью). Необходимо определить вероятность падения монеты на ребро.
В результате расчётов получили формулу:
P(“ребро”) = 10 * arctan(1/X) / 9
В соответствии с данной формулой у 10-рублевой монеты (диаметр которой больше толщины в 10 раз) в идеальных условиях нашей задачи шанс падения на ребро составит примерно 6,345%.
Также были найдены наиболее удачные соотношения диаметра монетки к её толщине для достижения целевых показателей выигрыша дилера в диапазоне 51% – 60%:
X | Шанс ребра, % | Шанс орла/решки, % | Шанс выигрыша дилера, % |
---|---|---|---|
31,8 | 2 | 49 | 51 |
15,89 | 4 | 48 | 52 |
10,57 | 6 | 47 | 53 |
7,91 | 8 | 46 | 54 |
6,31 | 10 | 45 | 55 |
5,24 | 12 | 44 | 56 |
4,47 | 14 | 43 | 57 |
3,89 | 16 | 42 | 58 |
3,44 | 18 | 41 | 59 |
3,08 | 20 | 40 | 60 |
Наличие теоретических расчётов позволило команде TAIGA.Labs перейти к написанию для казино смарт-контракта азартной игры «Монетка» с коэффициентом X=6.31, но с небольшим изменением относительно теории по просьбе заказчика: в случае падения монетки на ребро ставка возвращается игроку.
В сетях блокчейна за использование их вычислительных ресурсов, которые необходимы для выполнения операции или смарт-контракта, взимается комиссия (gas). Для уменьшения этой комиссии сложную формулу с арктангеном заменили на афинную прямолинейную формулу:
P(“ребро”) = 63 / (100 * X)
Перед передачей заказчику мы протестировали смарт-контракт на 1000000 событий, получив расчётные показатели вероятности победы/поражения игрока в 45% при вероятности ничьей 10%:
В будущее вместе с командой TAIGA.Labs