Перепрыгнеть в содержание


Bambuk

Регистрация 07 Oct 2012
ONLINE Активность Вчера, 23:42
*****

Темы которые я начал(а)

ПРОБЛЕМА БАМБУКОВЫХ КОЛЕЦ

19 July 2017 - 12:43

Решил обсудить возможность применения одной методики расчёта и самого подхода к проблеме (нетривиального), которую далее
озвучу. Меня собственно интересует—согласуется ли всё что далее изложу с реальными экспериментальными данными.
Возможно это заинтересует игроков кто играет на двух-исходки—допустим теннис, баскетбол ну и типа такого
где есть тока вин и луз (хотя методику---сам подход можно «перелопатить» и на иные варианты –где есть ничья итд итп..)
и может они поэкспериментируют с данными и озвучат тут рез на форуме что было бы весьма интересно…
Имеется в виду --на сколько близко или далеко от реальности всё...

Поводом подумать о методике послужило вот что—почитал в нете некоторые рассуждения на похожую тему, счёл их бредом сумасшедших….некоторые несут такую ахинею и откровенную херню что я уже начал беспокоиться за деградацию нации.


Теперь собственно суть.

Вот представим что я играю с господином президентом в некую игру играю 100 раз допустим
Выигрываю 56 раз (ну или какое-то число) возьмём оценку 0.56 а у противника соответственно 0.44

Теперь играет с президентом В.В. его корефан Медведев…. Играет с Р=0.27 (у президента соответственно 0.72)
Так вот президент—он как бы ЭТАЛОН чтоб нас сравнить с Медведевым.

Вот аналитическую формулу тут в явном и привычном виде мы наверно не выпишем—
Нас интересует вероятность—каковы мои шансы на ВИН в матче Бамбук—Медведев?

В начале я хочу послушать мнение форума. Потом продолжу (если интересно разумеется данная тематика)
Похожие проблемы иногда возникают по ходу того как игроки начинают задумываться—как оптимальнее сравнить игроков.
Самое традиционное что приходит на ум в первую очередь—иметь некую «гирю-эталон» и через неё взвешивать, эталон обычно создают через общих соперников или принимают кучи как бы равными (даже если соперники в кучах не одни и те же, но вот как бы считают что близкие эталоны и можно условно в ряде случаев принять Эталон1=Эталон2= Эталон—через него и «вешать».

Будем пока считать задачку формализованной на уровне имения вероятностей и всё. Ясно дело что вин. 3-1 не эквивалентен вину
1-0 (но нам пока это не надо, ибо можно рассуждать и так---найденная Р не хуже если иные показатели не хуже , то есть нет противоречивых аргументов полагать что Р меньше вычисленной по нашей формализации... если мы выбор сделали на данную Р)

Забегая немного вперёд дам свой ответ по той методике что хочу обсудить (подумайте--какой вы дадите ответ на данную задачу)
Моя Р вина = 0.79

Да ещё наверно надо пояснить вот что--допустим кучи (эталоны) настолько разные что их нельзя сопоставить (ну допустим взять РФПЛ лигу и там команду и допустим
АПЛ и там команду ...ну пусть они примерно в средней части и по ВНП у них там похоже...понятно что эталоны тут вообще далеки и вот в этом случае можно имея связь между эталонами провести промежуточные вычисления (не через треугольник а через квадрат найдя диагональ (диагонали) а потом по этому промежуточному вектору данных--выйти на то что мы ищем).

Погоня за литрами

07 December 2016 - 11:36

Лёд тронулся, лёд тронулся.....как и мозг у некоторых игроков в погоне за прогнозированием тоталов. Вот если поставить вопрос ребром--
если спрогнозировал ТБ2.5 правильно--получаешь 2.5 литра водки если нет--отдаёшь...то дела вероятно пошли бы лучше...деньги по нынешним временам--вода...а водка она и в Африке водка (херово что наверно тёплая)!!!!

Решил создать тему чтоб всё такие ещё раз пройтись по вершкам и корешкам вопроса о прогнозировании тотала и собственно даже не о прогнозировании как таковом(ибо хуле там прогнозировать когда БК уже всё спрогнозировало по сути-то с некими погрешностями конечно...но тем не менее на дистанции кефа неплохо соотносятся с частотой захода событий если снести маржу немного)....
Поводом послужило вот что--походил по разным сайтам посмотрел что там предлагают на этот счёт так и ни чего достойного не нашёл.

Хочу послушать мнение форума на сей счёт...
А пока решил предложить возможный экспериментальный вариант возможной реализации идеи "что-то там спрогнозировать"

Перед тем как попробую залить картинку дам некоторые пояснения чтоб понятнее было что из чего возникает.
Во-первых встаёт вопрос о достоверности исходных данных--ясно что по 5-6 матчам очень проблемно говорить насколько случаен или закономерен результат в целом и в конкретном матче в частности. Другой момент--понятно что в доме и в гостях команды играют не совсем одинаково ко всему прочему могут накладываться всякие обстоятельства связанные с погодой и возможным участием команд в каких-то более значимых для них матчах в ближайшее время ну и так далее. Конечно учесть все параметры проблематично, поэтому можно начать с каких-то определённых характеристик игры а потом по мере разруливания существа вопроса и понимании что там и как (плохо или нормально) пробовать добавлять что-то дополнительное.
Обычно в примитивном подходе используют показатели или по тоталам или по забитым-пропущенным мячам (какие-то средние берут потом там мудазвонскими примитивными формулами что-то вычисляют)...
Я думаю можно пойти частично путём учёта забитых и пропущенных мячей но несколько в иной плоскости---дело в том что если допустим взять даже 20 игр команды то показатели средние за игру как забитые и пропущенные они не очень информативны, а точнее менее информативны чем скажем распределения по голам. Теперь как можно взять и применить распределения----можно ограничиться например 4 мячами максимум и тогда при большем счёте допустим 5-1 или 6-2 переносить мячи из 5 и 6 в позицию 4
тогда допустим для забитых так со счетом забито 0-1 игра забили 1мяч--5 игр 2м--10 игр 3м- 3игры и 5м-1 игра
тогда распределение будет в виде вектора (1/20 5/20 10/20 3/20 1/20) 5-ть перенесли в 4
Группу из набора команд назовём эталоном L эталон тоже забил (это пропущенные мячи команды) и имеет распределение RL1
соответственно распределение для забитых команды будем обозначать R1L (от 1 к эталону)
При таком подходе мы имеем для 2-ух команд 4-распределения.
Теперь можно ра..с-с-с-с-у....ждать так допустим брать для дом.ком распределения для игр дома а для гостевой в гостях...но тут мы режем объём в 2 раза и понижаем достоверность информации (для распределений такое не есть хорошо...так можно было бы поступить при оперировании скажем средними показателями--типа МО за матч по всем играм)....

Долее можно потребовать ещё одной тонкости---мы будем всегда ставить на первое место более сильную команду силу которой можно в принципе определять по разному но я могу предложить такой вариант---берём показатели по ВНП потом делим всю эту бодягу на (В+Н+П)
получаем размерность вероятности и нам в целом по барабану становится количество игр (так как лиги имеют разную размерность и чтоб не потерять общности можно так поступить) можно по аналогии и по очкам делать (но тоже отнести к общему числу игр тогда)..
обозначим наши псевдо вероятности Рв Рн Рп теперь команда сильнее если Рв1^2-Рп1^2>Рв2^2-Рп2^2
далее чтоб разрулить кто дома а кто в гостях можно ввести некий код Д/Г так как далее будем использовать нейросеть то можно так например 0,4 считать что подаём при команде дома а 0,3 что в гостях (тогда если это смотреть в клетках одна под другой то в клетках будет 0,4 0,3 --это когда сильная в доме или 0,3 0,4--это сильная в гостях (но она по позициям распределений всегда на первом месте)

Прикрепленный файл  Как спрогнозировать тотал.jpg   200.86K   24 Количество загрузок

На картинке вместо значка суммирования стоит знак вопроса (прога просто сама так сука инвертирует сумму)

ТРИГГЕР_ТЕННИС_ЗАМРИ_УМРИ_ВОСКРЕСНИ

17 September 2016 - 13:42

Почитав опусы в интернете на тему прогнозов и моделей по теннису решил целесообразным иметь мнение супротив оных опусов.
Сразу хочу дать пояснение--на теннис я не ставил, не ставлю и ставить не собираюсь...в теннисе ни ХУ не понимаю...но я буду говорить языком цифр..надеюсь не напрасно.

Причиной и поводом открыть данную тему явилось мнение,--- что народ находится в полном непонимании того о чём воЩе речь, куда и что намазывать и откуда слизывать..... все высказывания практически ни чем не подкрепляются за редким исключением и то эти исключения ни коим образом не могут повлиять на составляющие части кошелька....
Думаю что тема будет интересна не только попанам(вроде меня), но и видавшим виды и в анфас и в профиль.....

Начнём-с с основного (постулата) ---все выкладки и выражения и прочее будут относиться к одной из ветвей развития событий.
Что бы соединить две ветви триггера нам потребуется применять одну и туже концепцию-формулу и так для любых событий (и ставок).

На чём основан постулат? дело в том что при моделировании событий теннисного матча и сравнивая эти данные с реальными показателями я пришёл к выводу что матч нельзя представить таким образом как его преподносят многие публикации (в основном буржуйские на тему моделирования)..в чём собственно подвох...разберёмся на простом конкретном примере....
Примем себе на вооружение модель следующего толка---пусть геймы и сеты уже прошедшие не влияют на ход дальнейших событий...
(так конечно можно принять с натягом, но иного мы пока не имеем и такая модель в виду того что ХЗ как там что на чё влияет вполне будет уместна для старта). Таким образом наша модель будет--цепью Маркова.

Для некоторых вероятностей есть аналитические выражения но я их не буду приводить ибо они очень громозские и тока в основном на гейм---дело в том что например для 5-ти сетового матча нам придётся расписывать ХЗ скока вариантов окончания каждого сета и сочетать с другими..... и нах это надо---намного проще пойти колхозным путём и генерить 10000-20000 матчей а потом тупо считать частоты (ну они будут немного плавать около среднего но для оценок может вполне покатить...)....Будем считать что расчёт у нас есть.

Для расчёта по такой модели (ну тут уже были темы на форуме на эту тему поэтому можно там подсмотреть что-то) нам надо Р взять очко со своей подачи для игрока 1 и Р взять очко для игр2.

Теперь пока предположим что мы располагаем набором этих Р (вероятностей).

Начнём-с с функции листа ехсель определяющей вин матча и распределение и тотал.(напоминаю---это для одной ветви триггера)

теперь ОСНОВА ОСНОВ ТРИГГЕРНОЙ КОНЦЕПЦИИ.

матч может срельнуть в два состояния---вин или лоз вероятность реализации того или иного состояния мы априорно можем оценить
ну тупо вот так в данных по прецедентам 0.6(60%) вин 0.4 (40%) лоз так вот у каждого такого состояния будут свои средние по Р-взять очко для игрока 1 и для игрока 2 (пока на этом не будем заострять внимание---в смысле --как определить...это отдельный базар-вокзал)..
Так вот ВСЁ (подчёркиваю все --и тоталы и моталы и вины и хуи..) всё считаем по одной хрени

Ртригер_вин*Рсобытия ветвь вин+(1-Ртригер_вин)*Рсобытия ветвь лоз.

Пока ни ХУ не понятно но далее поясню на конкретных примерах.


=Tns(A9;B9;C9;D9;tb;mark1;0;J9;E9;F9;G9;H9)
A9-вероятность игрока1 выиграть гейм со своей подачи (нужны для расч. Сета)
B9-вер. Иг.2 выиграть гейм при своей подаче
C9-вероятность для игр.1 взять очко со своей подачи (по ней можно рассчитать Р в яч A9)
D9-вероятность для игр.2 взять очко со своей подачи (по ней можно рассчитать Р в яч В9)
tb- маркер тай-брейка (1—с тай-бр. 0-без тай-бр.)
mark1-маркер подачи в сете (1-ПОДАЧА 1-ГО ИГР. 0-ПОДАЧА ВТОРОГО)
0-маркер генератора жеребьёвки 1-ой подачи (не используется…генератор не встроен в функцию)
J9-число сетов (3 или 5 можно указать и непосредственно в функции как числа)
E9-текущий счёт по сетам для игр.1( это счёт матча типа 1-1 2-1-уже вин и так не может для 3-ёх сетового, например )
F9-тек. счёт по сетам для игр.2
G9-текущий счёт в сете по геймам для игрока.1 (типа 5-4)
H9 тек. счёт в сете для игр.2
mtb,mark1 вводим в какие-то яч excel и указываем адреса в функции
=FGeim(C9;0;0)—функция нахождения вероятности выигрыша гейма при своей подаче
C9-вероятность взять очко со своей подачи (с первой подачи). Можно вводить значение Р непосредственно в функию =FGeim(0,68;0;0)
0-счёт игр 1
0-счёт игр.2 (так понятнее =FGeim(C9;s1;s2) например FGeim(C9;0;0) вставляем в яч A9 для передачи потом в функцию Tns)
В ячейку B9 соответственно вставим FGeim(D9;0;0).
Теперь этих инструментов достаточно для нахождения вероятности вин. матча (или сета) с любой точки счёта по счёту в матче, сета и гейма. Вопрос—как? Чтоб понять надо посмотреть и разобраться в работе
=FGeim. Мы передаём вероятность для игрока 1 которому соответствует счёт гейма s1 (причём счёт условно 1,2,3…по числу выигрышей итд, а не как принято в теннисе 15-0 30-….итд)

Тогда для игрока 2 для вычисления вероятности вин. гейм со своей подачи (кроме счёта 0-0 …то есть счёт не открыт) есть два варианта найти Р2вин.гейм
1.Вставить вероятность Р2 взять очко с подачи и поменять счёт в функции местами FGeim(Р2;s2;s1)


2.Вставить в функцию FGeim вместо вероятности Р2 вер. 1-Р2 (это вероятность для первого игрока взять гейм при подаче второго игрока). Полученное значение вычесть из 1

Формула так будет выглядеть Р2вин.гейм =1- FGeim(1-Р2;s1;s2)

Теперь надо понять алгоритм позволяющий найти вероятность при любом счёте в игре.
Для этого воспользуемся куском(звеном) цепи Маркова. Предположим у нас идёт какой-то
Гейм и там счёт s1:s2 в матче по сетам m1- m2 а в сете st1-st2
Тогда одна функция=Tns(A9;B9;C9;D9;1;1;0;J9;m1;m2;st1;st2) нам не даёт ответа на наш вопрос.

Пусть счёт гейма s1:s2 сета a:b при подаче игрока 1 (или 2) имеем расчётную вероятность выиграть
гейм Pwin_i пусть для определённости будем всегда искать вероятность для игр.1 (ибо для второго она
1- Pwin_1 для всех раскладов). Тогда возможны переходы в счёт a+1:b или в a:b+1 при этом
в a+1:b игрок 1 переходит при своей подаче с Pwin_1= FGeim(P1;s1;s2) в a:b+1 с вероятностью 1-Pwin_1.

Рассматривая такое звено Марковской цепи приходим к выражению для вероятности P1 win math

8]P1 win math =Pwin1* Tns(…….a+1:b ) + (1- Pwin1)* Tns(…….a +1:b )

8]Где для Tns выставляем mark1=в соответствии с игроком начавшим подавать в сете

8](1—для игрока 1 и 0--- для игр2) Если имеем распределения то складываем их сообразно данной формулы.

8]Если подаёт игрок 2 то для игрока 1(для которого и будем считать) Pwin_1= FGeim(1-P2;s1;s2) где P2 –вер. взять очко со своей подачи для игр.2



Function Gen(ByVal P As Double, Optional VolatileOn As Boolean = True) As Variant
Application.Volatile VolatileOn

Dim Pg, t As Double
Pg = P
t = Rnd()
t = Rnd()
If t <= Pg Then
Gen = 1
Else
Gen = 0
End If
End Function

Function Tns(ByRef rp1st As Range, ByRef rp2st As Range, ByRef rp1g As Range, ByRef rp2g As Range, ByRef Mmarktb As Range _
, ByRef Vmark_1 As Range, ByVal Mmarkmany As Integer, ByRef Mnst As Range, ByRef fshm1 As Range, ByRef fshm2 As Range _
, ByRef fshst1 As Range, ByRef fshst2 As Range, Optional VolatileOn As Boolean = True) As Variant
Application.Volatile VolatileOn
Dim Rasp(13) As Single
Dim m1, m2, st1, st2, marktb, mark1, markmany, G, n, ws1, ws2 As Integer
Dim i, j, k, sumws1, sumws2, g1, g2 As Long
Dim Pp1st, Pp2st, Pp1g, Pp2g, shm1, shm2, shst1, shst2, z, nst, mtb As Variant
Dim Pwin1, Pwin2, p1g, p2g, p1st, p2st, tb_0, tb_1, summRasp As Single
Set Pp1st = rp1st
Set Pp2st = rp2st
Set Pp1g = rp1g
Set Pp2g = rp2g

markmany = Mmarkmany
Set nst = Mnst
Set shm1 = fshm1
Set shm2 = fshm2
Set shst1 = fshst1
Set shst2 = fshst2
Set z = Vmark_1
Set mtb = Mmarktb
p1g = Pp1g.Value
p2g = Pp2g.Value
tb_0 = 0
tb_1 = 0
If nst.Value = 3 Then
n = 2
Else
n = 3
End If
marktb = mtb.Value
summRasp = 0
For j = 0 To 13
Rasp(j) = 0
Next j

For k = 1 To 25000 Step 1
mark1 = z.Value
m1 = shm1.Value
m2 = shm2.Value
st1 = shst1.Value
st2 = shst2.Value
ws1 = m1
ws2 = m2
Do Until (ws1 = n And ws2 < n) Or (ws2 = n And ws1 < n)

If mark1 = 1 Then
p1st = Pp1st.Value
p2st = Pp2st.Value
ElseIf mark1 = 0 Then
p1st = 1 - Pp2st.Value
p2st = 1 - Pp1st.Value
End If

If marktb = 0 Then 'без тай-брейка
Do Until (st1 >= 6 And st1 - st2 >= 2) Or (st2 >= 6 And st2 - st1 >= 2)
i = st1 + st2 + 1
If Not (i Mod 2 = 0) Then 'нечет
G = Gen(p1st)
st1 = st1 + G
st2 = st2 + 1 - G
Else
G = Gen(p2st)
st2 = st2 + G
st1 = st1 + 1 - G
End If

If st1 = 6 And st2 = 0 Then
Rasp(1) = Rasp(1) + 1
ElseIf st1 = 6 And st2 = 1 Then
Rasp(2) = Rasp(2) + 1
ElseIf st1 = 6 And st2 = 2 Then
Rasp(3) = Rasp(3) + 1
ElseIf st1 = 6 And st2 = 3 Then
Rasp(4) = Rasp(4) + 1
ElseIf st1 = 6 And st2 = 4 Then
Rasp(5) = Rasp(5) + 1
ElseIf st1 = 7 And st2 = 5 Then
Rasp(6) = Rasp(6) + 1
ElseIf st1 = 6 And st2 = 6 Then
Rasp(7) = Rasp(7) + 1
ElseIf st1 = 5 And st2 = 7 Then
Rasp(8) = Rasp(8) + 1
ElseIf st1 = 4 And st2 = 6 Then
Rasp(9) = Rasp(9) + 1
ElseIf st1 = 3 And st2 = 6 Then
Rasp(10) = Rasp(10) + 1
ElseIf st1 = 2 And st2 = 6 Then
Rasp(11) = Rasp(11) + 1
ElseIf st1 = 1 And st2 = 6 Then
Rasp(12) = Rasp(12) + 1
ElseIf st1 = 0 And st2 = 6 Then
Rasp(13) = Rasp(13) + 1
End If
Loop
If st1 >= 6 And st1 - st2 >= 2 Then
ws1 = ws1 + 1
Else
ws2 = ws2 + 1
End If
If mark1 = 1 And Not (i Mod 2 = 0) Then
mark1 = 0
ElseIf mark1 = 1 And i Mod 2 = 0 Then
mark1 = 1
ElseIf mark1 = 0 And i Mod 2 = 0 Then
mark1 = 0
ElseIf mark1 = 0 And Not (i Mod 2 = 0) Then
mark1 = 1
End If
st1 = 0
st2 = 0
End If

If marktb = 0 Then GoTo M 'с тай-брейком

Do Until (st1 = 6 And st1 - st2 >= 2) Or (st2 = 6 And st2 - st1 >= 2) Or (st1 = 6 And st2 = 6) Or (st1 = 7 And st2 = 5) Or (st2 = 7 And st1 = 5)

i = st1 + st2 + 1
If Not (i Mod 2 = 0) Then 'нечет
G = Gen(p1st)
st1 = st1 + G
st2 = st2 + 1 - G
Else
G = Gen(p2st)
st2 = st2 + G
st1 = st1 + 1 - G
End If
Loop

If st1 = 6 And st2 = 0 Then
Rasp(1) = Rasp(1) + 1
ElseIf st1 = 6 And st2 = 1 Then
Rasp(2) = Rasp(2) + 1
ElseIf st1 = 6 And st2 = 2 Then
Rasp(3) = Rasp(3) + 1
ElseIf st1 = 6 And st2 = 3 Then
Rasp(4) = Rasp(4) + 1
ElseIf st1 = 6 And st2 = 4 Then
Rasp(5) = Rasp(5) + 1
ElseIf st1 = 7 And st2 = 5 Then
Rasp(6) = Rasp(6) + 1
ElseIf st1 = 6 And st2 = 6 Then
Rasp(7) = Rasp(7) + 1
ElseIf st1 = 5 And st2 = 7 Then
Rasp(8) = Rasp(8) + 1
ElseIf st1 = 4 And st2 = 6 Then
Rasp(9) = Rasp(9) + 1
ElseIf st1 = 3 And st2 = 6 Then
Rasp(10) = Rasp(10) + 1
ElseIf st1 = 2 And st2 = 6 Then
Rasp(11) = Rasp(11) + 1
ElseIf st1 = 1 And st2 = 6 Then
Rasp(12) = Rasp(12) + 1
ElseIf st1 = 0 And st2 = 6 Then
Rasp(13) = Rasp(13) + 1
End If

If Not (st1 = 6 And st2 = 6) Then
If st1 >= 6 And st1 - st2 >= 2 Then
ws1 = ws1 + 1
ElseIf st2 >= 6 And st2 - st1 >= 2 Then
ws2 = ws2 + 1
End If

If mark1 = 1 And Not (i Mod 2 = 0) Then
mark1 = 0
ElseIf mark1 = 1 And i Mod 2 = 0 Then
mark1 = 1
ElseIf mark1 = 0 And i Mod 2 = 0 Then
mark1 = 0
Else
mark1 = 1
End If
st1 = 0
st2 = 0

End If

If Not (st1 = 6 And st2 = 6) Then GoTo M
'тай-брейк
tb_1 = tb_1 + 1
g1 = 0
g2 = 0
If mark1 = 1 Then
G = Gen(p1g)
g1 = g1 + G
g2 = g2 + 1 - G
Else
G = Gen(p2g)
g2 = g2 + G
g1 = g1 + 1 - G
End If

If mark1 = 1 Then
Do
G = Gen(p2g)
g2 = g2 + G
g1 = g1 + 1 - G
If (g1 >= 7 And g1 - g2 >= 2) Or (g2 >= 7 And g2 - g1 >= 2) Then

Exit Do
End If
G = Gen(p2g)
g2 = g2 + G
g1 = g1 + 1 - G
If (g1 >= 7 And g1 - g2 >= 2) Or (g2 >= 7 And g2 - g1 >= 2) Then

Exit Do
End If
G = Gen(p1g)
g1 = g1 + G
g2 = g2 + 1 - G
If (g1 >= 7 And g1 - g2 >= 2) Or (g2 >= 7 And g2 - g1 >= 2) Then

Exit Do
End If
G = Gen(p1g)
g1 = g1 + G
g2 = g2 + 1 - G
If (g1 >= 7 And g1 - g2 >= 2) Or (g2 >= 7 And g2 - g1 >= 2) Then

Exit Do
End If
Loop
mark1 = 0
Else
Do
G = Gen(p1g)
g1 = g1 + G
g2 = g2 + 1 - G
If (g1 >= 7 And g1 - g2 >= 2) Or (g2 >= 7 And g2 - g1 >= 2) Then

Exit Do
End If
G = Gen(p1g)
g1 = g1 + G
g2 = g2 + 1 - G
If (g1 >= 7 And g1 - g2 >= 2) Or (g2 >= 7 And g2 - g1 >= 2) Then

Exit Do
End If
G = Gen(p2g)
g2 = g2 + G
g1 = g1 + 1 - G
If (g1 >= 7 And g1 - g2 >= 2) Or (g2 >= 7 And g2 - g1 >= 2) Then

Exit Do
End If
G = Gen(p2g)
g2 = g2 + G
g1 = g1 + 1 - G
If (g1 >= 7 And g1 - g2 >= 2) Or (g2 >= 7 And g2 - g1 >= 2) Then

Exit Do
End If
Loop
mark1 = 1
End If

If g1 > g2 Then
ws1 = ws1 + 1
Else
ws2 = ws2 + 1
End If

st1 = 0
st2 = 0

M: Loop

If ws1 > ws2 Then
sumws1 = sumws1 + 1
Else
sumws2 = sumws2 + 1
End If

Next k

Pwin1 = sumws1 / 25000
Rasp(0) = Pwin1

For j = 1 To 13
Rasp(j) = Rasp(j) / 25000
Next j

For j = 1 To 13
summRasp = summRasp + Rasp(j)
Next j

For j = 1 To 13
Rasp(j) = Rasp(j) / summRasp
Next j

Tns = Rasp
End Function



Function FGeim(ByVal Pi As Double, ByVal si As Double, ByVal sj As Double, Optional VolatileOn As Boolean = True) As Variant
Application.Volatile VolatileOn

Dim P, s1, s2, win1 As Double
Dim j As Long
P = Pi
For j = 1 To 50000
s1 = si
s2 = sj

Do Until (s1 >= 4 And s1 - s2 >= 2) Or (s2 >= 4 And s2 - s1 >= 2)
G = Gen(P)
s1 = s1 + G
s2 = s2 + 1 - G
Loop
If s1 > s2 Then
win1 = win1 + 1
End If
Next j

FGeim = win1 / 50000

End Function





Function FGeim_Rasp(ByVal Pi As Double, ByVal si As Double, ByVal sj As Double, Optional VolatileOn As Boolean = True) As Variant
Application.Volatile VolatileOn
Dim Rasp(11) As Single
Dim P, s1, s2, win1 As Double
Dim j As Long
P = Pi

For j = 0 To 11
Rasp(j) = 0
Next j



For j = 1 To 50000
s1 = si
s2 = sj

Do Until (s1 >= 4 And s1 - s2 >= 2) Or (s2 >= 4 And s2 - s1 >= 2)
G = Gen(P)
s1 = s1 + G
s2 = s2 + 1 - G
Loop
If s1 > s2 Then
win1 = win1 + 1
End If

If s1 = 4 And s2 = 0 Then
Rasp(1) = Rasp(1) + 1
ElseIf s1 = 4 And s2 = 1 Then
Rasp(2) = Rasp(2) + 1
ElseIf s1 = 4 And s2 = 2 Then
Rasp(3) = Rasp(3) + 1
ElseIf s1 = 5 And s2 = 3 Then
Rasp(4) = Rasp(4) + 1
ElseIf s1 = 6 And s2 = 4 Then
Rasp(5) = Rasp(5) + 1
ElseIf s1 >= 5 And s2 >= 5 Then
Rasp(6) = Rasp(6) + 1
ElseIf s1 = 4 And s2 = 6 Then
Rasp(7) = Rasp(7) + 1
ElseIf s1 = 3 And s2 = 5 Then
Rasp(8) = Rasp(8) + 1
ElseIf s1 = 2 And s2 = 4 Then
Rasp(9) = Rasp(9) + 1
ElseIf s1 = 1 And s2 = 4 Then
Rasp(10) = Rasp(10) + 1
ElseIf s1 = 0 And s2 = 4 Then
Rasp(11) = Rasp(11) + 1
End If


Next j
Rasp(0) = win1 / 50000

For j = 1 To 11
Rasp(j) = Rasp(j) / 50000
Next j


FGeim_Rasp = Rasp

End Function



Function FPP(ByVal P As Single, Optional VolatileOn As Boolean = True) As Variant
Application.Volatile VolatileOn
Dim i As Integer
Dim Pg, f As Single
Pg = P
f = 0.5
For i = 1 To 100
f = 0.5 * (Pg * (1 + 2 * f ^ 2) - f ^ 4 * ((15 - 4 * f) * (1 - 2 * f * (1 - f)) - 10 * f ^ 2)) / Pg
Next i
FPP = f

End Function






Приближённая формула определения вероятности выиграть гейм со своей подачи при известной Р взять очко со своей подачи.

Pwin_geim = p^4*( 15-4*p-10*p^2/(1-2*p*(1-p)) )

Но нам надо уметь находить и обратную функцию p=F(Pwin_geim) это может например понадобиться
Для проверки адекватности модели по экспериментальным данным или попыток вычислить вероятность взять очко через частоты вин-лоз гейма со своей подачи через какие-то кучи данных итд итп.

Воспользуемся принципом сжатых отображений и перепишем равенство в виде

p(i+1) = 0.5 * (Pwin_geim * (1 + 2 * pi ^ 2) - pi ^ 4 * ((15 - 4 * pi) * (1 - 2 * pi* (1 - pi)) - 10 * pi ^ 2)) / Pwin_geim

таким образом начав итерационный процесс с некоторого значения p (можно взять его равным 0,5)
мы будем вычислять каждое новое значение вероятности на основании значения предыдущего значения p.

Функцию можно сделать например так ( встроенную в excel)

Function FPP(ByVal P As Single, Optional VolatileOn As Boolean = True) As Variant
Application.Volatile VolatileOn
Dim i As Integer
Dim Pg, f As Single
Pg = P
f = 0.5
For i = 1 To 100
f = 0.5 * (Pg * (1 + 2 * f ^ 2) - f ^ 4 * ((15 - 4 * f) * (1 - 2 * f * (1 - f)) - 10 * f ^ 2)) / Pg
Next i
FPP = f
End Function



Примеры ввода данных
Если мы указали для m1,m2,st1,st2 нули то естественно мы получим вероятность выигрыша матча . а если m1=1 m2=1 то если сетов 3 в матче получим вероятность выиграть сет.
Допустим Вам интересно кто выиграет тай-брейк (или кто победит при счёте в сете 6-6 (или поровну))
Тогда m1=1,m2=1,st=61,st2=6 получим соответствующую Р для вин. тай-брейка….и так далее ….
Всё получаем для игрока1 (которому соответствуют параметры m1 , st1) маркер первой подачи надо установить по первой подаче текущего сета (а когда неизвестно то можно менять маркер (mark1) с1 на 0 или с 0 на 1).


=Tns(A9;B9;C9;D9;tb;mark1;0;J9;E9;F9;G9;H9)
Вводится сразу в 14 ячеек листа как функция ТРАНСП() так как Tns возвращает массив.
Будет так в окне {=Tns(A9;B9;C9;D9;tb;mark1;0;J9;E9;F9;G9;H9)}



Если нам потребуется разнести частоты распределения 6-6 по тайбреку (или условно тай-бр—когда по 6-6 и играется до перевеса в 2 очка) то мы можем поступить так
Взять частоту 6-6 в распределении и найти вероятность для первого игрока выиграть ситуацию
отражённую в функции {Tns(A9;B9;C9;D9;K9;I9;0;J9;E9;F9;G9;H9)}, где в функцию передано
m1=1 m2=1 st1=6 st2=6 (ячейки E9;F9;G9;H9) тогда частоты разнесутся согласно
f66* Tns ---для игрока 1 и f66*(1-Tns)---для игрока 2

функция {=FGeim_Rasp(W34;P29;Q29)} возвращает вероятность вин.гейм и распределение
4-0 4-1 4-2 5-3 6-4 s1&s2>=5 4-6 3-5 2-4 1-4 0-4

Можно при желании имея распределение по экспериментальным данным найти парамтр
Вероятности взять очко при своей подачи не только по обратной функции FPP а используя
инструмент «поиск решения» (или свой алгоритм оптимизации) –для этого находим сумму
квадратов разности исходного(экспериментального) и распред. функции FGeim_Rasp.
Число итераций в цикле уменьшаем до 10000 и можно добавить условие для поиска Р_очко
0<=Р_очко<=1 (по сути надо два условия забить в поиск 0<=Р_очко и Р_очко<=1 )



Функция аналогичная Tns но возвращающая ещё и вероятность тотала геймов в матче
{=Tns_tot(A9;B9;C9;D9;K9;I9;0;J9;E9;F9;G9;H9;A7;B7)}

A7-значение текущего тотала при выставленном счёте в функции;B7—тотал букмекера.
Функция возвращает вероятность появления события ТОТ матча меньше значения в B7
В ячейки A9;B9 можно ввести приближённое аналитическое выражение для вероятности win
гейм при своей подаче (описывается формулой Ргейма =C9^4*(15-4*C9-10*C9^2/(1-2*C9*(1-C9)))
C9—вероятность взятия очка. (для B9 по аналогии)

Могут пригодится формулы для вероятности выиграть матч при известной вероятности выиграть сет.
Для 3-ёх сетового матча Pwin_match = p^2*(1+2*(1-p))
Для 5-ти сетового матча Pwin_match =p^3*(1+3*(1-p)+6*(1-p)^2)
Раскрыв скобки получим компоненты по вероятности 2-0 2-1 1-2 0-2 (для 5-ти сетов по аналогии).
Допустим 2-0 Р= p^2 (для 3-ёх сетового)
Function Tns_tot(ByRef rp1st As Range, ByRef rp2st As Range, ByRef rp1g As Range, ByRef rp2g As Range, ByRef Mmarktb As Range _
, ByRef Vmark_1 As Range, ByVal Mmarkmany As Integer, ByRef Mnst As Range, ByRef fshm1 As Range, ByRef fshm2 As Range _
, ByRef fshst1 As Range, ByRef fshst2 As Range, ByRef Tec_tot As Range, ByRef TOT_Buk As Range, Optional VolatileOn As Boolean = True) As Variant
Application.Volatile VolatileOn
Dim Rasp(14) As Single
Dim m1, m2, st1, st2, marktb, mark1, markmany, G, n, ws1, ws2 As Integer
Dim i, j, k, sumws1, sumws2, g1, g2 As Long
Dim Pp1st, Pp2st, Pp1g, Pp2g, shm1, shm2, shst1, shst2, z, nst, mtb As Variant
Dim Pwin1, Pwin2, p1g, p2g, p1st, p2st, tb_0, tb_1, summRasp, Tt, Tb, summtot, t_if As Single
Set Pp1st = rp1st
Set Pp2st = rp2st
Set Pp1g = rp1g
Set Pp2g = rp2g
Set Tc_tot = Tec_tot
Set T_buk = TOT_Buk
Tt = Tc_tot.Value
Tb = T_buk.Value
t_if = 0
markmany = Mmarkmany
Set nst = Mnst
Set shm1 = fshm1
Set shm2 = fshm2
Set shst1 = fshst1
Set shst2 = fshst2
Set z = Vmark_1
Set mtb = Mmarktb
p1g = Pp1g.Value
p2g = Pp2g.Value
tb_0 = 0
tb_1 = 0
If nst.Value = 3 Then
n = 2
Else
n = 3
End If
marktb = mtb.Value
summRasp = 0
For j = 0 To 14
Rasp(j) = 0
Next j

For k = 1 To 25000 Step 1
mark1 = z.Value
m1 = shm1.Value
m2 = shm2.Value
st1 = shst1.Value
st2 = shst2.Value
ws1 = m1
ws2 = m2
summtot = 0
Do Until (ws1 = n And ws2 < n) Or (ws2 = n And ws1 < n)

If mark1 = 1 Then
p1st = Pp1st.Value
p2st = Pp2st.Value
ElseIf mark1 = 0 Then
p1st = 1 - Pp2st.Value
p2st = 1 - Pp1st.Value
End If

If marktb = 0 Then 'без тай-брейка
Do Until (st1 >= 6 And st1 - st2 >= 2) Or (st2 >= 6 And st2 - st1 >= 2)
i = st1 + st2 + 1
If Not (i Mod 2 = 0) Then 'нечет
G = Gen(p1st)
st1 = st1 + G
st2 = st2 + 1 - G
Else
G = Gen(p2st)
st2 = st2 + G
st1 = st1 + 1 - G
End If

If st1 = 6 And st2 = 0 Then
Rasp(1) = Rasp(1) + 1
ElseIf st1 = 6 And st2 = 1 Then
Rasp(2) = Rasp(2) + 1
ElseIf st1 = 6 And st2 = 2 Then
Rasp(3) = Rasp(3) + 1
ElseIf st1 = 6 And st2 = 3 Then
Rasp(4) = Rasp(4) + 1
ElseIf st1 = 6 And st2 = 4 Then
Rasp(5) = Rasp(5) + 1
ElseIf st1 = 7 And st2 = 5 Then
Rasp(6) = Rasp(6) + 1
ElseIf st1 = 6 And st2 = 6 Then
Rasp(7) = Rasp(7) + 1
ElseIf st1 = 5 And st2 = 7 Then
Rasp(8) = Rasp(8) + 1
ElseIf st1 = 4 And st2 = 6 Then
Rasp(9) = Rasp(9) + 1
ElseIf st1 = 3 And st2 = 6 Then
Rasp(10) = Rasp(10) + 1
ElseIf st1 = 2 And st2 = 6 Then
Rasp(11) = Rasp(11) + 1
ElseIf st1 = 1 And st2 = 6 Then
Rasp(12) = Rasp(12) + 1
ElseIf st1 = 0 And st2 = 6 Then
Rasp(13) = Rasp(13) + 1
End If
Loop
If st1 >= 6 And st1 - st2 >= 2 Then
ws1 = ws1 + 1
Else
ws2 = ws2 + 1
End If
If mark1 = 1 And Not (i Mod 2 = 0) Then
mark1 = 0
ElseIf mark1 = 1 And i Mod 2 = 0 Then
mark1 = 1
ElseIf mark1 = 0 And i Mod 2 = 0 Then
mark1 = 0
ElseIf mark1 = 0 And Not (i Mod 2 = 0) Then
mark1 = 1
End If

If st1 >= 6 And st2 >= 6 Then
summtot = summtot + 13
Else
summtot = summtot + st1 + st2
End If

st1 = 0
st2 = 0
End If

If marktb = 0 Then GoTo M 'с тай-брейком

Do Until (st1 = 6 And st1 - st2 >= 2) Or (st2 = 6 And st2 - st1 >= 2) Or (st1 = 6 And st2 = 6) Or (st1 = 7 And st2 = 5) Or (st2 = 7 And st1 = 5)

i = st1 + st2 + 1
If Not (i Mod 2 = 0) Then 'нечет
G = Gen(p1st)
st1 = st1 + G
st2 = st2 + 1 - G
Else
G = Gen(p2st)
st2 = st2 + G
st1 = st1 + 1 - G
End If
Loop

If st1 = 6 And st2 = 0 Then
Rasp(1) = Rasp(1) + 1
ElseIf st1 = 6 And st2 = 1 Then
Rasp(2) = Rasp(2) + 1
ElseIf st1 = 6 And st2 = 2 Then
Rasp(3) = Rasp(3) + 1
ElseIf st1 = 6 And st2 = 3 Then
Rasp(4) = Rasp(4) + 1
ElseIf st1 = 6 And st2 = 4 Then
Rasp(5) = Rasp(5) + 1
ElseIf st1 = 7 And st2 = 5 Then
Rasp(6) = Rasp(6) + 1
ElseIf st1 = 6 And st2 = 6 Then
Rasp(7) = Rasp(7) + 1
ElseIf st1 = 5 And st2 = 7 Then
Rasp(8) = Rasp(8) + 1
ElseIf st1 = 4 And st2 = 6 Then
Rasp(9) = Rasp(9) + 1
ElseIf st1 = 3 And st2 = 6 Then
Rasp(10) = Rasp(10) + 1
ElseIf st1 = 2 And st2 = 6 Then
Rasp(11) = Rasp(11) + 1
ElseIf st1 = 1 And st2 = 6 Then
Rasp(12) = Rasp(12) + 1
ElseIf st1 = 0 And st2 = 6 Then
Rasp(13) = Rasp(13) + 1
End If

If Not (st1 = 6 And st2 = 6) Then
If st1 >= 6 And st1 - st2 >= 2 Then
ws1 = ws1 + 1
ElseIf st2 >= 6 And st2 - st1 >= 2 Then
ws2 = ws2 + 1
End If

If mark1 = 1 And Not (i Mod 2 = 0) Then
mark1 = 0
ElseIf mark1 = 1 And i Mod 2 = 0 Then
mark1 = 1
ElseIf mark1 = 0 And i Mod 2 = 0 Then
mark1 = 0
Else
mark1 = 1
End If

If st1 = 6 And st2 = 6 Then
summtot = summtot + 13
Else
summtot = summtot + st1 + st2
End If

st1 = 0
st2 = 0

End If

If Not (st1 = 6 And st2 = 6) Then GoTo M
'тай-брейк
tb_1 = tb_1 + 1
g1 = 0
g2 = 0
If mark1 = 1 Then
G = Gen(p1g)
g1 = g1 + G
g2 = g2 + 1 - G
Else
G = Gen(p2g)
g2 = g2 + G
g1 = g1 + 1 - G
End If

If mark1 = 1 Then
Do
G = Gen(p2g)
g2 = g2 + G
g1 = g1 + 1 - G
If (g1 >= 7 And g1 - g2 >= 2) Or (g2 >= 7 And g2 - g1 >= 2) Then

Exit Do
End If
G = Gen(p2g)
g2 = g2 + G
g1 = g1 + 1 - G
If (g1 >= 7 And g1 - g2 >= 2) Or (g2 >= 7 And g2 - g1 >= 2) Then

Exit Do
End If
G = Gen(p1g)
g1 = g1 + G
g2 = g2 + 1 - G
If (g1 >= 7 And g1 - g2 >= 2) Or (g2 >= 7 And g2 - g1 >= 2) Then

Exit Do
End If
G = Gen(p1g)
g1 = g1 + G
g2 = g2 + 1 - G
If (g1 >= 7 And g1 - g2 >= 2) Or (g2 >= 7 And g2 - g1 >= 2) Then

Exit Do
End If
Loop
mark1 = 0
Else
Do
G = Gen(p1g)
g1 = g1 + G
g2 = g2 + 1 - G
If (g1 >= 7 And g1 - g2 >= 2) Or (g2 >= 7 And g2 - g1 >= 2) Then

Exit Do
End If
G = Gen(p1g)
g1 = g1 + G
g2 = g2 + 1 - G
If (g1 >= 7 And g1 - g2 >= 2) Or (g2 >= 7 And g2 - g1 >= 2) Then

Exit Do
End If
G = Gen(p2g)
g2 = g2 + G
g1 = g1 + 1 - G
If (g1 >= 7 And g1 - g2 >= 2) Or (g2 >= 7 And g2 - g1 >= 2) Then

Exit Do
End If
G = Gen(p2g)
g2 = g2 + G
g1 = g1 + 1 - G
If (g1 >= 7 And g1 - g2 >= 2) Or (g2 >= 7 And g2 - g1 >= 2) Then

Exit Do
End If
Loop
mark1 = 1
End If

If g1 > g2 Then
ws1 = ws1 + 1
Else
ws2 = ws2 + 1
End If

st1 = 0
st2 = 0

M: Loop

If ws1 > ws2 Then
sumws1 = sumws1 + 1
Else
sumws2 = sumws2 + 1
End If

If summtot + Tt < Tb Then
t_if = t_if + 1
End If
Next k

Pwin1 = sumws1 / 25000
Rasp(0) = Pwin1
Rasp(14) = t_if / 25000
For j = 1 To 13
Rasp(j) = Rasp(j) / 25000
Next j

For j = 1 To 13
summRasp = summRasp + Rasp(j)
Next j

For j = 1 To 13
Rasp(j) = Rasp(j) / summRasp
Next j
Tns_tot = Rasp
End Function



Обратные функции для расчёта вероятности выиграть сет при известной вероятности win.матч

Function FOBR_5(ByVal P As Single, Optional VolatileOn As Boolean = True) As Variant
Application.Volatile VolatileOn
Dim i As Integer
Dim Pg, f, A, Y1, Y2, Y3 As Single
Pg = P
f = 0.5
A = 0.05
For i = 1 To 200
Y1 = 10 * f ^ 3 + 6 * f ^ 5 - 15 * f ^ 4 - Pg
Y2 = 10 * (f + A) ^ 3 + 6 * (f + A) ^ 5 - 15 * (f + A) ^ 4 - Pg
Y3 = 10 * (f - A) ^ 3 + 6 * (f - A) ^ 5 - 15 * (f - A) ^ 4 - Pg
If (Abs(Y1) < Abs(Y2)) And (Abs(Y1) < Abs(Y3)) Then
f = f
A = A / 5
ElseIf (Abs(Y2) < Abs(Y1)) And (Abs(Y2) < Abs(Y3)) Then
f = f + A
Else
f = f - A
End If

Next i
FOBR_5 = f
End Function

Function FOBR_3(ByVal P As Single, Optional VolatileOn As Boolean = True) As Variant
Application.Volatile VolatileOn
Dim i As Integer
Dim Pg, f, A, Y1, Y2, Y3 As Single
Pg = P
f = 0.5
A = 0.05
For i = 1 To 200
Y1 = 3 * f ^ 2 - 2 * f ^ 3 - Pg
Y2 = 3 * (f + A) ^ 2 - 2 * (f + A) ^ 3 - Pg
Y3 = 3 * (f - A) ^ 2 - 2 * (f - A) ^ 3 - Pg
If (Abs(Y1) < Abs(Y2)) And (Abs(Y1) < Abs(Y3)) Then
f = f
A = A / 5
ElseIf (Abs(Y2) < Abs(Y1)) And (Abs(Y2) < Abs(Y3)) Then
f = f + A
Else
f = f - A
End If

Next i
FOBR_3 = f
End Function


Обратная функция для обоих случаев FOB_3_5(вероятность ; число сетов) число сетов вводится в ячейку excel
Function FOB_3_5(ByVal P As Single, ByRef Mn As Range, Optional VolatileOn As Boolean = True) As Variant
Application.Volatile VolatileOn
Dim i, nset As Integer
Dim Pg, f, A, Y1, Y2, Y3 As Single
Pg = P
f = 0.5
A = 0.05
Set n = Mn
nset = n.Value
For i = 1 To 200

If nset = 3 Then
Y1 = 3 * f ^ 2 - 2 * f ^ 3 - Pg
Y2 = 3 * (f + A) ^ 2 - 2 * (f + A) ^ 3 - Pg
Y3 = 3 * (f - A) ^ 2 - 2 * (f - A) ^ 3 - Pg
Else
Y1 = 10 * f ^ 3 + 6 * f ^ 5 - 15 * f ^ 4 - Pg
Y2 = 10 * (f + A) ^ 3 + 6 * (f + A) ^ 5 - 15 * (f + A) ^ 4 - Pg
Y3 = 10 * (f - A) ^ 3 + 6 * (f - A) ^ 5 - 15 * (f - A) ^ 4 - Pg
End If

If (Abs(Y1) < Abs(Y2)) And (Abs(Y1) < Abs(Y3)) Then
f = f
A = A / 5
ElseIf (Abs(Y2) < Abs(Y1)) And (Abs(Y2) < Abs(Y3)) Then
f = f + A
Else
f = f - A
End If

Next i
FOB_3_5 = f
End Function


ПРОДОЛЖЕНИЕ СЛЕДУЕТ