-
Notifications
You must be signed in to change notification settings - Fork 572
Centipawn conversion #860
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Centipawn conversion #860
Conversation
Sync upstream changes
This conversion formula should be a better match near the asymptotes.
I'm not positive the best way to handle the case x = +/- 1 (divide by zero error). Maybe multiply Edit: The fix is to solve for max score = +128, which is what we are used to seeing. Note the following commit. |
This coefficient makes the max score top out near +128 (12826 cp, more precisely). This also fixes the divide-by-zero problem at x = +/- 1.
New data with columns: Q (from LC0-eval) / LC0-eval (win_percentage) / SF-eval / LC0-eval with cp formula (current) / LC0-eval with cp formula (old) Description: The formula I tried least-square fitting on the new formula above, but didn't like the result. My proposal would be what looks best visually for me: |
Nice graphs and the new formula looks promising! I was wondering if other hardware or time settings were tested to confirm if the shapes are similar, and that we're not overfitting to a specific hardware/setting? That's from having noticed a dip when I tried it on TCEC 15 games (higher evals look better though). I suppose another thing to know would be how well Leela's Q value predicts Stockfish's win probability. |
I don't think it's a good idea to derive the formula or test it on Leela's or SF's games. Each engine would overestimate it's own position more or less. |
With the additional data points @zz4032 provided, the best fit for the exponent is 14. 295 still looks to be a good fit for the middle. My proposal is |
The coefficient 0.976953125 = 1 - 295/12800.
Looks good to me. Will wait for a day or so for objections and merge. Is it easily reversable? (for TCEC chat) |
@mooskagh, It's easily reversible, sure. Just a single formula change. The diff is minimal: https://github.com/LeelaChessZero/lc0/pull/860/files/7296a830d602c1d146ccacfd968527c0a9d8e3de |
I meant whether it's easy to get inverse function (from centipawns back to Q, TCEC chat likes to recompute Q back from centipawn output). |
@mooskagh Ah, that makes more sense. Unfortunately, the inverse function is nontrivial and I haven't yet found a decent approximation to the inverse that's simple to calculate. Note to self: This is Mathematica's 'solution'.
|
To be precise, with 295 the factor in the formula should be changed: Can TCEC use something like a lookup-table? Taking eval closest to one from the table and show the equivalent winrate:
Edit: I noticed that what I called "winrate" in tables and diagrams is actually Q. |
@zz4032 And here's a coarser set from -128 to +128: And for good measure, the reverse mapping of Win% to Centipawns: |
For inverting, Newton's method works great - five or so iterations are more than enough, if you're careful to start a bit larger (further from Q=0) than the value you're converging to. Initial guess x_0 = table lookup, erring towards higher abs(eval) x_(n + 1) = x_n - ((295 x_n)/(1 - 0.976953 x_n^14) - CP)/((4034.82 x_n^14)/(1 - 0.976953 x_n^14)^2 + 295/(1 - 0.976953 x_n^14)) Take Q = x_5 If you take out the table lookup and just guess 0 crudely, you need to add a check if it tries to take the first iteration out of bounds (force it back to +/-1), and a stop condition based on the sizes of the step it took. There are pathological cases where you need a lot of iterations but it's usually under 15 or so. (Grabbed the iteration equation from Wolfram Alpha here) |
I don't think any iterative approach (rather than one-line formula approximation) will be suitable for TCEC, but anyway, let's merge it for now. :) |
* Non-tangent Centipawn Conversion This conversion formula should be a better match near the asymptotes. * Added coefficient to the denominator This coefficient makes the max score top out near +128 (12826 cp, more precisely). This also fixes the divide-by-zero problem at x = +/- 1. * Exponent tweak and coefficient precision The coefficient 0.976953125 = 1 - 295/12800.
If someone wants a single line expression to convert a
Optimizing the ternary chain to do a binary search, e.g., win = 0.1 * (cp < 1
? cp < -172
? cp < -261
? cp < -370
? cp < -597
? cp < -1052
? cp < -1787
? cp < -3288
? cp < -4646
? cp < -8043 ? 0 : 1
: 2
: cp < -2099
? cp < -2556 ? 3 : 4
: 5
: … … is left as an exercise for the reader. 😉 Generating the scripts at the beginning const CPs = new Map();
for (let i = 0; i < 1000; i++) {
const Q = -1 + .002 * (i + .5);
const cp = Math.round(295 * Q / (1 - 0.976953125 * Math.pow(Q, 14)));
CPs.set(cp, i);
}
`
# javascript
win = .1 * (${[...CPs].map(([cp, win]) => `cp < ${cp + 1} ? ${win} : `).join("")}1000)
# python
win = .1 * (${[...CPs].map(([cp, win]) => `${win} if cp < ${cp + 1} else `).join("")}1000)
` |
I just couldn't help myself 😛 win = 0.1 * (cp < 1
? cp < -172
? cp < -261
? cp < -370
? cp < -597
? cp < -1052
? cp < -1787
? cp < -3288
? cp < -4646
? cp < -8043 ? 0 : 1
: 2
: cp < -2099
? cp < -2556 ? 3 : 4
: 5
: cp < -1251
? cp < -1387
? cp < -1560 ? 6 : 7
: 8
: cp < -1142 ? 9 : 10
: cp < -732
? cp < -858
? cp < -913
? cp < -977 ? 11 : 12
: 13
: cp < -769
? cp < -811 ? 14 : 15
: 16
: cp < -643
? cp < -669
? cp < -699 ? 17 : 18
: 19
: cp < -619 ? 20 : 21
: cp < -445
? cp < -499
? cp < -542
? cp < -559
? cp < -577 ? 22 : 23
: 24
: cp < -512
? cp < -527 ? 25 : 26
: 27
: cp < -464
? cp < -475
? cp < -487 ? 28 : 29
: 30
: cp < -454 ? 31 : 32
: cp < -398
? cp < -420
? cp < -428
? cp < -436 ? 33 : 34
: 35
: cp < -405
? cp < -412 ? 36 : 37
: 38
: cp < -380
? cp < -386
? cp < -392 ? 39 : 40
: 41
: cp < -375 ? 42 : 43
: cp < -296
? cp < -325
? cp < -343
? cp < -355
? cp < -360
? cp < -365 ? 44 : 45
: 46
: cp < -347
? cp < -351 ? 47 : 48
: 49
: cp < -332
? cp < -335
? cp < -339 ? 50 : 51
: 52
: cp < -328 ? 53 : 54
: cp < -308
? cp < -316
? cp < -319
? cp < -322 ? 55 : 56
: 57
: cp < -311
? cp < -313 ? 58 : 59
: 60
: cp < -301
? cp < -303
? cp < -305 ? 61 : 62
: 63
: cp < -298 ? 64 : 65
: cp < -275
? cp < -284
? cp < -290
? cp < -292
? cp < -294 ? 66 : 67
: 68
: cp < -286
? cp < -288 ? 69 : 70
: 71
: cp < -279
? cp < -280
? cp < -282 ? 72 : 73
: 74
: cp < -277 ? 75 : 76
: cp < -268
? cp < -271
? cp < -272
? cp < -274 ? 77 : 78
: 79
: cp < -269 ? 80 : 81
: cp < -263
? cp < -265
? cp < -266 ? 82 : 83
: 84
: cp < -262 ? 85 : 86
: cp < -215
? cp < -237
? cp < -248
? cp < -254
? cp < -257
? cp < -258
? cp < -260 ? 87 : 88
: 89
: cp < -255
? cp < -256 ? 90 : 91
: 92
: cp < -250
? cp < -251
? cp < -252 ? 93 : 94
: 95
: cp < -249 ? 96 : 97
: cp < -242
? cp < -245
? cp < -246
? cp < -247 ? 98 : 99
: 100
: cp < -243
? cp < -244 ? 101 : 102
: 103
: cp < -239
? cp < -240
? cp < -241 ? 104 : 105
: 106
: cp < -238 ? 108 : 109
: cp < -226
? cp < -231
? cp < -234
? cp < -235
? cp < -236 ? 110 : 111
: 112
: cp < -232
? cp < -233 ? 113 : 115
: 116
: cp < -228
? cp < -229
? cp < -230 ? 117 : 118
: 120
: cp < -227 ? 121 : 122
: cp < -220
? cp < -223
? cp < -224
? cp < -225 ? 124 : 125
: 126
: cp < -221
? cp < -222 ? 128 : 129
: 130
: cp < -217
? cp < -218
? cp < -219 ? 132 : 133
: 135
: cp < -216 ? 136 : 138
: cp < -193
? cp < -204
? cp < -209
? cp < -212
? cp < -213
? cp < -214 ? 139 : 140
: 142
: cp < -210
? cp < -211 ? 143 : 145
: 147
: cp < -206
? cp < -207
? cp < -208 ? 148 : 150
: 151
: cp < -205 ? 153 : 154
: cp < -198
? cp < -201
? cp < -202
? cp < -203 ? 156 : 157
: 159
: cp < -199
? cp < -200 ? 161 : 162
: 164
: cp < -195
? cp < -196
? cp < -197 ? 165 : 167
: 169
: cp < -194 ? 170 : 172
: cp < -182
? cp < -187
? cp < -190
? cp < -191
? cp < -192 ? 174 : 175
: 177
: cp < -188
? cp < -189 ? 178 : 180
: 182
: cp < -184
? cp < -185
? cp < -186 ? 183 : 185
: 187
: cp < -183 ? 188 : 190
: cp < -177
? cp < -179
? cp < -180
? cp < -181 ? 192 : 193
: 195
: cp < -178 ? 197 : 198
: cp < -174
? cp < -175
? cp < -176 ? 200 : 202
: 203
: cp < -173 ? 205 : 207
: cp < -85
? cp < -128
? cp < -150
? cp < -161
? cp < -166
? cp < -169
? cp < -170
? cp < -171 ? 208 : 210
: 212
: cp < -167
? cp < -168 ? 214 : 215
: 217
: cp < -163
? cp < -164
? cp < -165 ? 219 : 220
: 222
: cp < -162 ? 224 : 225
: cp < -155
? cp < -158
? cp < -159
? cp < -160 ? 227 : 229
: 230
: cp < -156
? cp < -157 ? 232 : 234
: 235
: cp < -152
? cp < -153
? cp < -154 ? 237 : 239
: 241
: cp < -151 ? 242 : 244
: cp < -139
? cp < -144
? cp < -147
? cp < -148
? cp < -149 ? 246 : 247
: 249
: cp < -145
? cp < -146 ? 251 : 252
: 254
: cp < -141
? cp < -142
? cp < -143 ? 256 : 257
: 259
: cp < -140 ? 261 : 263
: cp < -133
? cp < -136
? cp < -137
? cp < -138 ? 264 : 266
: 268
: cp < -134
? cp < -135 ? 269 : 271
: 273
: cp < -130
? cp < -131
? cp < -132 ? 274 : 276
: 278
: cp < -129 ? 280 : 281
: cp < -106
? cp < -117
? cp < -122
? cp < -125
? cp < -126
? cp < -127 ? 283 : 285
: 286
: cp < -123
? cp < -124 ? 288 : 290
: 291
: cp < -119
? cp < -120
? cp < -121 ? 293 : 295
: 296
: cp < -118 ? 298 : 300
: cp < -111
? cp < -114
? cp < -115
? cp < -116 ? 302 : 303
: 305
: cp < -112
? cp < -113 ? 307 : 308
: 310
: cp < -108
? cp < -109
? cp < -110 ? 312 : 313
: 315
: cp < -107 ? 317 : 318
: cp < -95
? cp < -100
? cp < -103
? cp < -104
? cp < -105 ? 320 : 322
: 324
: cp < -101
? cp < -102 ? 325 : 327
: 329
: cp < -97
? cp < -98
? cp < -99 ? 330 : 332
: 334
: cp < -96 ? 335 : 337
: cp < -90
? cp < -92
? cp < -93
? cp < -94 ? 339 : 341
: 342
: cp < -91 ? 344 : 346
: cp < -87
? cp < -88
? cp < -89 ? 347 : 349
: 351
: cp < -86 ? 352 : 354
: cp < -42
? cp < -63
? cp < -74
? cp < -79
? cp < -82
? cp < -83
? cp < -84 ? 356 : 357
: 359
: cp < -80
? cp < -81 ? 361 : 363
: 364
: cp < -76
? cp < -77
? cp < -78 ? 366 : 368
: 369
: cp < -75 ? 371 : 373
: cp < -68
? cp < -71
? cp < -72
? cp < -73 ? 374 : 376
: 378
: cp < -69
? cp < -70 ? 380 : 381
: 383
: cp < -65
? cp < -66
? cp < -67 ? 385 : 386
: 388
: cp < -64 ? 390 : 391
: cp < -52
? cp < -57
? cp < -60
? cp < -61
? cp < -62 ? 393 : 395
: 396
: cp < -58
? cp < -59 ? 398 : 400
: 402
: cp < -54
? cp < -55
? cp < -56 ? 403 : 405
: 407
: cp < -53 ? 408 : 410
: cp < -47
? cp < -49
? cp < -50
? cp < -51 ? 412 : 413
: 415
: cp < -48 ? 417 : 418
: cp < -44
? cp < -45
? cp < -46 ? 420 : 422
: 424
: cp < -43 ? 425 : 427
: cp < -20
? cp < -31
? cp < -36
? cp < -39
? cp < -40
? cp < -41 ? 429 : 430
: 432
: cp < -37
? cp < -38 ? 434 : 435
: 437
: cp < -33
? cp < -34
? cp < -35 ? 439 : 441
: 442
: cp < -32 ? 444 : 446
: cp < -25
? cp < -28
? cp < -29
? cp < -30 ? 447 : 449
: 451
: cp < -26
? cp < -27 ? 452 : 454
: 456
: cp < -22
? cp < -23
? cp < -24 ? 457 : 459
: 461
: cp < -21 ? 463 : 464
: cp < -9
? cp < -14
? cp < -17
? cp < -18
? cp < -19 ? 466 : 468
: 469
: cp < -15
? cp < -16 ? 471 : 473
: 474
: cp < -11
? cp < -12
? cp < -13 ? 476 : 478
: 480
: cp < -10 ? 481 : 483
: cp < -4
? cp < -6
? cp < -7
? cp < -8 ? 485 : 486
: 488
: cp < -5 ? 490 : 491
: cp < -1
? cp < -2
? cp < -3 ? 493 : 495
: 496
: cp < 0 ? 498 : 500
: cp < 175
? cp < 88
? cp < 45
? cp < 23
? cp < 12
? cp < 7
? cp < 4
? cp < 3
? cp < 2 ? 502 : 503
: 505
: cp < 6
? cp < 5 ? 507 : 508
: 510
: cp < 10
? cp < 9
? cp < 8 ? 512 : 513
: 515
: cp < 11 ? 517 : 518
: cp < 18
? cp < 15
? cp < 14
? cp < 13 ? 520 : 522
: 524
: cp < 17
? cp < 16 ? 525 : 527
: 529
: cp < 21
? cp < 20
? cp < 19 ? 530 : 532
: 534
: cp < 22 ? 535 : 537
: cp < 34
? cp < 29
? cp < 26
? cp < 25
? cp < 24 ? 539 : 541
: 542
: cp < 28
? cp < 27 ? 544 : 546
: 547
: cp < 32
? cp < 31
? cp < 30 ? 549 : 551
: 552
: cp < 33 ? 554 : 556
: cp < 40
? cp < 37
? cp < 36
? cp < 35 ? 557 : 559
: 561
: cp < 39
? cp < 38 ? 563 : 564
: 566
: cp < 43
? cp < 42
? cp < 41 ? 568 : 569
: 571
: cp < 44 ? 573 : 574
: cp < 67
? cp < 56
? cp < 51
? cp < 48
? cp < 47
? cp < 46 ? 576 : 578
: 580
: cp < 50
? cp < 49 ? 581 : 583
: 585
: cp < 54
? cp < 53
? cp < 52 ? 586 : 588
: 590
: cp < 55 ? 591 : 593
: cp < 62
? cp < 59
? cp < 58
? cp < 57 ? 595 : 596
: 598
: cp < 61
? cp < 60 ? 600 : 602
: 603
: cp < 65
? cp < 64
? cp < 63 ? 605 : 607
: 608
: cp < 66 ? 610 : 612
: cp < 78
? cp < 73
? cp < 70
? cp < 69
? cp < 68 ? 613 : 615
: 617
: cp < 72
? cp < 71 ? 618 : 620
: 622
: cp < 76
? cp < 75
? cp < 74 ? 624 : 625
: 627
: cp < 77 ? 629 : 630
: cp < 83
? cp < 81
? cp < 80
? cp < 79 ? 632 : 634
: 635
: cp < 82 ? 637 : 639
: cp < 86
? cp < 85
? cp < 84 ? 641 : 642
: 644
: cp < 87 ? 646 : 647
: cp < 132
? cp < 110
? cp < 99
? cp < 94
? cp < 91
? cp < 90
? cp < 89 ? 649 : 651
: 652
: cp < 93
? cp < 92 ? 654 : 656
: 657
: cp < 97
? cp < 96
? cp < 95 ? 659 : 661
: 663
: cp < 98 ? 664 : 666
: cp < 105
? cp < 102
? cp < 101
? cp < 100 ? 668 : 669
: 671
: cp < 104
? cp < 103 ? 673 : 674
: 676
: cp < 108
? cp < 107
? cp < 106 ? 678 : 680
: 681
: cp < 109 ? 683 : 685
: cp < 121
? cp < 116
? cp < 113
? cp < 112
? cp < 111 ? 686 : 688
: 690
: cp < 115
? cp < 114 ? 691 : 693
: 695
: cp < 119
? cp < 118
? cp < 117 ? 696 : 698
: 700
: cp < 120 ? 702 : 703
: cp < 127
? cp < 124
? cp < 123
? cp < 122 ? 705 : 707
: 708
: cp < 126
? cp < 125 ? 710 : 712
: 713
: cp < 130
? cp < 129
? cp < 128 ? 715 : 717
: 718
: cp < 131 ? 720 : 722
: cp < 154
? cp < 143
? cp < 138
? cp < 135
? cp < 134
? cp < 133 ? 724 : 725
: 727
: cp < 137
? cp < 136 ? 729 : 730
: 732
: cp < 141
? cp < 140
? cp < 139 ? 734 : 735
: 737
: cp < 142 ? 739 : 741
: cp < 149
? cp < 146
? cp < 145
? cp < 144 ? 742 : 744
: 746
: cp < 148
? cp < 147 ? 747 : 749
: 751
: cp < 152
? cp < 151
? cp < 150 ? 752 : 754
: 756
: cp < 153 ? 757 : 759
: cp < 165
? cp < 160
? cp < 157
? cp < 156
? cp < 155 ? 761 : 763
: 764
: cp < 159
? cp < 158 ? 766 : 768
: 769
: cp < 163
? cp < 162
? cp < 161 ? 771 : 773
: 774
: cp < 164 ? 776 : 778
: cp < 170
? cp < 168
? cp < 167
? cp < 166 ? 779 : 781
: 783
: cp < 169 ? 784 : 786
: cp < 173
? cp < 172
? cp < 171 ? 788 : 790
: 791
: cp < 174 ? 793 : 795
: cp < 264
? cp < 219
? cp < 197
? cp < 186
? cp < 181
? cp < 178
? cp < 177
? cp < 176 ? 796 : 798
: 800
: cp < 180
? cp < 179 ? 801 : 803
: 805
: cp < 184
? cp < 183
? cp < 182 ? 806 : 808
: 810
: cp < 185 ? 811 : 813
: cp < 192
? cp < 189
? cp < 188
? cp < 187 ? 815 : 816
: 818
: cp < 191
? cp < 190 ? 820 : 821
: 823
: cp < 195
? cp < 194
? cp < 193 ? 824 : 826
: 828
: cp < 196 ? 829 : 831
: cp < 208
? cp < 203
? cp < 200
? cp < 199
? cp < 198 ? 833 : 834
: 836
: cp < 202
? cp < 201 ? 837 : 839
: 841
: cp < 206
? cp < 205
? cp < 204 ? 842 : 844
: 845
: cp < 207 ? 847 : 848
: cp < 214
? cp < 211
? cp < 210
? cp < 209 ? 850 : 851
: 853
: cp < 213
? cp < 212 ? 855 : 856
: 858
: cp < 217
? cp < 216
? cp < 215 ? 859 : 860
: 862
: cp < 218 ? 863 : 865
: cp < 241
? cp < 230
? cp < 225
? cp < 222
? cp < 221
? cp < 220 ? 866 : 868
: 869
: cp < 224
? cp < 223 ? 870 : 872
: 873
: cp < 228
? cp < 227
? cp < 226 ? 874 : 876
: 877
: cp < 229 ? 878 : 880
: cp < 236
? cp < 233
? cp < 232
? cp < 231 ? 881 : 882
: 883
: cp < 235
? cp < 234 ? 885 : 886
: 887
: cp < 239
? cp < 238
? cp < 237 ? 888 : 889
: 890
: cp < 240 ? 892 : 893
: cp < 252
? cp < 247
? cp < 244
? cp < 243
? cp < 242 ? 894 : 895
: 896
: cp < 246
? cp < 245 ? 897 : 898
: 899
: cp < 250
? cp < 249
? cp < 248 ? 900 : 901
: 902
: cp < 251 ? 903 : 904
: cp < 258
? cp < 256
? cp < 254
? cp < 253 ? 905 : 906
: 907
: cp < 257 ? 908 : 909
: cp < 262
? cp < 260
? cp < 259 ? 910 : 911
: 912
: cp < 263 ? 913 : 914
: cp < 377
? cp < 303
? cp < 281
? cp < 273
? cp < 268
? cp < 267
? cp < 265 ? 915 : 916
: 917
: cp < 271
? cp < 270 ? 918 : 919
: 920
: cp < 277
? cp < 276
? cp < 274 ? 921 : 922
: 923
: cp < 279 ? 924 : 925
: cp < 292
? cp < 286
? cp < 284
? cp < 282 ? 926 : 927
: 928
: cp < 290
? cp < 288 ? 929 : 930
: 931
: cp < 298
? cp < 296
? cp < 294 ? 932 : 933
: 934
: cp < 300 ? 935 : 936
: cp < 334
? cp < 318
? cp < 310
? cp < 307
? cp < 305 ? 937 : 938
: 939
: cp < 315
? cp < 313 ? 940 : 941
: 942
: cp < 327
? cp < 324
? cp < 321 ? 943 : 944
: 945
: cp < 330 ? 946 : 947
: cp < 353
? cp < 345
? cp < 341
? cp < 337 ? 948 : 949
: 950
: cp < 349 ? 951 : 952
: cp < 367
? cp < 362
? cp < 357 ? 953 : 954
: 955
: cp < 372 ? 956 : 957
: cp < 621
? cp < 456
? cp < 414
? cp < 394
? cp < 388
? cp < 382 ? 958 : 959
: 960
: cp < 407
? cp < 400 ? 961 : 962
: 963
: cp < 438
? cp < 430
? cp < 422 ? 964 : 965
: 966
: cp < 447 ? 967 : 968
: cp < 529
? cp < 489
? cp < 477
? cp < 466 ? 969 : 970
: 971
: cp < 514
? cp < 501 ? 972 : 973
: 974
: cp < 579
? cp < 561
? cp < 544 ? 975 : 976
: 977
: cp < 599 ? 978 : 979
: cp < 1144
? cp < 813
? cp < 701
? cp < 671
? cp < 645 ? 980 : 981
: 982
: cp < 771
? cp < 734 ? 983 : 984
: 985
: cp < 979
? cp < 915
? cp < 860 ? 986 : 987
: 988
: cp < 1054 ? 989 : 990
: cp < 2101
? cp < 1562
? cp < 1389
? cp < 1253 ? 991 : 992
: 993
: cp < 1789 ? 994 : 995
: cp < 4648
? cp < 3290
? cp < 2558 ? 996 : 997
: 998
: cp < 8045 ? 999 : 1000) Generated from continuing the previous comment's script. const arr = [...CPs];
function bin(start, end, depth = 1) {
const indent = " ".repeat(depth);
const mid = (start + end) >> 1;
return `cp < ${arr[mid][0] + 1}` + (start == mid ? ` ? ${arr[mid][1]} : ${(arr[end] || [,1000])[1]}` : `
${indent}? ${bin(start, mid, depth + 1)}
${indent}: ${mid + 1 < end ? bin(mid + 1, end, depth + 1) : arr[end][1]}`);
}
`win = 0.1 * (${bin(0, arr.length)})` |
Yuck |
Just a sanity check that binary search is faster than sequential… const test = winPct => {
const start = performance.now();
for (let i = 0; i < 1000; i++) {
for (let j = -12800; j <= 12800; j++) {
winPct(j);
}
}
return performance.now() - start;
}
[["sequential", cp => .1 * (cp < -8043 ? 0 : cp < -4646 ? 1 : cp < -3288 ? 2 : cp < -2556 ? 3 : cp < -2099 ? 4 : cp < -1787 ? 5 : cp < -1560 ? 6 : cp < -1387 ? 7 : cp < -1251 ? 8 : cp < -1142 ? 9 : cp < -1052 ? 10 : cp < -977 ? 11 : cp < -913 ? 12 : cp < -858 ? 13 : cp < -811 ? 14 : cp < -769 ? 15 : cp < -732 ? 16 : cp < -699 ? 17 : cp < -669 ? 18 : cp < -643 ? 19 : cp < -619 ? 20 : cp < -597 ? 21 : cp < -577 ? 22 : cp < -559 ? 23 : cp < -542 ? 24 : cp < -527 ? 25 : cp < -512 ? 26 : cp < -499 ? 27 : cp < -487 ? 28 : cp < -475 ? 29 : cp < -464 ? 30 : cp < -454 ? 31 : cp < -445 ? 32 : cp < -436 ? 33 : cp < -428 ? 34 : cp < -420 ? 35 : cp < -412 ? 36 : cp < -405 ? 37 : cp < -398 ? 38 : cp < -392 ? 39 : cp < -386 ? 40 : cp < -380 ? 41 : cp < -375 ? 42 : cp < -370 ? 43 : cp < -365 ? 44 : cp < -360 ? 45 : cp < -355 ? 46 : cp < -351 ? 47 : cp < -347 ? 48 : cp < -343 ? 49 : cp < -339 ? 50 : cp < -335 ? 51 : cp < -332 ? 52 : cp < -328 ? 53 : cp < -325 ? 54 : cp < -322 ? 55 : cp < -319 ? 56 : cp < -316 ? 57 : cp < -313 ? 58 : cp < -311 ? 59 : cp < -308 ? 60 : cp < -305 ? 61 : cp < -303 ? 62 : cp < -301 ? 63 : cp < -298 ? 64 : cp < -296 ? 65 : cp < -294 ? 66 : cp < -292 ? 67 : cp < -290 ? 68 : cp < -288 ? 69 : cp < -286 ? 70 : cp < -284 ? 71 : cp < -282 ? 72 : cp < -280 ? 73 : cp < -279 ? 74 : cp < -277 ? 75 : cp < -275 ? 76 : cp < -274 ? 77 : cp < -272 ? 78 : cp < -271 ? 79 : cp < -269 ? 80 : cp < -268 ? 81 : cp < -266 ? 82 : cp < -265 ? 83 : cp < -263 ? 84 : cp < -262 ? 85 : cp < -261 ? 86 : cp < -260 ? 87 : cp < -258 ? 88 : cp < -257 ? 89 : cp < -256 ? 90 : cp < -255 ? 91 : cp < -254 ? 92 : cp < -252 ? 93 : cp < -251 ? 94 : cp < -250 ? 95 : cp < -249 ? 96 : cp < -248 ? 97 : cp < -247 ? 98 : cp < -246 ? 99 : cp < -245 ? 100 : cp < -244 ? 101 : cp < -243 ? 102 : cp < -242 ? 103 : cp < -241 ? 104 : cp < -240 ? 105 : cp < -239 ? 106 : cp < -238 ? 108 : cp < -237 ? 109 : cp < -236 ? 110 : cp < -235 ? 111 : cp < -234 ? 112 : cp < -233 ? 113 : cp < -232 ? 115 : cp < -231 ? 116 : cp < -230 ? 117 : cp < -229 ? 118 : cp < -228 ? 120 : cp < -227 ? 121 : cp < -226 ? 122 : cp < -225 ? 124 : cp < -224 ? 125 : cp < -223 ? 126 : cp < -222 ? 128 : cp < -221 ? 129 : cp < -220 ? 130 : cp < -219 ? 132 : cp < -218 ? 133 : cp < -217 ? 135 : cp < -216 ? 136 : cp < -215 ? 138 : cp < -214 ? 139 : cp < -213 ? 140 : cp < -212 ? 142 : cp < -211 ? 143 : cp < -210 ? 145 : cp < -209 ? 147 : cp < -208 ? 148 : cp < -207 ? 150 : cp < -206 ? 151 : cp < -205 ? 153 : cp < -204 ? 154 : cp < -203 ? 156 : cp < -202 ? 157 : cp < -201 ? 159 : cp < -200 ? 161 : cp < -199 ? 162 : cp < -198 ? 164 : cp < -197 ? 165 : cp < -196 ? 167 : cp < -195 ? 169 : cp < -194 ? 170 : cp < -193 ? 172 : cp < -192 ? 174 : cp < -191 ? 175 : cp < -190 ? 177 : cp < -189 ? 178 : cp < -188 ? 180 : cp < -187 ? 182 : cp < -186 ? 183 : cp < -185 ? 185 : cp < -184 ? 187 : cp < -183 ? 188 : cp < -182 ? 190 : cp < -181 ? 192 : cp < -180 ? 193 : cp < -179 ? 195 : cp < -178 ? 197 : cp < -177 ? 198 : cp < -176 ? 200 : cp < -175 ? 202 : cp < -174 ? 203 : cp < -173 ? 205 : cp < -172 ? 207 : cp < -171 ? 208 : cp < -170 ? 210 : cp < -169 ? 212 : cp < -168 ? 214 : cp < -167 ? 215 : cp < -166 ? 217 : cp < -165 ? 219 : cp < -164 ? 220 : cp < -163 ? 222 : cp < -162 ? 224 : cp < -161 ? 225 : cp < -160 ? 227 : cp < -159 ? 229 : cp < -158 ? 230 : cp < -157 ? 232 : cp < -156 ? 234 : cp < -155 ? 235 : cp < -154 ? 237 : cp < -153 ? 239 : cp < -152 ? 241 : cp < -151 ? 242 : cp < -150 ? 244 : cp < -149 ? 246 : cp < -148 ? 247 : cp < -147 ? 249 : cp < -146 ? 251 : cp < -145 ? 252 : cp < -144 ? 254 : cp < -143 ? 256 : cp < -142 ? 257 : cp < -141 ? 259 : cp < -140 ? 261 : cp < -139 ? 263 : cp < -138 ? 264 : cp < -137 ? 266 : cp < -136 ? 268 : cp < -135 ? 269 : cp < -134 ? 271 : cp < -133 ? 273 : cp < -132 ? 274 : cp < -131 ? 276 : cp < -130 ? 278 : cp < -129 ? 280 : cp < -128 ? 281 : cp < -127 ? 283 : cp < -126 ? 285 : cp < -125 ? 286 : cp < -124 ? 288 : cp < -123 ? 290 : cp < -122 ? 291 : cp < -121 ? 293 : cp < -120 ? 295 : cp < -119 ? 296 : cp < -118 ? 298 : cp < -117 ? 300 : cp < -116 ? 302 : cp < -115 ? 303 : cp < -114 ? 305 : cp < -113 ? 307 : cp < -112 ? 308 : cp < -111 ? 310 : cp < -110 ? 312 : cp < -109 ? 313 : cp < -108 ? 315 : cp < -107 ? 317 : cp < -106 ? 318 : cp < -105 ? 320 : cp < -104 ? 322 : cp < -103 ? 324 : cp < -102 ? 325 : cp < -101 ? 327 : cp < -100 ? 329 : cp < -99 ? 330 : cp < -98 ? 332 : cp < -97 ? 334 : cp < -96 ? 335 : cp < -95 ? 337 : cp < -94 ? 339 : cp < -93 ? 341 : cp < -92 ? 342 : cp < -91 ? 344 : cp < -90 ? 346 : cp < -89 ? 347 : cp < -88 ? 349 : cp < -87 ? 351 : cp < -86 ? 352 : cp < -85 ? 354 : cp < -84 ? 356 : cp < -83 ? 357 : cp < -82 ? 359 : cp < -81 ? 361 : cp < -80 ? 363 : cp < -79 ? 364 : cp < -78 ? 366 : cp < -77 ? 368 : cp < -76 ? 369 : cp < -75 ? 371 : cp < -74 ? 373 : cp < -73 ? 374 : cp < -72 ? 376 : cp < -71 ? 378 : cp < -70 ? 380 : cp < -69 ? 381 : cp < -68 ? 383 : cp < -67 ? 385 : cp < -66 ? 386 : cp < -65 ? 388 : cp < -64 ? 390 : cp < -63 ? 391 : cp < -62 ? 393 : cp < -61 ? 395 : cp < -60 ? 396 : cp < -59 ? 398 : cp < -58 ? 400 : cp < -57 ? 402 : cp < -56 ? 403 : cp < -55 ? 405 : cp < -54 ? 407 : cp < -53 ? 408 : cp < -52 ? 410 : cp < -51 ? 412 : cp < -50 ? 413 : cp < -49 ? 415 : cp < -48 ? 417 : cp < -47 ? 418 : cp < -46 ? 420 : cp < -45 ? 422 : cp < -44 ? 424 : cp < -43 ? 425 : cp < -42 ? 427 : cp < -41 ? 429 : cp < -40 ? 430 : cp < -39 ? 432 : cp < -38 ? 434 : cp < -37 ? 435 : cp < -36 ? 437 : cp < -35 ? 439 : cp < -34 ? 441 : cp < -33 ? 442 : cp < -32 ? 444 : cp < -31 ? 446 : cp < -30 ? 447 : cp < -29 ? 449 : cp < -28 ? 451 : cp < -27 ? 452 : cp < -26 ? 454 : cp < -25 ? 456 : cp < -24 ? 457 : cp < -23 ? 459 : cp < -22 ? 461 : cp < -21 ? 463 : cp < -20 ? 464 : cp < -19 ? 466 : cp < -18 ? 468 : cp < -17 ? 469 : cp < -16 ? 471 : cp < -15 ? 473 : cp < -14 ? 474 : cp < -13 ? 476 : cp < -12 ? 478 : cp < -11 ? 480 : cp < -10 ? 481 : cp < -9 ? 483 : cp < -8 ? 485 : cp < -7 ? 486 : cp < -6 ? 488 : cp < -5 ? 490 : cp < -4 ? 491 : cp < -3 ? 493 : cp < -2 ? 495 : cp < -1 ? 496 : cp < 0 ? 498 : cp < 1 ? 500 : cp < 2 ? 502 : cp < 3 ? 503 : cp < 4 ? 505 : cp < 5 ? 507 : cp < 6 ? 508 : cp < 7 ? 510 : cp < 8 ? 512 : cp < 9 ? 513 : cp < 10 ? 515 : cp < 11 ? 517 : cp < 12 ? 518 : cp < 13 ? 520 : cp < 14 ? 522 : cp < 15 ? 524 : cp < 16 ? 525 : cp < 17 ? 527 : cp < 18 ? 529 : cp < 19 ? 530 : cp < 20 ? 532 : cp < 21 ? 534 : cp < 22 ? 535 : cp < 23 ? 537 : cp < 24 ? 539 : cp < 25 ? 541 : cp < 26 ? 542 : cp < 27 ? 544 : cp < 28 ? 546 : cp < 29 ? 547 : cp < 30 ? 549 : cp < 31 ? 551 : cp < 32 ? 552 : cp < 33 ? 554 : cp < 34 ? 556 : cp < 35 ? 557 : cp < 36 ? 559 : cp < 37 ? 561 : cp < 38 ? 563 : cp < 39 ? 564 : cp < 40 ? 566 : cp < 41 ? 568 : cp < 42 ? 569 : cp < 43 ? 571 : cp < 44 ? 573 : cp < 45 ? 574 : cp < 46 ? 576 : cp < 47 ? 578 : cp < 48 ? 580 : cp < 49 ? 581 : cp < 50 ? 583 : cp < 51 ? 585 : cp < 52 ? 586 : cp < 53 ? 588 : cp < 54 ? 590 : cp < 55 ? 591 : cp < 56 ? 593 : cp < 57 ? 595 : cp < 58 ? 596 : cp < 59 ? 598 : cp < 60 ? 600 : cp < 61 ? 602 : cp < 62 ? 603 : cp < 63 ? 605 : cp < 64 ? 607 : cp < 65 ? 608 : cp < 66 ? 610 : cp < 67 ? 612 : cp < 68 ? 613 : cp < 69 ? 615 : cp < 70 ? 617 : cp < 71 ? 618 : cp < 72 ? 620 : cp < 73 ? 622 : cp < 74 ? 624 : cp < 75 ? 625 : cp < 76 ? 627 : cp < 77 ? 629 : cp < 78 ? 630 : cp < 79 ? 632 : cp < 80 ? 634 : cp < 81 ? 635 : cp < 82 ? 637 : cp < 83 ? 639 : cp < 84 ? 641 : cp < 85 ? 642 : cp < 86 ? 644 : cp < 87 ? 646 : cp < 88 ? 647 : cp < 89 ? 649 : cp < 90 ? 651 : cp < 91 ? 652 : cp < 92 ? 654 : cp < 93 ? 656 : cp < 94 ? 657 : cp < 95 ? 659 : cp < 96 ? 661 : cp < 97 ? 663 : cp < 98 ? 664 : cp < 99 ? 666 : cp < 100 ? 668 : cp < 101 ? 669 : cp < 102 ? 671 : cp < 103 ? 673 : cp < 104 ? 674 : cp < 105 ? 676 : cp < 106 ? 678 : cp < 107 ? 680 : cp < 108 ? 681 : cp < 109 ? 683 : cp < 110 ? 685 : cp < 111 ? 686 : cp < 112 ? 688 : cp < 113 ? 690 : cp < 114 ? 691 : cp < 115 ? 693 : cp < 116 ? 695 : cp < 117 ? 696 : cp < 118 ? 698 : cp < 119 ? 700 : cp < 120 ? 702 : cp < 121 ? 703 : cp < 122 ? 705 : cp < 123 ? 707 : cp < 124 ? 708 : cp < 125 ? 710 : cp < 126 ? 712 : cp < 127 ? 713 : cp < 128 ? 715 : cp < 129 ? 717 : cp < 130 ? 718 : cp < 131 ? 720 : cp < 132 ? 722 : cp < 133 ? 724 : cp < 134 ? 725 : cp < 135 ? 727 : cp < 136 ? 729 : cp < 137 ? 730 : cp < 138 ? 732 : cp < 139 ? 734 : cp < 140 ? 735 : cp < 141 ? 737 : cp < 142 ? 739 : cp < 143 ? 741 : cp < 144 ? 742 : cp < 145 ? 744 : cp < 146 ? 746 : cp < 147 ? 747 : cp < 148 ? 749 : cp < 149 ? 751 : cp < 150 ? 752 : cp < 151 ? 754 : cp < 152 ? 756 : cp < 153 ? 757 : cp < 154 ? 759 : cp < 155 ? 761 : cp < 156 ? 763 : cp < 157 ? 764 : cp < 158 ? 766 : cp < 159 ? 768 : cp < 160 ? 769 : cp < 161 ? 771 : cp < 162 ? 773 : cp < 163 ? 774 : cp < 164 ? 776 : cp < 165 ? 778 : cp < 166 ? 779 : cp < 167 ? 781 : cp < 168 ? 783 : cp < 169 ? 784 : cp < 170 ? 786 : cp < 171 ? 788 : cp < 172 ? 790 : cp < 173 ? 791 : cp < 174 ? 793 : cp < 175 ? 795 : cp < 176 ? 796 : cp < 177 ? 798 : cp < 178 ? 800 : cp < 179 ? 801 : cp < 180 ? 803 : cp < 181 ? 805 : cp < 182 ? 806 : cp < 183 ? 808 : cp < 184 ? 810 : cp < 185 ? 811 : cp < 186 ? 813 : cp < 187 ? 815 : cp < 188 ? 816 : cp < 189 ? 818 : cp < 190 ? 820 : cp < 191 ? 821 : cp < 192 ? 823 : cp < 193 ? 824 : cp < 194 ? 826 : cp < 195 ? 828 : cp < 196 ? 829 : cp < 197 ? 831 : cp < 198 ? 833 : cp < 199 ? 834 : cp < 200 ? 836 : cp < 201 ? 837 : cp < 202 ? 839 : cp < 203 ? 841 : cp < 204 ? 842 : cp < 205 ? 844 : cp < 206 ? 845 : cp < 207 ? 847 : cp < 208 ? 848 : cp < 209 ? 850 : cp < 210 ? 851 : cp < 211 ? 853 : cp < 212 ? 855 : cp < 213 ? 856 : cp < 214 ? 858 : cp < 215 ? 859 : cp < 216 ? 860 : cp < 217 ? 862 : cp < 218 ? 863 : cp < 219 ? 865 : cp < 220 ? 866 : cp < 221 ? 868 : cp < 222 ? 869 : cp < 223 ? 870 : cp < 224 ? 872 : cp < 225 ? 873 : cp < 226 ? 874 : cp < 227 ? 876 : cp < 228 ? 877 : cp < 229 ? 878 : cp < 230 ? 880 : cp < 231 ? 881 : cp < 232 ? 882 : cp < 233 ? 883 : cp < 234 ? 885 : cp < 235 ? 886 : cp < 236 ? 887 : cp < 237 ? 888 : cp < 238 ? 889 : cp < 239 ? 890 : cp < 240 ? 892 : cp < 241 ? 893 : cp < 242 ? 894 : cp < 243 ? 895 : cp < 244 ? 896 : cp < 245 ? 897 : cp < 246 ? 898 : cp < 247 ? 899 : cp < 248 ? 900 : cp < 249 ? 901 : cp < 250 ? 902 : cp < 251 ? 903 : cp < 252 ? 904 : cp < 253 ? 905 : cp < 254 ? 906 : cp < 256 ? 907 : cp < 257 ? 908 : cp < 258 ? 909 : cp < 259 ? 910 : cp < 260 ? 911 : cp < 262 ? 912 : cp < 263 ? 913 : cp < 264 ? 914 : cp < 265 ? 915 : cp < 267 ? 916 : cp < 268 ? 917 : cp < 270 ? 918 : cp < 271 ? 919 : cp < 273 ? 920 : cp < 274 ? 921 : cp < 276 ? 922 : cp < 277 ? 923 : cp < 279 ? 924 : cp < 281 ? 925 : cp < 282 ? 926 : cp < 284 ? 927 : cp < 286 ? 928 : cp < 288 ? 929 : cp < 290 ? 930 : cp < 292 ? 931 : cp < 294 ? 932 : cp < 296 ? 933 : cp < 298 ? 934 : cp < 300 ? 935 : cp < 303 ? 936 : cp < 305 ? 937 : cp < 307 ? 938 : cp < 310 ? 939 : cp < 313 ? 940 : cp < 315 ? 941 : cp < 318 ? 942 : cp < 321 ? 943 : cp < 324 ? 944 : cp < 327 ? 945 : cp < 330 ? 946 : cp < 334 ? 947 : cp < 337 ? 948 : cp < 341 ? 949 : cp < 345 ? 950 : cp < 349 ? 951 : cp < 353 ? 952 : cp < 357 ? 953 : cp < 362 ? 954 : cp < 367 ? 955 : cp < 372 ? 956 : cp < 377 ? 957 : cp < 382 ? 958 : cp < 388 ? 959 : cp < 394 ? 960 : cp < 400 ? 961 : cp < 407 ? 962 : cp < 414 ? 963 : cp < 422 ? 964 : cp < 430 ? 965 : cp < 438 ? 966 : cp < 447 ? 967 : cp < 456 ? 968 : cp < 466 ? 969 : cp < 477 ? 970 : cp < 489 ? 971 : cp < 501 ? 972 : cp < 514 ? 973 : cp < 529 ? 974 : cp < 544 ? 975 : cp < 561 ? 976 : cp < 579 ? 977 : cp < 599 ? 978 : cp < 621 ? 979 : cp < 645 ? 980 : cp < 671 ? 981 : cp < 701 ? 982 : cp < 734 ? 983 : cp < 771 ? 984 : cp < 813 ? 985 : cp < 860 ? 986 : cp < 915 ? 987 : cp < 979 ? 988 : cp < 1054 ? 989 : cp < 1144 ? 990 : cp < 1253 ? 991 : cp < 1389 ? 992 : cp < 1562 ? 993 : cp < 1789 ? 994 : cp < 2101 ? 995 : cp < 2558 ? 996 : cp < 3290 ? 997 : cp < 4648 ? 998 : cp < 8045 ? 999 : 1000)],
["binary", cp => .1 * (cp < 1 ? cp < -172 ? cp < -261 ? cp < -370 ? cp < -597 ? cp < -1052 ? cp < -1787 ? cp < -3288 ? cp < -4646 ? cp < -8043 ? 0 : 1 : 2 : cp < -2099 ? cp < -2556 ? 3 : 4 : 5 : cp < -1251 ? cp < -1387 ? cp < -1560 ? 6 : 7 : 8 : cp < -1142 ? 9 : 10 : cp < -732 ? cp < -858 ? cp < -913 ? cp < -977 ? 11 : 12 : 13 : cp < -769 ? cp < -811 ? 14 : 15 : 16 : cp < -643 ? cp < -669 ? cp < -699 ? 17 : 18 : 19 : cp < -619 ? 20 : 21 : cp < -445 ? cp < -499 ? cp < -542 ? cp < -559 ? cp < -577 ? 22 : 23 : 24 : cp < -512 ? cp < -527 ? 25 : 26 : 27 : cp < -464 ? cp < -475 ? cp < -487 ? 28 : 29 : 30 : cp < -454 ? 31 : 32 : cp < -398 ? cp < -420 ? cp < -428 ? cp < -436 ? 33 : 34 : 35 : cp < -405 ? cp < -412 ? 36 : 37 : 38 : cp < -380 ? cp < -386 ? cp < -392 ? 39 : 40 : 41 : cp < -375 ? 42 : 43 : cp < -296 ? cp < -325 ? cp < -343 ? cp < -355 ? cp < -360 ? cp < -365 ? 44 : 45 : 46 : cp < -347 ? cp < -351 ? 47 : 48 : 49 : cp < -332 ? cp < -335 ? cp < -339 ? 50 : 51 : 52 : cp < -328 ? 53 : 54 : cp < -308 ? cp < -316 ? cp < -319 ? cp < -322 ? 55 : 56 : 57 : cp < -311 ? cp < -313 ? 58 : 59 : 60 : cp < -301 ? cp < -303 ? cp < -305 ? 61 : 62 : 63 : cp < -298 ? 64 : 65 : cp < -275 ? cp < -284 ? cp < -290 ? cp < -292 ? cp < -294 ? 66 : 67 : 68 : cp < -286 ? cp < -288 ? 69 : 70 : 71 : cp < -279 ? cp < -280 ? cp < -282 ? 72 : 73 : 74 : cp < -277 ? 75 : 76 : cp < -268 ? cp < -271 ? cp < -272 ? cp < -274 ? 77 : 78 : 79 : cp < -269 ? 80 : 81 : cp < -263 ? cp < -265 ? cp < -266 ? 82 : 83 : 84 : cp < -262 ? 85 : 86 : cp < -215 ? cp < -237 ? cp < -248 ? cp < -254 ? cp < -257 ? cp < -258 ? cp < -260 ? 87 : 88 : 89 : cp < -255 ? cp < -256 ? 90 : 91 : 92 : cp < -250 ? cp < -251 ? cp < -252 ? 93 : 94 : 95 : cp < -249 ? 96 : 97 : cp < -242 ? cp < -245 ? cp < -246 ? cp < -247 ? 98 : 99 : 100 : cp < -243 ? cp < -244 ? 101 : 102 : 103 : cp < -239 ? cp < -240 ? cp < -241 ? 104 : 105 : 106 : cp < -238 ? 108 : 109 : cp < -226 ? cp < -231 ? cp < -234 ? cp < -235 ? cp < -236 ? 110 : 111 : 112 : cp < -232 ? cp < -233 ? 113 : 115 : 116 : cp < -228 ? cp < -229 ? cp < -230 ? 117 : 118 : 120 : cp < -227 ? 121 : 122 : cp < -220 ? cp < -223 ? cp < -224 ? cp < -225 ? 124 : 125 : 126 : cp < -221 ? cp < -222 ? 128 : 129 : 130 : cp < -217 ? cp < -218 ? cp < -219 ? 132 : 133 : 135 : cp < -216 ? 136 : 138 : cp < -193 ? cp < -204 ? cp < -209 ? cp < -212 ? cp < -213 ? cp < -214 ? 139 : 140 : 142 : cp < -210 ? cp < -211 ? 143 : 145 : 147 : cp < -206 ? cp < -207 ? cp < -208 ? 148 : 150 : 151 : cp < -205 ? 153 : 154 : cp < -198 ? cp < -201 ? cp < -202 ? cp < -203 ? 156 : 157 : 159 : cp < -199 ? cp < -200 ? 161 : 162 : 164 : cp < -195 ? cp < -196 ? cp < -197 ? 165 : 167 : 169 : cp < -194 ? 170 : 172 : cp < -182 ? cp < -187 ? cp < -190 ? cp < -191 ? cp < -192 ? 174 : 175 : 177 : cp < -188 ? cp < -189 ? 178 : 180 : 182 : cp < -184 ? cp < -185 ? cp < -186 ? 183 : 185 : 187 : cp < -183 ? 188 : 190 : cp < -177 ? cp < -179 ? cp < -180 ? cp < -181 ? 192 : 193 : 195 : cp < -178 ? 197 : 198 : cp < -174 ? cp < -175 ? cp < -176 ? 200 : 202 : 203 : cp < -173 ? 205 : 207 : cp < -85 ? cp < -128 ? cp < -150 ? cp < -161 ? cp < -166 ? cp < -169 ? cp < -170 ? cp < -171 ? 208 : 210 : 212 : cp < -167 ? cp < -168 ? 214 : 215 : 217 : cp < -163 ? cp < -164 ? cp < -165 ? 219 : 220 : 222 : cp < -162 ? 224 : 225 : cp < -155 ? cp < -158 ? cp < -159 ? cp < -160 ? 227 : 229 : 230 : cp < -156 ? cp < -157 ? 232 : 234 : 235 : cp < -152 ? cp < -153 ? cp < -154 ? 237 : 239 : 241 : cp < -151 ? 242 : 244 : cp < -139 ? cp < -144 ? cp < -147 ? cp < -148 ? cp < -149 ? 246 : 247 : 249 : cp < -145 ? cp < -146 ? 251 : 252 : 254 : cp < -141 ? cp < -142 ? cp < -143 ? 256 : 257 : 259 : cp < -140 ? 261 : 263 : cp < -133 ? cp < -136 ? cp < -137 ? cp < -138 ? 264 : 266 : 268 : cp < -134 ? cp < -135 ? 269 : 271 : 273 : cp < -130 ? cp < -131 ? cp < -132 ? 274 : 276 : 278 : cp < -129 ? 280 : 281 : cp < -106 ? cp < -117 ? cp < -122 ? cp < -125 ? cp < -126 ? cp < -127 ? 283 : 285 : 286 : cp < -123 ? cp < -124 ? 288 : 290 : 291 : cp < -119 ? cp < -120 ? cp < -121 ? 293 : 295 : 296 : cp < -118 ? 298 : 300 : cp < -111 ? cp < -114 ? cp < -115 ? cp < -116 ? 302 : 303 : 305 : cp < -112 ? cp < -113 ? 307 : 308 : 310 : cp < -108 ? cp < -109 ? cp < -110 ? 312 : 313 : 315 : cp < -107 ? 317 : 318 : cp < -95 ? cp < -100 ? cp < -103 ? cp < -104 ? cp < -105 ? 320 : 322 : 324 : cp < -101 ? cp < -102 ? 325 : 327 : 329 : cp < -97 ? cp < -98 ? cp < -99 ? 330 : 332 : 334 : cp < -96 ? 335 : 337 : cp < -90 ? cp < -92 ? cp < -93 ? cp < -94 ? 339 : 341 : 342 : cp < -91 ? 344 : 346 : cp < -87 ? cp < -88 ? cp < -89 ? 347 : 349 : 351 : cp < -86 ? 352 : 354 : cp < -42 ? cp < -63 ? cp < -74 ? cp < -79 ? cp < -82 ? cp < -83 ? cp < -84 ? 356 : 357 : 359 : cp < -80 ? cp < -81 ? 361 : 363 : 364 : cp < -76 ? cp < -77 ? cp < -78 ? 366 : 368 : 369 : cp < -75 ? 371 : 373 : cp < -68 ? cp < -71 ? cp < -72 ? cp < -73 ? 374 : 376 : 378 : cp < -69 ? cp < -70 ? 380 : 381 : 383 : cp < -65 ? cp < -66 ? cp < -67 ? 385 : 386 : 388 : cp < -64 ? 390 : 391 : cp < -52 ? cp < -57 ? cp < -60 ? cp < -61 ? cp < -62 ? 393 : 395 : 396 : cp < -58 ? cp < -59 ? 398 : 400 : 402 : cp < -54 ? cp < -55 ? cp < -56 ? 403 : 405 : 407 : cp < -53 ? 408 : 410 : cp < -47 ? cp < -49 ? cp < -50 ? cp < -51 ? 412 : 413 : 415 : cp < -48 ? 417 : 418 : cp < -44 ? cp < -45 ? cp < -46 ? 420 : 422 : 424 : cp < -43 ? 425 : 427 : cp < -20 ? cp < -31 ? cp < -36 ? cp < -39 ? cp < -40 ? cp < -41 ? 429 : 430 : 432 : cp < -37 ? cp < -38 ? 434 : 435 : 437 : cp < -33 ? cp < -34 ? cp < -35 ? 439 : 441 : 442 : cp < -32 ? 444 : 446 : cp < -25 ? cp < -28 ? cp < -29 ? cp < -30 ? 447 : 449 : 451 : cp < -26 ? cp < -27 ? 452 : 454 : 456 : cp < -22 ? cp < -23 ? cp < -24 ? 457 : 459 : 461 : cp < -21 ? 463 : 464 : cp < -9 ? cp < -14 ? cp < -17 ? cp < -18 ? cp < -19 ? 466 : 468 : 469 : cp < -15 ? cp < -16 ? 471 : 473 : 474 : cp < -11 ? cp < -12 ? cp < -13 ? 476 : 478 : 480 : cp < -10 ? 481 : 483 : cp < -4 ? cp < -6 ? cp < -7 ? cp < -8 ? 485 : 486 : 488 : cp < -5 ? 490 : 491 : cp < -1 ? cp < -2 ? cp < -3 ? 493 : 495 : 496 : cp < 0 ? 498 : 500 : cp < 175 ? cp < 88 ? cp < 45 ? cp < 23 ? cp < 12 ? cp < 7 ? cp < 4 ? cp < 3 ? cp < 2 ? 502 : 503 : 505 : cp < 6 ? cp < 5 ? 507 : 508 : 510 : cp < 10 ? cp < 9 ? cp < 8 ? 512 : 513 : 515 : cp < 11 ? 517 : 518 : cp < 18 ? cp < 15 ? cp < 14 ? cp < 13 ? 520 : 522 : 524 : cp < 17 ? cp < 16 ? 525 : 527 : 529 : cp < 21 ? cp < 20 ? cp < 19 ? 530 : 532 : 534 : cp < 22 ? 535 : 537 : cp < 34 ? cp < 29 ? cp < 26 ? cp < 25 ? cp < 24 ? 539 : 541 : 542 : cp < 28 ? cp < 27 ? 544 : 546 : 547 : cp < 32 ? cp < 31 ? cp < 30 ? 549 : 551 : 552 : cp < 33 ? 554 : 556 : cp < 40 ? cp < 37 ? cp < 36 ? cp < 35 ? 557 : 559 : 561 : cp < 39 ? cp < 38 ? 563 : 564 : 566 : cp < 43 ? cp < 42 ? cp < 41 ? 568 : 569 : 571 : cp < 44 ? 573 : 574 : cp < 67 ? cp < 56 ? cp < 51 ? cp < 48 ? cp < 47 ? cp < 46 ? 576 : 578 : 580 : cp < 50 ? cp < 49 ? 581 : 583 : 585 : cp < 54 ? cp < 53 ? cp < 52 ? 586 : 588 : 590 : cp < 55 ? 591 : 593 : cp < 62 ? cp < 59 ? cp < 58 ? cp < 57 ? 595 : 596 : 598 : cp < 61 ? cp < 60 ? 600 : 602 : 603 : cp < 65 ? cp < 64 ? cp < 63 ? 605 : 607 : 608 : cp < 66 ? 610 : 612 : cp < 78 ? cp < 73 ? cp < 70 ? cp < 69 ? cp < 68 ? 613 : 615 : 617 : cp < 72 ? cp < 71 ? 618 : 620 : 622 : cp < 76 ? cp < 75 ? cp < 74 ? 624 : 625 : 627 : cp < 77 ? 629 : 630 : cp < 83 ? cp < 81 ? cp < 80 ? cp < 79 ? 632 : 634 : 635 : cp < 82 ? 637 : 639 : cp < 86 ? cp < 85 ? cp < 84 ? 641 : 642 : 644 : cp < 87 ? 646 : 647 : cp < 132 ? cp < 110 ? cp < 99 ? cp < 94 ? cp < 91 ? cp < 90 ? cp < 89 ? 649 : 651 : 652 : cp < 93 ? cp < 92 ? 654 : 656 : 657 : cp < 97 ? cp < 96 ? cp < 95 ? 659 : 661 : 663 : cp < 98 ? 664 : 666 : cp < 105 ? cp < 102 ? cp < 101 ? cp < 100 ? 668 : 669 : 671 : cp < 104 ? cp < 103 ? 673 : 674 : 676 : cp < 108 ? cp < 107 ? cp < 106 ? 678 : 680 : 681 : cp < 109 ? 683 : 685 : cp < 121 ? cp < 116 ? cp < 113 ? cp < 112 ? cp < 111 ? 686 : 688 : 690 : cp < 115 ? cp < 114 ? 691 : 693 : 695 : cp < 119 ? cp < 118 ? cp < 117 ? 696 : 698 : 700 : cp < 120 ? 702 : 703 : cp < 127 ? cp < 124 ? cp < 123 ? cp < 122 ? 705 : 707 : 708 : cp < 126 ? cp < 125 ? 710 : 712 : 713 : cp < 130 ? cp < 129 ? cp < 128 ? 715 : 717 : 718 : cp < 131 ? 720 : 722 : cp < 154 ? cp < 143 ? cp < 138 ? cp < 135 ? cp < 134 ? cp < 133 ? 724 : 725 : 727 : cp < 137 ? cp < 136 ? 729 : 730 : 732 : cp < 141 ? cp < 140 ? cp < 139 ? 734 : 735 : 737 : cp < 142 ? 739 : 741 : cp < 149 ? cp < 146 ? cp < 145 ? cp < 144 ? 742 : 744 : 746 : cp < 148 ? cp < 147 ? 747 : 749 : 751 : cp < 152 ? cp < 151 ? cp < 150 ? 752 : 754 : 756 : cp < 153 ? 757 : 759 : cp < 165 ? cp < 160 ? cp < 157 ? cp < 156 ? cp < 155 ? 761 : 763 : 764 : cp < 159 ? cp < 158 ? 766 : 768 : 769 : cp < 163 ? cp < 162 ? cp < 161 ? 771 : 773 : 774 : cp < 164 ? 776 : 778 : cp < 170 ? cp < 168 ? cp < 167 ? cp < 166 ? 779 : 781 : 783 : cp < 169 ? 784 : 786 : cp < 173 ? cp < 172 ? cp < 171 ? 788 : 790 : 791 : cp < 174 ? 793 : 795 : cp < 264 ? cp < 219 ? cp < 197 ? cp < 186 ? cp < 181 ? cp < 178 ? cp < 177 ? cp < 176 ? 796 : 798 : 800 : cp < 180 ? cp < 179 ? 801 : 803 : 805 : cp < 184 ? cp < 183 ? cp < 182 ? 806 : 808 : 810 : cp < 185 ? 811 : 813 : cp < 192 ? cp < 189 ? cp < 188 ? cp < 187 ? 815 : 816 : 818 : cp < 191 ? cp < 190 ? 820 : 821 : 823 : cp < 195 ? cp < 194 ? cp < 193 ? 824 : 826 : 828 : cp < 196 ? 829 : 831 : cp < 208 ? cp < 203 ? cp < 200 ? cp < 199 ? cp < 198 ? 833 : 834 : 836 : cp < 202 ? cp < 201 ? 837 : 839 : 841 : cp < 206 ? cp < 205 ? cp < 204 ? 842 : 844 : 845 : cp < 207 ? 847 : 848 : cp < 214 ? cp < 211 ? cp < 210 ? cp < 209 ? 850 : 851 : 853 : cp < 213 ? cp < 212 ? 855 : 856 : 858 : cp < 217 ? cp < 216 ? cp < 215 ? 859 : 860 : 862 : cp < 218 ? 863 : 865 : cp < 241 ? cp < 230 ? cp < 225 ? cp < 222 ? cp < 221 ? cp < 220 ? 866 : 868 : 869 : cp < 224 ? cp < 223 ? 870 : 872 : 873 : cp < 228 ? cp < 227 ? cp < 226 ? 874 : 876 : 877 : cp < 229 ? 878 : 880 : cp < 236 ? cp < 233 ? cp < 232 ? cp < 231 ? 881 : 882 : 883 : cp < 235 ? cp < 234 ? 885 : 886 : 887 : cp < 239 ? cp < 238 ? cp < 237 ? 888 : 889 : 890 : cp < 240 ? 892 : 893 : cp < 252 ? cp < 247 ? cp < 244 ? cp < 243 ? cp < 242 ? 894 : 895 : 896 : cp < 246 ? cp < 245 ? 897 : 898 : 899 : cp < 250 ? cp < 249 ? cp < 248 ? 900 : 901 : 902 : cp < 251 ? 903 : 904 : cp < 258 ? cp < 256 ? cp < 254 ? cp < 253 ? 905 : 906 : 907 : cp < 257 ? 908 : 909 : cp < 262 ? cp < 260 ? cp < 259 ? 910 : 911 : 912 : cp < 263 ? 913 : 914 : cp < 377 ? cp < 303 ? cp < 281 ? cp < 273 ? cp < 268 ? cp < 267 ? cp < 265 ? 915 : 916 : 917 : cp < 271 ? cp < 270 ? 918 : 919 : 920 : cp < 277 ? cp < 276 ? cp < 274 ? 921 : 922 : 923 : cp < 279 ? 924 : 925 : cp < 292 ? cp < 286 ? cp < 284 ? cp < 282 ? 926 : 927 : 928 : cp < 290 ? cp < 288 ? 929 : 930 : 931 : cp < 298 ? cp < 296 ? cp < 294 ? 932 : 933 : 934 : cp < 300 ? 935 : 936 : cp < 334 ? cp < 318 ? cp < 310 ? cp < 307 ? cp < 305 ? 937 : 938 : 939 : cp < 315 ? cp < 313 ? 940 : 941 : 942 : cp < 327 ? cp < 324 ? cp < 321 ? 943 : 944 : 945 : cp < 330 ? 946 : 947 : cp < 353 ? cp < 345 ? cp < 341 ? cp < 337 ? 948 : 949 : 950 : cp < 349 ? 951 : 952 : cp < 367 ? cp < 362 ? cp < 357 ? 953 : 954 : 955 : cp < 372 ? 956 : 957 : cp < 621 ? cp < 456 ? cp < 414 ? cp < 394 ? cp < 388 ? cp < 382 ? 958 : 959 : 960 : cp < 407 ? cp < 400 ? 961 : 962 : 963 : cp < 438 ? cp < 430 ? cp < 422 ? 964 : 965 : 966 : cp < 447 ? 967 : 968 : cp < 529 ? cp < 489 ? cp < 477 ? cp < 466 ? 969 : 970 : 971 : cp < 514 ? cp < 501 ? 972 : 973 : 974 : cp < 579 ? cp < 561 ? cp < 544 ? 975 : 976 : 977 : cp < 599 ? 978 : 979 : cp < 1144 ? cp < 813 ? cp < 701 ? cp < 671 ? cp < 645 ? 980 : 981 : 982 : cp < 771 ? cp < 734 ? 983 : 984 : 985 : cp < 979 ? cp < 915 ? cp < 860 ? 986 : 987 : 988 : cp < 1054 ? 989 : 990 : cp < 2101 ? cp < 1562 ? cp < 1389 ? cp < 1253 ? 991 : 992 : 993 : cp < 1789 ? 994 : 995 : cp < 4648 ? cp < 3290 ? cp < 2558 ? 996 : 997 : 998 : cp < 8045 ? 999 : 1000)],
["atan", cp => ((((Math.atan((cp * 100)/290.680623072))/3.096181612)+0.5) * 100)-50],
].forEach(([name, func]) => console.log(name, test(func), test(func))) Firefox Chrome Safari Edit: added a second |
Here's a rational function approximation that works reasonably well in the -/+ 12 pawns range corresponding to between 1% and 99% win probability:
|
Good, let's make TCEC use it. :) Currently it outputs value of 127.99 pawns for Q=1.0. |
Here's one that works for -12,800 centipawns to zero with a worst-case error around 2*10^-6.
For positve x, use 1-Win(-x). Cleaner and with less precision:
|
What is wrong with using the logit formula, often used for converting winning percentage to centipawns ? |
Even if we don't switch to logit, using the logit's inverse function logistic #881 (comment) is maybe close enough with a maximum 0.0396 difference in win rate when using the winrate^14 formula here. win = 1 / (1 + Math.exp(-cp / 135)) |
For that logit, looks like the 10-pawns zone wouldn't start until 0.9988? That seems like it'd annoy TCEC. Not sure it has a clean fix that well preserves the reasons for using a logit in the first place. Maybe something piecewise if you want something analogous to a resignation threshold (i.e. fit the curve up to 0.975, then just tack on a line from (0.975,1000) to (1.00, 12800)). |
The logit works fine when you're fitting to the middle but has trouble fitting the edges well. |
@AlexisOlson <<Here's one that works for -12,800 centipawns to zero with a worst-case error around 2*10^-6. (0.5000000176535154 + 0.012937833148154361 x + Hi, which program did you use for making that nice fit? |
@GeorgeMJ23 I used Mathematica, which has a nice RationalInterpolation function and played around with a bunch of different interpolation points options until I found something suitable. |
Thanks, i used Mathematica also and came with something also very close to this but a bit with more error so i wanted to know if you use something else. :) |
Thanks Alexis but i can't seem to find this fit with any number of different interpolation points in Mathematica :( |
The interpolation is pretty unstable for this function, so I had to try a bunch of different variations before I found something that worked with that small of an error. |
Note that your above win(x) formula does not give the winning probability but the expected score for a x(centiPawn value).
|
What about writing it as uci_info.score = 295 * edge.GetQ(default_q) /
(1 - (295.0/12800.0) * std::pow(edge.GetQ(default_q), 14)); so it's self documenting? |
Non-tangent version of the formula that should fit better near the asymptotes and a better fitting slope near the origin.