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


- - - - -

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


29 ответов в эту тему

#21 OFFLINE   petrovipv

    Специалист


  • Участник II
  • ПипПипПип
  • 160 сообщения
6
  • МестоположениеРоссия, СК

Добавлено 20 September 2016 - 19:43

СообщенияBambuk, on 20 September 2016 - 18:22, сказал:

.попробуйте в этом направлении порыть.)
вот не могу я доходчиво объяснять сразу, что я имел ввиду. Тут вот что, обычно ставишь до инплей на т.м 5,5 по 1,05, матч только начался, бац гол и кэф уже 1,14 и появляется мысль, что мол поспешил, вот если бы взял сейчас, то при тех же рисках был, но кэф то уже более чем в два раза выше. Вот и пришла мысль, а не играть ли только такие матчи. Ведь как правило матчи гоняют до 5, 6 голов за матч, и никто не знает как они распределяться во временном промежутке. Что если изначально играть после раннего гола т.м. 5,5 при 1,12-1,14 или даже т.м. 6,5 при 1,03-1,05. Или даже пойти дальше, иногда и два ранних гола может быть, тогда можно зайти т.м. 6,5 при 1,1 примерно. Вот я что имел ввиду. Тут конечно бы в статистике порыться, но может кто из форумчан уже копал в этом направлении.

#22 OFFLINE   Bambuk

    Специалист


  • mp
  • 6322 сообщения
602

Добавлено 20 September 2016 - 19:57

Сообщенияpetrovipv, on 20 September 2016 - 19:43, сказал:

вот не могу я доходчиво объяснять сразу, что я имел ввиду. Тут вот что, обычно ставишь до инплей на т.м 5,5 по 1,05, матч только начался, бац гол и кэф уже 1,14 и появляется мысль, что мол поспешил, вот если бы взял сейчас, то при тех же рисках был, но кэф то уже более чем в два раза выше. Вот и пришла мысль, а не играть ли только такие матчи. Ведь как правило матчи гоняют до 5, 6 голов за матч, и никто не знает как они распределяться во временном промежутке. Что если изначально играть после раннего гола т.м. 5,5 при 1,12-1,14 или даже т.м. 6,5 при 1,03-1,05. Или даже пойти дальше, иногда и два ранних гола может быть, тогда можно зайти т.м. 6,5 при 1,1 примерно. Вот я что имел ввиду. Тут конечно бы в статистике порыться, но может кто из форумчан уже копал в этом направлении.

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

#23 OFFLINE   Bambuk

    Специалист


  • mp
  • 6322 сообщения
602

Добавлено 20 September 2016 - 20:38

Module Module1
Function Gen(ByVal P As Single) As Integer
Dim Pg, T As Single
Pg = P
T = Rnd()
T = Rnd()
If T <= Pg Then
Gen = 1
Else
Gen = 0
End If
End Function

Function F_Tennis(ByVal rp1g As Single, ByVal rp2g As Single, ByVal Mmarktb As Integer _
, ByVal Vmark_1 As Integer, ByVal Mmarkmany As Integer, ByVal Mnst As Integer, ByVal fshm1 As Integer, ByVal fshm2 As Integer _
, ByVal fshst1 As Integer, ByVal fshst2 As Integer, ByVal Tec_tot As Single, ByVal TOT_Buk As Single) As Single

Dim Rasp(1) As Single
Dim m1, m2, st1, st2, marktb, mark1, markmany, G, n, ws1, ws2, PRO_m1, PRO_m2, PRO_st1, PRO_st2, PRO_mark1, nst, g1, g2 As Integer
Dim i, j, k, sumws1, sumws2, Ngenerat As Long
Dim Pp1st, Pp2st As Single
Dim Pwin1, p1g, p2g, p1st, p2st, tb_0, tb_1, summRasp, Tt, Tb, t_if, summtot, MOsumm As Single
p1g = rp1g
p2g = rp2g
Pp1st = p1g ^ 4 * (15 - 4 * p1g - 10 * p1g ^ 2 / (1 - 2 * p1g * (1 - p1g)))
Pp2st = p2g ^ 4 * (15 - 4 * p2g - 10 * p2g ^ 2 / (1 - 2 * p2g * (1 - p2g)))
Tt = Tec_tot
Tb = TOT_Buk
nst = Mnst
t_if = 0
markmany = Mmarkmany
MOsumm = 0
Ngenerat = 10000
tb_0 = 0
tb_1 = 0
If nst = 3 Then
n = 2
Else
n = 3
End If
marktb = Mmarktb
summRasp = 0

PRO_mark1 = Vmark_1
PRO_m1 = fshm1
PRO_m2 = fshm2
PRO_st1 = fshst1
PRO_st2 = fshst2

For k = 1 To Ngenerat Step 1
mark1 = PRO_mark1
m1 = PRO_m1
m2 = PRO_m2
st1 = PRO_st1
st2 = PRO_st2
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
p2st = Pp2st
ElseIf mark1 = 0 Then
p1st = 1 - Pp2st
p2st = 1 - Pp1st
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

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 = 6 Then
summtot = summtot + 13
Else
summtot = summtot + st1 + st2
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

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

Pwin1 = sumws1 / Ngenerat
Rasp(0) = Pwin1
Rasp(1) = t_if / Ngenerat
If markmany = 0 Then
F_Tennis = Rasp(0)
ElseIf markmany = 1 Then
F_Tennis = Rasp(1)
Else
F_Tennis = MOsumm / Ngenerat
End If
End Function

Sub Main()
'
' Minimizsolv2
'

'


Dim Raspsolv(1) As Single
Raspsolv(0) = 0
Raspsolv(1) = 0
Dim m1, m2, st1, st2, marktb, mark1, n, Vibor As Integer
Dim i, j, k As Long

Dim Tt, Tb, pwm, ptm As Single
Tt = 0
Tb = 44.5
pwm = 1 / 4.5714285
ptm = 40.5
n = 5
marktb = 1
mark1 = 0
m1 = 0
m2 = 0
st1 = 0
st2 = 0

Dim f1, A1, f2, A2, A3, Y1, Y2, Y3 As Single
f1 = 0.65
f2 = 0.65
System.Console.WriteLine("Привет, чувак! Я Bambuk, не отпало желание получать цифры?")
System.Console.WriteLine("тогда введите текущий тотал геймов")
Tt = CSng(System.Console.ReadLine())
System.Console.WriteLine("введите число сетов в матче")
n = CInt(System.Console.ReadLine())
System.Console.WriteLine("введите marktb 1-с тайбр. 0-без тайбр.")
marktb = CInt(System.Console.ReadLine())
System.Console.WriteLine("введите mark1 1-подача у 1-го игрока, 0-у 2-го")
mark1 = CInt(System.Console.ReadLine())
System.Console.WriteLine("введите тек.счёт в матче для 1-го игр. m1")
m1 = CInt(System.Console.ReadLine())
System.Console.WriteLine("введите m2")
m2 = CInt(System.Console.ReadLine())
System.Console.WriteLine("введите гейм-счёт1 в тек.сете st1")
st1 = CInt(System.Console.ReadLine())
System.Console.WriteLine("введите счёт2 st2")
st2 = CInt(System.Console.ReadLine())

System.Console.WriteLine("введите коэффициент win1")
pwm = 1 / CSng(System.Console.ReadLine())

System.Console.WriteLine("Выбор алгоритма 1-подбор по К_win & K_TOT_Buk 0-по К_win & MO_TOT")
Vibor = CInt(System.Console.ReadLine())
If Vibor = 1 Then
System.Console.WriteLine("введите коэффициент K_TOT_Buk на TOT_Buk геймов ")
ptm = 1 / CSng(System.Console.ReadLine())
System.Console.WriteLine("введите тотал TOT_Buk геймов")
Tb = CSng(System.Console.ReadLine())
Else
System.Console.WriteLine("введите мат.ожидание тот")
ptm = CSng(System.Console.ReadLine())
End If

For k = 1 To 5
A1 = 0.065 / k ^ 0.65
A2 = 0.065 / k ^ 0.65
A3 = 0.05 / k ^ 0.75
j = 0
i = 0
Do Until j > 2 Or i > 30
i = i + 1

Y1 = (F_Tennis(f1, f2, marktb, mark1, 0, n, m1, m2, st1, st2, Tt, Tb) - pwm) ^ 2
Y2 = (F_Tennis(f1 + A1, f2, marktb, mark1, 0, n, m1, m2, st1, st2, Tt, Tb) - pwm) ^ 2
Y3 = (F_Tennis(f1 - A1, f2, marktb, mark1, 0, n, m1, m2, st1, st2, Tt, Tb) - pwm) ^ 2

If (Y1 < Y2) And (Y1 < Y3) Then
f1 = f1
A1 = A1 / 5
j = j + 1
ElseIf (Y2 < Y1) And (Y2 < Y3) Then
f1 = f1 + A1
Else
f1 = f1 - A1
End If

If (f1 < 0) Or (f1 > 1) Then
Exit Do
End If
Loop

If (f1 < 0) Or (f1 > 1) Then
GoTo M
End If

j = 0
i = 0
Do Until j > 2 Or i > 30
i = i + 1
If Vibor = 1 Then
Y1 = (F_Tennis(f1, f2, marktb, mark1, 1, n, m1, m2, st1, st2, Tt, Tb) - ptm) ^ 2 / 3 + (F_Tennis(f1, f2, marktb, mark1, 0, n, m1, m2, st1, st2, Tt, Tb) - pwm) ^ 2
Y2 = (F_Tennis(f1 + A2 * 1.07, f2 + A2, marktb, mark1, 1, n, m1, m2, st1, st2, Tt, Tb) - ptm) ^ 2 / 3 + (F_Tennis(f1 + A2 * 1.07, f2 + A2, marktb, mark1, 0, n, m1, m2, st1, st2, Tt, Tb) - pwm) ^ 2
Y3 = (F_Tennis(f1 - A2 / 1.06, f2 - A2, marktb, mark1, 1, n, m1, m2, st1, st2, Tt, Tb) - ptm) ^ 2 / 3 + (F_Tennis(f1 - A2 / 1.06, f2 - A2, marktb, mark1, 0, n, m1, m2, st1, st2, Tt, Tb) - pwm) ^ 2
Else
Y1 = (F_Tennis(f1, f2, marktb, mark1, 3, n, m1, m2, st1, st2, Tt, Tb) - ptm) ^ 2 / 2000 + (F_Tennis(f1, f2, marktb, mark1, 0, n, m1, m2, st1, st2, Tt, Tb) - pwm) ^ 2
Y2 = (F_Tennis(f1 + A2 * 1.07, f2 + A2, marktb, mark1, 3, n, m1, m2, st1, st2, Tt, Tb) - ptm) ^ 2 / 2000 + (F_Tennis(f1 + A2 * 1.07, f2 + A2, marktb, mark1, 0, n, m1, m2, st1, st2, Tt, Tb) - pwm) ^ 2
Y3 = (F_Tennis(f1 - A2 / 1.06, f2 - A2, marktb, mark1, 3, n, m1, m2, st1, st2, Tt, Tb) - ptm) ^ 2 / 2000 + (F_Tennis(f1 - A2 / 1.06, f2 - A2, marktb, mark1, 0, n, m1, m2, st1, st2, Tt, Tb) - pwm) ^ 2
End If

If (Y1 < Y2) And (Y1 < Y3) Then
f2 = f2
A2 = A2 / 5
ElseIf (Y2 < Y1) And (Y2 < Y3) Then
f2 = f2 + A2
f1 = f1 + A2 * 1.07
Else
f2 = f2 - A2
f1 = f1 - A2 / 1.06
End If

If (f2 < 0) Or (f2 > 1) Then
Exit Do
End If
Loop

If (f2 < 0) Or (f2 > 1) Then
GoTo M
End If



Next k

M: If f1 < 0.5 And f2 < 0.5 Then
Raspsolv(0) = 1 - f2
Raspsolv(1) = 1 - f1
Else
Raspsolv(0) = f1
Raspsolv(1) = f2
End If

Console.WriteLine(" ")
Console.WriteLine(" ")
System.Console.WriteLine("P_win1 очко со своей подачи = {0} P_win2 очко со своей подачи = {1}", Raspsolv(0), Raspsolv(1))
Console.WriteLine(" ")
Console.WriteLine(" ")

Console.WriteLine("Это моя первая консольная программа, и сейчас она будет делать страшные вещи :)/>")

Console.WriteLine("Нажмите что-нибудь.")
Console.ReadKey()
End Sub

End Module

Отредактировано Bambuk, 20 September 2016 - 20:46.


#24 OFFLINE   Bambuk

    Специалист


  • mp
  • 6322 сообщения
602

Добавлено 20 September 2016 - 20:59

там где жирным выделено это пример как можно организовать поиск по подбору параметров (многие коэффициенты там можно менять)

Я залью два консольных приложения (на второе тоже код дам) смысл в целом вот в чём----в екселе очень долго считаются такие вещи (да и тут минуты 2 если 5-ти сетовые брать матчи).... Идея вообще состояла в том что некоторые базы данных не имеют подробной росписи и там можно только тотал выцепить или формально его разделить на два тотала (для игрока 1 и игрока 2 по геймам) ну вот тупо так 6-1 6-2 будет тотал 12 и 3 ну итд но в виду триггерной концепции мы опять можем в некоторых БД разделить вины и лузы но там в первом консольном приложении (которое не имеет практической пользы) там показано что по тоталу и Рвин мач по идее можно востановить Рочко... но мы можем попробовать так поступить для двух ветвей вин-лоз во втором консольном приложении. Алгоритм там можете взять и другой...смысл по двум МОгеймов попробовать приблизительно найти Рочко(приблизительно так как там очень чувствительная функция и она не аналитическая что создаёт проблемы в оптимизации)... так как в БД мы можем частоты реализации ветвей найти и вот эти тоталы персональные то это просто как вариант за неимением лучшего.....



вот вторая куйня

Module Module1
Function Gen(ByVal P As Single) As Integer
Dim Pg, T As Single
Pg = P
T = Rnd()
T = Rnd()
If T <= Pg Then
Gen = 1
Else
Gen = 0
End If
End Function

Function F_Tennis(ByVal rp1g As Single, ByVal rp2g As Single, ByVal Mmarktb As Integer _
, ByVal Vmark_1 As Integer, ByVal Mmarkmany As Integer, ByVal Mnst As Integer, ByVal fshm1 As Integer, ByVal fshm2 As Integer _
, ByVal fshst1 As Integer, ByVal fshst2 As Integer) As Single

Dim Rasp(1) As Single
Dim m1, m2, st1, st2, marktb, mark1, markmany, G, n, ws1, ws2, PRO_m1, PRO_m2, PRO_st1, PRO_st2, PRO_mark1, nst, g1, g2 As Integer
Dim i, j, k, sumws1, sumws2, Ngenerat As Long
Dim Pp1st, Pp2st As Single
Dim Pwin1, p1g, p2g, p1st, p2st, tb_0, tb_1, summRasp, Tt, Tb, t_if, summtot1, summtot2, MOsumm1, MOsumm2 As Single
p1g = rp1g
p2g = rp2g
Pp1st = p1g ^ 4 * (15 - 4 * p1g - 10 * p1g ^ 2 / (1 - 2 * p1g * (1 - p1g)))
Pp2st = p2g ^ 4 * (15 - 4 * p2g - 10 * p2g ^ 2 / (1 - 2 * p2g * (1 - p2g)))


nst = Mnst
t_if = 0
markmany = Mmarkmany
MOsumm1 = 0
MOsumm2 = 0
Ngenerat = 10000
tb_0 = 0
tb_1 = 0
If nst = 3 Then
n = 2
Else
n = 3
End If
marktb = Mmarktb
summRasp = 0

PRO_mark1 = Vmark_1
PRO_m1 = fshm1
PRO_m2 = fshm2
PRO_st1 = fshst1
PRO_st2 = fshst2

For k = 1 To Ngenerat Step 1
mark1 = PRO_mark1
m1 = PRO_m1
m2 = PRO_m2
st1 = PRO_st1
st2 = PRO_st2
ws1 = m1
ws2 = m2
summtot1 = 0
summtot2 = 0
Do Until (ws1 = n And ws2 < n) Or (ws2 = n And ws1 < n)

If mark1 = 1 Then
p1st = Pp1st
p2st = Pp2st
ElseIf mark1 = 0 Then
p1st = 1 - Pp2st
p2st = 1 - Pp1st
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

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 And st1 > st2 Then
summtot1 = summtot1 + 7
summtot2 = summtot2 + 6
ElseIf st1 >= 6 And st2 >= 6 And st2 > st1 Then
summtot1 = summtot1 + 6
summtot2 = summtot2 + 7
Else
summtot1 = summtot1 + st1
summtot2 = summtot2 + 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 Not (st1 = 6 And st2 = 6) Then
summtot1 = summtot1 + st1
summtot2 = summtot2 + st2
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
summtot1 = summtot1 + 7
summtot2 = summtot2 + 6
Else
ws2 = ws2 + 1
summtot1 = summtot1 + 6
summtot2 = summtot2 + 7
End If

st1 = 0
st2 = 0

M: Loop

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


MOsumm1 = MOsumm1 + summtot1
MOsumm2 = MOsumm2 + summtot2
Next k


Rasp(0) = MOsumm1 / Ngenerat
Rasp(1) = MOsumm2 / Ngenerat
If markmany = 0 Then
F_Tennis = Rasp(0)
ElseIf markmany = 1 Then
F_Tennis = Rasp(1)

End If
End Function

Sub Main()
'
' Minimizsolv2
'

'


Dim Raspsolv(1) As Single
Raspsolv(0) = 0
Raspsolv(1) = 0
Dim m1, m2, st1, st2, marktb, mark1, n As Integer
Dim i, j, k As Long

Dim pwm, ptm As Single

pwm = 14
ptm = 10.5
n = 5
marktb = 1
mark1 = 1
m1 = 0
m2 = 0
st1 = 0
st2 = 0

Dim f1, A1, f2, A2, A3, Y1, Y2, Y3 As Single

System.Console.WriteLine("Привет, чувак! Я Bambuk, не отпало желание получать цифры?")
System.Console.WriteLine("Тогда введите число сетов в матче")
n = CInt(System.Console.ReadLine())
System.Console.WriteLine("введите marktb 1-с тайбр. 0-без тайбр.")
marktb = CInt(System.Console.ReadLine())
System.Console.WriteLine("введите mark1 1-подача у 1-го игрока, 0-у 2-го")
mark1 = CInt(System.Console.ReadLine())

System.Console.WriteLine("введите мат.ожидание тот гейм 1")
pwm = CSng(System.Console.ReadLine())
System.Console.WriteLine("введите мат.ожидание тот гейм 2")
ptm = CSng(System.Console.ReadLine())
If pwm >= ptm Then
f1 = 0.8
f2 = 0.65
Else
f1 = 0.65
f2 = 0.8
End If

For k = 1 To 5
A1 = 0.065 / k ^ 0.5
A2 = 0.065 / k ^ 0.5
A3 = 0.05 / k ^ 0.65
j = 0
i = 0
Do Until j > 3 Or i > 50
i = i + 1

Y1 = (F_Tennis(f1, f2, marktb, mark1, 0, n, m1, m2, st1, st2) - pwm) ^ 2
Y2 = (F_Tennis(f1 + A1, f2, marktb, mark1, 0, n, m1, m2, st1, st2) - pwm) ^ 2
Y3 = (F_Tennis(f1 - A1, f2, marktb, mark1, 0, n, m1, m2, st1, st2) - pwm) ^ 2

If (Y1 < Y2) And (Y1 < Y3) Then
f1 = f1
A1 = A1 / 4
j = j + 1
ElseIf (Y2 < Y1) And (Y2 < Y3) Then
f1 = f1 + A1
Else
f1 = f1 - A1
End If

If (f1 < 0) Or (f1 > 1) Then
Exit Do
End If
Loop

If (f1 < 0) Or (f1 > 1) Then
GoTo M
End If

j = 0
i = 0
Do Until j > 3 Or i > 50
i = i + 1

Y1 = (F_Tennis(f1, f2, marktb, mark1, 1, n, m1, m2, st1, st2) - ptm) ^ 2 + (F_Tennis(f1, f2, marktb, mark1, 0, n, m1, m2, st1, st2) - pwm) ^ 2
Y2 = (F_Tennis(f1 + A2 * 1.07, f2 + A2, marktb, mark1, 1, n, m1, m2, st1, st2) - ptm) ^ 2 + (F_Tennis(f1 + A2 * 1.07, f2 + A2, marktb, mark1, 0, n, m1, m2, st1, st2) - pwm) ^ 2
Y3 = (F_Tennis(f1 - A2 / 1.06, f2 - A2, marktb, mark1, 1, n, m1, m2, st1, st2) - ptm) ^ 2 + (F_Tennis(f1 - A2 / 1.06, f2 - A2, marktb, mark1, 0, n, m1, m2, st1, st2) - pwm) ^ 2


If (Y1 < Y2) And (Y1 < Y3) Then
f2 = f2
A2 = A2 / 4
ElseIf (Y2 < Y1) And (Y2 < Y3) Then
f2 = f2 + A2
f1 = f1 + A2 * 1.07
Else
f2 = f2 - A2
f1 = f1 - A2 / 1.06
End If

If (f2 < 0) Or (f2 > 1) Then
Exit Do
End If
Loop

If (f2 < 0) Or (f2 > 1) Then
GoTo M
End If


Next k

M: If f1 < 0.5 And f2 < 0.5 Then
Raspsolv(0) = 1 - f2
Raspsolv(1) = 1 - f1
Else
Raspsolv(0) = f1
Raspsolv(1) = f2
End If

Console.WriteLine(" ")
Console.WriteLine(" ")
System.Console.WriteLine("P_win1 очко со своей подачи = {0} P_win2 очко со своей подачи = {1}", Raspsolv(0), Raspsolv(1))
Console.WriteLine(" ")
Console.WriteLine(" ")

Console.WriteLine("Это моя бамбук-консольная программа, и сейчас она будет делать страшные вещи :)")

Console.WriteLine("Нажмите что-нибудь и ракеты пойдут на цели-букмекерские конторы")
Console.ReadKey()
End Sub

End Module




ПРОГРАММЫ ТУТ (пришлось поизучать VB.NET а то в екселе ента куйня минут 15-20 считается..)

https://yadi.sk/d/dBjHsSKdvT4nB

https://yadi.sk/d/lvpTjywIvT4uK (похожие проги можно попробовать в БД где есть кефы и только расклад по счёту геймов в матчах) ибо если нет кефоф то всё равно роспись по числу подач она там не пришей к пи..де рукав...ибо баланс-то мы не понимаем...или базу допиливать по кефам или брать то чё есть)


Это можно рассматривать как примеры и руководство к дальнейшему разруливанию данной ситуации с нехваткой данных

Отредактировано Bambuk, 20 September 2016 - 21:06.


#25 OFFLINE   Bambuk

    Специалист


  • mp
  • 6322 сообщения
602

Добавлено 20 September 2016 - 21:31

Там ранее приводились примеры с конкретными циферами
0.7227--это у нас вероятность реализации ветви вин (лоз 1-р вин)
и были данные 0.6905 0.5832 тоталы там так --общий 23.27 и раздельно 14 и 9.27 (это эксперимент)
лузерная ветвь
0.622 0.6828 25.2-общий тот и порознь 11.07 14.14

вот можете всё подставить и проверить...ситуация примерно по данному примеру (но это тока по этому одному а как там далее хз)

кефф получится примерно 1.47 но зато будет получше совпадение с общим тоталом (ну это понятно--мы по тоталам восстанавливаем Рочко для игроков)

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


Ну пока тормознём-с с формулами, а то у мене тут водка киснет... :)

#26 OFFLINE   Bambuk

    Специалист


  • mp
  • 6322 сообщения
602

Добавлено 20 September 2016 - 22:12

Базы которые имелись в виду (где нет подробностей по подачам итд) типа www.tennis-data.co.uk/alldata.php
Тут нет кефоф https://github.com/J...mann/tennis_atp

#27 OFFLINE   Bambuk

    Специалист


  • mp
  • 6322 сообщения
602

Добавлено 20 September 2016 - 22:38

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

Может у кого возникнут решения...просьба поделиться резом....(но тут в таких задачах может даже на рез влиять начальные параметры с которых начинаем итерации. поставим допустим начальные Рочко 0.5 и 0.5 получим одно поставим 0.65 0.5 можем получить другое...саму структуру функции что ли исследовать...да там ёпрст могут быть до хера локальных минимумов(максимумов) и хз как тогда енту хрень разруливать (надо ж мля каждый кусман исследовать и сравнивать...писец короче)....задача не для слабонервных...

Отредактировано Bambuk, 20 September 2016 - 22:45.


#28 OFFLINE   Bambuk

    Специалист


  • mp
  • 6322 сообщения
602

Добавлено 21 September 2016 - 00:10

Завтра попробую на реальных цифрах показать сложность подбора Роч по тот1 тот 2 и какие там тонкости.....(практически пока прихожу к выводу---достигнуть приемлемой точности невозможно....что весьма печально...ибо это означает только то,------------- что нужно наличие полноценной детальной БД включающей все характеристики по подачам-модачам и кефам-мефам....)....Но радует тока то, что и БК не может с приемлемой точностью нарисовать кефф.....

#29 OFFLINE   Bambuk

    Специалист


  • mp
  • 6322 сообщения
602

Добавлено 21 September 2016 - 08:01

Если кто-то попробует улучшить для своих нужд подбор Рочко по данным персональных тоталов надо учесть вот что---допустим мы хотим проверить работу алгоритма...тогда разумеется для таких вот данных по тоталам 14 и 9 или 9 и 14 мы должны получить что-то типа такого 0.66 0.55 (данные от балды просто смотрим логику цифр) а для 9 14 должно теоретически так быть тогда 0.55 0.65 так вот надо учесть маркер подачи --если используем тот алгоритм что у меня то там при маркере подачи =1 (первый игрок подаёт и при 14 9 это тот у кого 14) то тогда для идентичности мы должны при 9 14 указать маркер подачи=0 (подаёт второй условный игрок с 14) Дело в том что от того кто подаёт первым зависит распределение счетов.

можно по идее попробовать и разделить алгоритм подбора на случаи когда мо1 больше мо2 и когда мо1 меньше мо2 в коде там частично разделено но только по выбору начальных(стартовых) точек приближения а можно ещё вот эту хрень переписать чтоб значения pwm ptm поменялись местами как бы (они как раз суть мо1 мо2)
Do Until j > 3 Or i > 50
i = i + 1

Y1 = (F_Tennis(f1, f2, marktb, mark1, 0, n, m1, m2, st1, st2) - pwm) ^ 2
Y2 = (F_Tennis(f1 + A1, f2, marktb, mark1, 0, n, m1, m2, st1, st2) - pwm) ^ 2
Y3 = (F_Tennis(f1 - A1, f2, marktb, mark1, 0, n, m1, m2, st1, st2) - pwm) ^ 2

If (Y1 < Y2) And (Y1 < Y3) Then
f1 = f1
A1 = A1 / 4
j = j + 1
ElseIf (Y2 < Y1) And (Y2 < Y3) Then
f1 = f1 + A1
Else
f1 = f1 - A1
End If

If (f1 < 0) Or (f1 > 1) Then
Exit Do
End If
Loop

If (f1 < 0) Or (f1 > 1) Then
GoTo M
End If

j = 0
i = 0
Do Until j > 3 Or i > 50
i = i + 1

Y1 = (F_Tennis(f1, f2, marktb, mark1, 1, n, m1, m2, st1, st2) - ptm) ^ 2 + (F_Tennis(f1, f2, marktb, mark1, 0, n, m1, m2, st1, st2) - pwm) ^ 2
Y2 = (F_Tennis(f1 + A2 * 1.07, f2 + A2, marktb, mark1, 1, n, m1, m2, st1, st2) - ptm) ^ 2 + (F_Tennis(f1 + A2 * 1.07, f2 + A2, marktb, mark1, 0, n, m1, m2, st1, st2) - pwm) ^ 2
Y3 = (F_Tennis(f1 - A2 / 1.06, f2 - A2, marktb, mark1, 1, n, m1, m2, st1, st2) - ptm) ^ 2 + (F_Tennis(f1 - A2 / 1.06, f2 - A2, marktb, mark1, 0, n, m1, m2, st1, st2) - pwm) ^ 2


If (Y1 < Y2) And (Y1 < Y3) Then
f2 = f2
A2 = A2 / 4
ElseIf (Y2 < Y1) And (Y2 < Y3) Then
f2 = f2 + A2
f1 = f1 + A2 * 1.07
Else
f2 = f2 - A2
f1 = f1 - A2 / 1.06
End If

Теперь что с чем связано по цифрам---для всего матча у нас там в функциях ранее приведённых есть данные по распределению за матч...но надо понимать что это допустим для 5-ти сетового матча просто частоты с которыми могут появляться 6-0 6-1 итд и если надо какое-то разделение по тоталам то там надо или в код что-то дописать или связать попробовать с мат ожиданием числа сетов в маче. МО числа сетов можно получить из распределения по счёту матча
это вот эти счета 2-0 2-1 0-2 1-2 итд для 5-ти сетового по аналогии тогда для 3 сетового у нас получается мо так (2+0)*частота(2-0)+(2+1)*частота(2-1)+....+ и так далее...допустим получили 2.4 мо тогда допустим для МО геймов можно так связать цифры---для распределения по геймам делаем тоже самое
там допустим цифра будет по матчу 10.5 (тут берём суммы 6+0 6+1 итд где тай-брейк там 13....) тогда можно перемножить 2.4*10.5
Потом там надо понимать--что распределение на гейм будет отличаться от распределения для матча (в силу процедуры подсчёта частот) и на вид и цифры будет влиять---кто подаёт первым.

Можно считать достаточно много линий с помощью такой модели (но надо помнить что считаем триггерным способом...нужно два расчёта которые потом объединяем через формулу полной вероятности). Допустим через функцию дающую распределение счёта в гейме можно вычислить линию
<6 =6 >6 (просто складываем частоты событий входящих в события <6 =6 или >6)

#30 OFFLINE   Bambuk

    Специалист


  • mp
  • 6322 сообщения
602

Добавлено 21 September 2016 - 12:16

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


сделал вот так как вариант (дальше там сами мудите) это кусок кода который отвечает за все вещи которые я упомянул выше (можно попробовать поменять алгоритм подбора)

If pwm >= ptm Then
f1 = 0.62
f2 = 0.57
Else
f1 = 0.57
f2 = 0.62
End If

For k = 1 To 7
A1 = 0.035 / k ^ 0.5
A2 = 0.035 / k ^ 0.5

j = 0
i = 0

If pwm >= ptm Then
Do Until j > 3 Or i > 50
i = i + 1

Y1 = (F_Tennis(f1, f2, marktb, mark1, 0, n, m1, m2, st1, st2) - pwm) ^ 2
Y2 = (F_Tennis(f1 + A1, f2, marktb, mark1, 0, n, m1, m2, st1, st2) - pwm) ^ 2
Y3 = (F_Tennis(f1 - A1, f2, marktb, mark1, 0, n, m1, m2, st1, st2) - pwm) ^ 2

If (Y1 < Y2) And (Y1 < Y3) Then
f1 = f1
A1 = A1 / 5
j = j + 1
ElseIf (Y2 < Y1) And (Y2 < Y3) Then
f1 = f1 + A1
Else
f1 = f1 - A1
End If

If (f1 < 0) Or (f1 > 1) Then
Exit Do
End If
Loop

If (f1 < 0) Or (f1 > 1) Then
GoTo M
End If

j = 0
i = 0
Do Until j > 3 Or i > 50
i = i + 1

Y1 = (F_Tennis(f1, f2, marktb, mark1, 1, n, m1, m2, st1, st2) - ptm) ^ 2 + (F_Tennis(f1, f2, marktb, mark1, 0, n, m1, m2, st1, st2) - pwm) ^ 2
Y2 = (F_Tennis(f1 + A2 * 1.08, f2 + A2, marktb, mark1, 1, n, m1, m2, st1, st2) - ptm) ^ 2 + (F_Tennis(f1 + A2 * 1.08, f2 + A2, marktb, mark1, 0, n, m1, m2, st1, st2) - pwm) ^ 2
Y3 = (F_Tennis(f1 - A2 / 1.08, f2 - A2, marktb, mark1, 1, n, m1, m2, st1, st2) - ptm) ^ 2 + (F_Tennis(f1 - A2 / 1.08, f2 - A2, marktb, mark1, 0, n, m1, m2, st1, st2) - pwm) ^ 2


If (Y1 < Y2) And (Y1 < Y3) Then
f2 = f2
A2 = A2 / 5
ElseIf (Y2 < Y1) And (Y2 < Y3) Then
f2 = f2 + A2
f1 = f1 + A2 * 1.08
Else
f2 = f2 - A2
f1 = f1 - A2 / 1.08
End If

If (f2 < 0) Or (f2 > 1) Then
Exit Do
End If
Loop

If (f2 < 0) Or (f2 > 1) Then
GoTo M
End If

Else
Do Until j > 3 Or i > 50
i = i + 1

Y1 = (F_Tennis(f1, f2, marktb, mark1, 1, n, m1, m2, st1, st2) - ptm) ^ 2
Y2 = (F_Tennis(f1, f2 + A1, marktb, mark1, 1, n, m1, m2, st1, st2) - ptm) ^ 2
Y3 = (F_Tennis(f1, f2 - A1, marktb, mark1, 1, n, m1, m2, st1, st2) - ptm) ^ 2

If (Y1 < Y2) And (Y1 < Y3) Then
f2 = f2
A1 = A1 / 5
j = j + 1
ElseIf (Y2 < Y1) And (Y2 < Y3) Then
f2 = f2 + A1
Else
f2 = f2 - A1
End If

If (f1 < 0) Or (f1 > 1) Then
Exit Do
End If
Loop

If (f1 < 0) Or (f1 > 1) Then
GoTo M
End If

j = 0
i = 0
Do Until j > 3 Or i > 50
i = i + 1

Y1 = (F_Tennis(f1, f2, marktb, mark1, 1, n, m1, m2, st1, st2) - ptm) ^ 2 + (F_Tennis(f1, f2, marktb, mark1, 0, n, m1, m2, st1, st2) - pwm) ^ 2
Y2 = (F_Tennis(f1 + A2, f2 + A2 * 1.08, marktb, mark1, 1, n, m1, m2, st1, st2) - ptm) ^ 2 + (F_Tennis(f1 + A2, f2 + A2 * 1.08, marktb, mark1, 0, n, m1, m2, st1, st2) - pwm) ^ 2
Y3 = (F_Tennis(f1 - A2, f2 - A2 / 1.08, marktb, mark1, 1, n, m1, m2, st1, st2) - ptm) ^ 2 + (F_Tennis(f1 - A2, f2 - A2 / 1.08, marktb, mark1, 0, n, m1, m2, st1, st2) - pwm) ^ 2


If (Y1 < Y2) And (Y1 < Y3) Then
f1 = f1
A2 = A2 / 5
ElseIf (Y2 < Y1) And (Y2 < Y3) Then
f1 = f1 + A2
f2 = f2 + A2 * 1.08
Else
f1 = f1 - A2
f2 = f2 - A2 / 1.08
End If

If (f1 < 0) Or (f1 > 1) Then
Exit Do
End If
Loop

If (f1 < 0) Or (f1 > 1) Then
GoTo M
End If
End If
Next k

M: If f1 < 0.5 And f2 < 0.5 Then
Raspsolv(0) = 1 - f2
Raspsolv(1) = 1 - f1
Else
Raspsolv(0) = f1
Raspsolv(1) = f2
End If


Наверно будет лучше брать базу где есть возможность непосредственно находить Рочко (а то данные неустойчивые по вышеуказанному механизму...или косяк в алгоритме :))

Отредактировано Bambuk, 21 September 2016 - 12:22.