/* Streaks probability in Picat. Probability of winning a streak of length R in N trials. For N=10, P = 0.9 and R=0..10: Picat> [R=probability_of_run_size(10,0.9,R) : R in 0..10].printf_list 0 1.0 1 0.9999999999 2 0.999937224 3 0.99483714 4 0.9593618859 5 0.885735 6 0.7440174 7 0.62178597 8 0.516560652 9 0.4261625379 10 0.3486784401 Picat> [R=probability_of_run_size(10,0.5,R).and_rat() : R in 0..10].printf_list 0 1.0 (1 / 1) 1 0.9990234375 (1023 / 1024) 2 0.859375 (55 / 64) 3 0.5078125 (65 / 128) 4 0.2451171875 (251 / 1024) 5 0.109375 (7 / 64) 6 0.046875 (3 / 64) 7 0.01953125 (5 / 256) 8 0.0078125 (1 / 128) 9 0.0029296875 (3 / 1024) 10 0.0009765625 (1 / 1024) Cf - ppl_streaks.pi - ppl_streaks_chess.pi - my Gamble model gamble_streaks_probability.rkt See ppl_distributions for probability_of_run_size(N,P,R) This program was created by Hakan Kjellerstrand, hakank@gmail.com See also my Picat page: http://www.hakank.org/picat/ */ import ppl_distributions, ppl_utils. import util. % import ordset. main => go. /* From https://pages.stern.nyu.edu/~churvich/Undergrad/Handouts1/13-Streak.pdf Approx: Prob{>= 1 winning streak of length r in n trials} ≈ [1+(n−r)q]* p^r assuming p^r is small [for r > n / 2 ?] otherwise it might give a probability > 1, so it's very unreliable! */ pp(N,P,R) = Res => Q = 1-P, % println("p**r"=(P**R)), Res = (1 + (N-R) * Q) * P**R. /* The approximate pp is way for for small values but getting better and better for larger values of R. pp = 1.08527 r: 0 p1: 1.0000000000 p2: 31.0000000000 diff:-30.0000000000 r: 1 p1: 1.0000000000 p2: 26.2225000000 diff:-25.2225000000 r: 2 p1: 1.0000000000 p2: 22.1807500000 diff:-21.1807500000 r: 3 p1: 1.0000000000 p2: 18.7615187500 diff:-17.7615187500 r: 4 p1: 1.0000000000 p2: 15.8689900000 diff:-14.8689900000 r: 5 p1: 1.0000000000 p2: 13.4220857031 diff:-12.4220857031 r: 6 p1: 1.0000000000 p2: 11.3522004203 diff:-10.3522004203 r: 7 p1: 0.9999999994 p2: 9.6012837940 diff:-8.6012837947 r: 8 p1: 0.9999998894 p2: 8.1202176462 diff:-7.1202177567 r: 9 p1: 0.9999956112 p2: 6.8674424573 diff:-5.8674468461 r: 10 p1: 0.9999350077 p2: 5.8077949281 diff:-4.8078599204 r: 11 p1: 0.9995115104 p2: 4.9115242023 diff:-3.9120126919 r: 12 p1: 0.9977291716 p2: 4.1534593084 diff:-3.1557301368 r: 13 p1: 0.9925518498 p2: 3.5123045881 diff:-2.5197527383 r: 14 p1: 0.9811321068 p2: 2.9700434494 diff:-1.9889113426 r: 15 p1: 0.9606564870 p2: 2.5114337992 diff:-1.5507773122 r: 16 p1: 0.9293015191 p2: 2.1235810664 diff:-1.1942795473 r: 17 p1: 0.8867762467 p2: 1.7955768929 diff:-0.9088006462 r: 18 p1: 0.8342932127 p2: 1.5181933975 diff:-0.6839001848 r: 19 p1: 0.7741358996 p2: 1.2836244706 diff:-0.5094885710 r: 20 p1: 0.7090909535 p2: 1.0852668704 diff:-0.3761759168 r: 21 p1: 0.6419487000 p2: 0.9175349996 diff:-0.2755862996 r: 22 p1: 0.5751643297 p2: 0.7757041855 diff:-0.2005398558 r: 23 p1: 0.5106862233 p2: 0.6557780781 diff:-0.1450918548 r: 24 p1: 0.4499145469 p2: 0.5543764588 diff:-0.1044619119 r: 25 p1: 0.3937425417 p2: 0.4686403185 diff:-0.0748977768 r: 26 p1: 0.3426394343 p2: 0.3961515499 diff:-0.0535121157 r: 27 p1: 0.2967460545 p2: 0.3348650048 diff:-0.0381189503 r: 28 p1: 0.2559658864 p2: 0.2830510133 diff:-0.0270851270 r: 29 p1: 0.2200430698 p2: 0.2392467567 diff:-0.0192036869 r: 30 p1: 0.1886245897 p2: 0.2022151293 diff:-0.0135905395 r: 31 p1: 0.1613071398 p2: 0.1709099380 diff:-0.0096027983 r: 32 p1: 0.1376706957 p2: 0.1444464637 diff:-0.0067757680 r: 33 p1: 0.1173013466 p2: 0.1220765582 diff:-0.0047752116 r: 34 p1: 0.0998058727 p2: 0.1031675788 diff:-0.0033617061 r: 35 p1: 0.0848202420 p2: 0.0871845707 diff:-0.0023643287 r: 36 p1: 0.0720137908 p2: 0.0736751945 diff:-0.0016614037 r: 37 p1: 0.0610904595 p2: 0.0622569783 diff:-0.0011665188 r: 38 p1: 0.0517881063 p2: 0.0526065351 diff:-0.0008184288 r: 39 p1: 0.0438766430 p2: 0.0444504429 diff:-0.0005737999 r: 40 p1: 0.0371555153 p2: 0.0375575312 diff:-0.0004020160 r: 41 p1: 0.0314508839 p2: 0.0317323582 diff:-0.0002814742 r: 42 p1: 0.0266127442 p2: 0.0268096925 diff:-0.0001969483 r: 43 p1: 0.0225121316 p2: 0.0226498485 diff:-0.0001377169 r: 44 p1: 0.0190385022 p2: 0.0191347397 diff:-0.0000962375 r: 45 p1: 0.0160973337 p2: 0.0161645419 diff:-0.0000672081 r: 46 p1: 0.0136079670 p2: 0.0136548717 diff:-0.0000469048 r: 47 p1: 0.0115016872 p2: 0.0115344005 diff:-0.0000327133 r: 48 p1: 0.0097200357 p2: 0.0097428360 diff:-0.0000228002 r: 49 p1: 0.0082133367 p2: 0.0082292168 diff:-0.0000158801 r: 50 p1: 0.0069394171 p2: 0.0069504696 diff:-0.0000110524 r: 51 p1: 0.0058625024 p2: 0.0058701892 diff:-0.0000076868 r: 52 p1: 0.0049522653 p2: 0.0049576073 diff:-0.0000053420 r: 53 p1: 0.0041830112 p2: 0.0041867207 diff:-0.0000037095 r: 54 p1: 0.0035329801 p2: 0.0035355540 diff:-0.0000025738 r: 55 p1: 0.0029837517 p2: 0.0029855360 diff:-0.0000017843 r: 56 p1: 0.0025197376 p2: 0.0025209735 diff:-0.0000012359 r: 57 p1: 0.0021277499 p2: 0.0021286052 diff:-0.0000008553 r: 58 p1: 0.0017966341 p2: 0.0017972254 diff:-0.0000005913 r: 59 p1: 0.0015169576 p2: 0.0015173660 diff:-0.0000004084 r: 60 p1: 0.0012807451 p2: 0.0012810268 diff:-0.0000002818 r: 61 p1: 0.0010812545 p2: 0.0010814487 diff:-0.0000001942 r: 62 p1: 0.0009127872 p2: 0.0009129209 diff:-0.0000001337 r: 63 p1: 0.0007705269 p2: 0.0007706188 diff:-0.0000000919 r: 64 p1: 0.0006504035 p2: 0.0006504666 diff:-0.0000000631 r: 65 p1: 0.0005489779 p2: 0.0005490212 diff:-0.0000000433 r: 66 p1: 0.0004633442 p2: 0.0004633739 diff:-0.0000000296 r: 67 p1: 0.0003910475 p2: 0.0003910678 diff:-0.0000000203 r: 68 p1: 0.0003300138 p2: 0.0003300276 diff:-0.0000000138 r: 69 p1: 0.0002784910 p2: 0.0002785005 diff:-0.0000000094 r: 70 p1: 0.0002349994 p2: 0.0002350058 diff:-0.0000000064 r: 71 p1: 0.0001982890 p2: 0.0001982933 diff:-0.0000000044 r: 72 p1: 0.0001673040 p2: 0.0001673070 diff:-0.0000000030 r: 73 p1: 0.0001411529 p2: 0.0001411549 diff:-0.0000000020 r: 74 p1: 0.0001190827 p2: 0.0001190840 diff:-0.0000000013 r: 75 p1: 0.0001004576 p2: 0.0001004585 diff:-0.0000000009 r: 76 p1: 0.0000847406 p2: 0.0000847412 diff:-0.0000000006 r: 77 p1: 0.0000714783 p2: 0.0000714787 diff:-0.0000000004 r: 78 p1: 0.0000602881 p2: 0.0000602884 diff:-0.0000000003 r: 79 p1: 0.0000508467 p2: 0.0000508468 diff:-0.0000000002 r: 80 p1: 0.0000428812 p2: 0.0000428813 diff:-0.0000000001 r: 81 p1: 0.0000361612 p2: 0.0000361613 diff:-0.0000000001 r: 82 p1: 0.0000304925 p2: 0.0000304925 diff:-0.0000000001 r: 83 p1: 0.0000257107 p2: 0.0000257108 diff:-0.0000000000 r: 84 p1: 0.0000216774 p2: 0.0000216774 diff:-0.0000000000 r: 85 p1: 0.0000182756 p2: 0.0000182756 diff:-0.0000000000 r: 86 p1: 0.0000154066 p2: 0.0000154066 diff:-0.0000000000 r: 87 p1: 0.0000129871 p2: 0.0000129871 diff:-0.0000000000 r: 88 p1: 0.0000109468 p2: 0.0000109468 diff:-0.0000000000 r: 89 p1: 0.0000092263 p2: 0.0000092263 diff:-0.0000000000 r: 90 p1: 0.0000077757 p2: 0.0000077757 diff:-0.0000000000 r: 91 p1: 0.0000065527 p2: 0.0000065527 diff:-0.0000000000 r: 92 p1: 0.0000055217 p2: 0.0000055217 diff:-0.0000000000 r: 93 p1: 0.0000046525 p2: 0.0000046525 diff:-0.0000000000 r: 94 p1: 0.0000039198 p2: 0.0000039198 diff:-0.0000000000 r: 95 p1: 0.0000033023 p2: 0.0000033023 diff:-0.0000000000 r: 96 p1: 0.0000027818 p2: 0.0000027818 diff:-0.0000000000 r: 97 p1: 0.0000023432 p2: 0.0000023432 diff:-0.0000000000 r: 98 p1: 0.0000019735 p2: 0.0000019735 diff:-0.0000000000 r: 99 p1: 0.0000016621 p2: 0.0000016621 diff:-0.0000000000 r: 100 p1: 0.0000013996 p2: 0.0000013996 diff:-0.0000000000 r: 101 p1: 0.0000011785 p2: 0.0000011785 diff:0.0000000000 r: 102 p1: 0.0000009923 p2: 0.0000009923 diff:-0.0000000000 r: 103 p1: 0.0000008354 p2: 0.0000008354 diff:-0.0000000000 r: 104 p1: 0.0000007032 p2: 0.0000007032 diff:-0.0000000000 r: 105 p1: 0.0000005919 p2: 0.0000005919 diff:-0.0000000000 r: 106 p1: 0.0000004982 p2: 0.0000004982 diff:-0.0000000000 r: 107 p1: 0.0000004192 p2: 0.0000004192 diff:-0.0000000000 r: 108 p1: 0.0000003528 p2: 0.0000003528 diff:0.0000000000 r: 109 p1: 0.0000002968 p2: 0.0000002968 diff:-0.0000000000 r: 110 p1: 0.0000002497 p2: 0.0000002497 diff:-0.0000000000 r: 111 p1: 0.0000002101 p2: 0.0000002101 diff:0.0000000000 r: 112 p1: 0.0000001767 p2: 0.0000001767 diff:0.0000000000 r: 113 p1: 0.0000001486 p2: 0.0000001486 diff:0.0000000000 r: 114 p1: 0.0000001250 p2: 0.0000001250 diff:-0.0000000000 r: 115 p1: 0.0000001051 p2: 0.0000001051 diff:-0.0000000000 r: 116 p1: 0.0000000883 p2: 0.0000000883 diff:-0.0000000000 r: 117 p1: 0.0000000743 p2: 0.0000000743 diff:-0.0000000000 r: 118 p1: 0.0000000624 p2: 0.0000000624 diff:0.0000000000 r: 119 p1: 0.0000000525 p2: 0.0000000525 diff:-0.0000000000 r: 120 p1: 0.0000000441 p2: 0.0000000441 diff:0.0000000000 r: 121 p1: 0.0000000370 p2: 0.0000000370 diff:-0.0000000000 r: 122 p1: 0.0000000311 p2: 0.0000000311 diff:-0.0000000000 r: 123 p1: 0.0000000261 p2: 0.0000000261 diff:-0.0000000000 r: 124 p1: 0.0000000219 p2: 0.0000000219 diff:0.0000000000 r: 125 p1: 0.0000000184 p2: 0.0000000184 diff:0.0000000000 r: 126 p1: 0.0000000155 p2: 0.0000000155 diff:-0.0000000000 r: 127 p1: 0.0000000130 p2: 0.0000000130 diff:0.0000000000 r: 128 p1: 0.0000000109 p2: 0.0000000109 diff:-0.0000000000 r: 129 p1: 0.0000000091 p2: 0.0000000091 diff:-0.0000000000 r: 130 p1: 0.0000000077 p2: 0.0000000077 diff:-0.0000000000 r: 131 p1: 0.0000000064 p2: 0.0000000064 diff:-0.0000000000 r: 132 p1: 0.0000000054 p2: 0.0000000054 diff:0.0000000000 r: 133 p1: 0.0000000045 p2: 0.0000000045 diff:0.0000000000 r: 134 p1: 0.0000000038 p2: 0.0000000038 diff:0.0000000000 r: 135 p1: 0.0000000032 p2: 0.0000000032 diff:0.0000000000 r: 136 p1: 0.0000000027 p2: 0.0000000027 diff:0.0000000000 r: 137 p1: 0.0000000022 p2: 0.0000000022 diff:0.0000000000 r: 138 p1: 0.0000000019 p2: 0.0000000019 diff:0.0000000000 r: 139 p1: 0.0000000016 p2: 0.0000000016 diff:-0.0000000000 r: 140 p1: 0.0000000013 p2: 0.0000000013 diff:-0.0000000000 r: 141 p1: 0.0000000011 p2: 0.0000000011 diff:0.0000000000 r: 142 p1: 0.0000000009 p2: 0.0000000009 diff:0.0000000000 r: 143 p1: 0.0000000008 p2: 0.0000000008 diff:-0.0000000000 r: 144 p1: 0.0000000006 p2: 0.0000000006 diff:0.0000000000 r: 145 p1: 0.0000000005 p2: 0.0000000005 diff:-0.0000000000 r: 146 p1: 0.0000000005 p2: 0.0000000005 diff:0.0000000000 r: 147 p1: 0.0000000004 p2: 0.0000000004 diff:-0.0000000000 r: 148 p1: 0.0000000003 p2: 0.0000000003 diff:-0.0000000000 r: 149 p1: 0.0000000003 p2: 0.0000000003 diff:0.0000000000 r: 150 p1: 0.0000000002 p2: 0.0000000002 diff:0.0000000000 r: 151 p1: 0.0000000002 p2: 0.0000000002 diff:0.0000000000 r: 152 p1: 0.0000000002 p2: 0.0000000002 diff:0.0000000000 r: 153 p1: 0.0000000001 p2: 0.0000000001 diff:0.0000000000 r: 154 p1: 0.0000000001 p2: 0.0000000001 diff:-0.0000000000 r: 155 p1: 0.0000000001 p2: 0.0000000001 diff:0.0000000000 r: 156 p1: 0.0000000001 p2: 0.0000000001 diff:0.0000000000 r: 157 p1: 0.0000000001 p2: 0.0000000001 diff:0.0000000000 r: 158 p1: 0.0000000001 p2: 0.0000000001 diff:-0.0000000000 r: 159 p1: 0.0000000000 p2: 0.0000000000 diff:-0.0000000000 r: 160 p1: 0.0000000000 p2: 0.0000000000 diff:0.0000000000 r: 161 p1: 0.0000000000 p2: 0.0000000000 diff:0.0000000000 r: 162 p1: 0.0000000000 p2: 0.0000000000 diff:0.0000000000 r: 163 p1: 0.0000000000 p2: 0.0000000000 diff:-0.0000000000 r: 164 p1: 0.0000000000 p2: 0.0000000000 diff:0.0000000000 r: 165 p1: 0.0000000000 p2: 0.0000000000 diff:-0.0000000000 r: 166 p1: 0.0000000000 p2: 0.0000000000 diff:0.0000000000 r: 167 p1: 0.0000000000 p2: 0.0000000000 diff:0.0000000000 r: 168 p1: 0.0000000000 p2: 0.0000000000 diff:0.0000000000 r: 169 p1: 0.0000000000 p2: 0.0000000000 diff:-0.0000000000 r: 170 p1: 0.0000000000 p2: 0.0000000000 diff:0.0000000000 r: 171 p1: 0.0000000000 p2: 0.0000000000 diff:0.0000000000 r: 172 p1: 0.0000000000 p2: 0.0000000000 diff:-0.0000000000 r: 173 p1: 0.0000000000 p2: 0.0000000000 diff:-0.0000000000 r: 174 p1: 0.0000000000 p2: 0.0000000000 diff:0.0000000000 r: 175 p1: 0.0000000000 p2: 0.0000000000 diff:0.0000000000 r: 176 p1: 0.0000000000 p2: 0.0000000000 diff:-0.0000000000 r: 177 p1: 0.0000000000 p2: 0.0000000000 diff:0.0000000000 r: 178 p1: 0.0000000000 p2: 0.0000000000 diff:0.0000000000 r: 179 p1: 0.0000000000 p2: 0.0000000000 diff:0.0000000000 r: 180 p1: 0.0000000000 p2: 0.0000000000 diff:-0.0000000000 r: 181 p1: 0.0000000000 p2: 0.0000000000 diff:0.0000000000 r: 182 p1: 0.0000000000 p2: 0.0000000000 diff:0.0000000000 r: 183 p1: 0.0000000000 p2: 0.0000000000 diff:-0.0000000000 r: 184 p1: 0.0000000000 p2: 0.0000000000 diff:-0.0000000000 r: 185 p1: 0.0000000000 p2: 0.0000000000 diff:0.0000000000 r: 186 p1: 0.0000000000 p2: 0.0000000000 diff:-0.0000000000 r: 187 p1: 0.0000000000 p2: 0.0000000000 diff:-0.0000000000 r: 188 p1: 0.0000000000 p2: 0.0000000000 diff:-0.0000000000 r: 189 p1: 0.0000000000 p2: 0.0000000000 diff:0.0000000000 r: 190 p1: 0.0000000000 p2: 0.0000000000 diff:0.0000000000 r: 191 p1: 0.0000000000 p2: 0.0000000000 diff:0.0000000000 r: 192 p1: 0.0000000000 p2: 0.0000000000 diff:0.0000000000 r: 193 p1: 0.0000000000 p2: 0.0000000000 diff:-0.0000000000 r: 194 p1: 0.0000000000 p2: 0.0000000000 diff:0.0000000000 r: 195 p1: 0.0000000000 p2: 0.0000000000 diff:-0.0000000000 r: 196 p1: 0.0000000000 p2: 0.0000000000 diff:-0.0000000000 r: 197 p1: 0.0000000000 p2: 0.0000000000 diff:-0.0000000000 r: 198 p1: 0.0000000000 p2: 0.0000000000 diff:0.0000000000 r: 199 p1: 0.0000000000 p2: 0.0000000000 diff:0.0000000000 r: 200 p1: 0.0000000000 p2: 0.0000000000 diff:0.0000000000 */ go ?=> N = 200, P = 85/100, R = 20, println(pp=pp(N,P,R)), nl, foreach(RR in 0..N) P1 = probability_of_run_size(N,P,RR), P2 = pp(N,P,RR), Diff = P1 - P2, printf("r: %3d p1: %.10f p2: %.10f diff:%.10f\n",RR,P1,P2,Diff) end, nl. go => true.