そこで、Zebraの作者であるGunnarさんのホームページで紹介されている、The FFO endgame test suiteを用いてbenchmarkを行うことにする。
終盤だけしかないという欠点はあるが、まだ序盤や終盤で変化するようなプログラムは作成していないので現在のところ問題ない。
ここまでの手法のbenchmarkをとってみると次のようになる。
まず、negamaxにくらべてnegaalphaが、ずっと効率が良いことが確認できる。
negaalphaでは、odd depthよりも、その次のeven depthの方がノード数が少ないときがある。internal node数や実行時間ではそのような逆転は起きていない。実行時間はマシン環境によって変化するが、最も重要な指標である。leaf node数よりも、internal node数で比較した方がよいという意見もある[?]。
> xtabs(node ~ name + test, data=data)
test
name end40.pos end41.pos end42.pos end43.pos end44.pos
negamax2 30 126 68 84 106
negamax3 305 1193 586 578 1061
negamax4 1325 13165 4517 7297 10652
negamax5 12843 122563 37324 55434 103153
negamax6 63589 1211104 282095 625740 987883
negaalpha2 13 30 30 49 37
negaalpha3 117 289 223 77 208
negaalpha4 139 525 338 673 575
negaalpha5 866 4332 3747 1388 4023
negaalpha6 1278 6865 4063 10677 6969
test
name end45.pos end46.pos end47.pos end48.pos end49.pos
negamax2 88 111 86 98 116
negamax3 1112 1143 736 1127 1092
negamax4 7913 11557 8327 8756 13930
negamax5 92259 107326 70239 92677 142210
negamax6 707766 1093863 791984 727446 1635128
negaalpha2 34 25 47 29 34
negaalpha3 370 335 77 313 273
negaalpha4 329 594 788 470 494
negaalpha5 5777 10135 843 6681 2408
negaalpha6 2723 11688 14354 9337 6707
test
name end50.pos end51.pos end52.pos end53.pos end54.pos
negamax2 131 94 111 143 63
negamax3 1942 959 1089 1573 707
negamax4 18665 9470 10863 20035 4796
negamax5 260643 96971 104217 219668 54825
negamax6 2491678 962986 978789 2691658 415888
negaalpha2 33 59 63 43 23
negaalpha3 452 183 204 350 239
negaalpha4 626 1160 992 1214 586
negaalpha5 15963 2032 1946 11389 2323
negaalpha6 10816 31843 6498 29471 14222
test
name end55.pos end56.pos end57.pos end58.pos end59.pos
negamax2 143 134 85 193 66
negamax3 1990 1319 758 2448 760
negamax4 21662 18921 7733 35050 5828
negamax5 283164 191384 74328 442133 65369
negamax6 3175727 2631485 745547 6005655 562206
negaalpha2 49 56 38 55 18
negaalpha3 322 148 289 828 240
negaalpha4 841 1532 458 904 210
negaalpha5 5657 2013 5651 15508 3747
negaalpha6 20688 26438 4485 15619 2592
> xtabs(inode ~ name + test, data=data)
test
name end40.pos end41.pos end42.pos end43.pos end44.pos
negamax2 11 11 10 7 11
negamax3 41 137 78 91 117
negamax4 346 1330 664 669 1178
negamax5 1671 14495 5181 7966 11830
negamax6 14514 137058 42505 63400 114983
negaalpha2 11 11 10 7 11
negaalpha3 23 71 49 36 50
negaalpha4 132 190 189 141 252
negaalpha5 223 1358 979 729 1181
negaalpha6 1302 2769 2491 2416 3143
test
name end45.pos end46.pos end47.pos end48.pos end49.pos
negamax2 15 13 9 14 9
negamax3 103 124 95 112 125
negamax4 1215 1267 831 1239 1217
negamax5 9128 12824 9158 9995 15147
negamax6 101387 120150 79397 102672 157357
negaalpha2 15 13 9 14 9
negaalpha3 56 64 23 51 67
negaalpha4 251 287 220 256 150
negaalpha5 1126 2781 241 1412 752
negaalpha6 2685 5602 4855 5112 2270
test
name end50.pos end51.pos end52.pos end53.pos end54.pos
negamax2 16 11 11 12 11
negamax3 147 105 122 155 74
negamax4 2089 1064 1211 1728 781
negamax5 20754 10534 12074 21763 5577
negamax6 281397 107505 116291 241431 60402
negaalpha2 16 11 11 12 11
negaalpha3 58 41 50 73 44
negaalpha4 357 305 273 358 251
negaalpha5 2672 607 686 2355 509
negaalpha6 6816 8116 2085 8971 5509
test
name end55.pos end56.pos end57.pos end58.pos end59.pos
negamax2 15 10 9 14 12
negamax3 158 144 94 207 78
negamax4 2148 1463 852 2655 838
negamax5 23810 20384 8585 37705 6666
negamax6 306974 211768 82913 479838 72035
negaalpha2 15 10 9 14 12
negaalpha3 55 45 52 143 40
negaalpha4 350 291 167 290 192
negaalpha5 1157 818 1505 3752 735
negaalpha6 8782 5578 1911 5514 2643
> xtabs(time ~ name + test, data=data)
test
name end40.pos end41.pos end42.pos end43.pos end44.pos
negamax2 162 212 183 190 221
negamax3 386 671 520 545 625
negamax4 794 1755 1229 1400 1773
negamax5 2035 11600 4724 6012 8419
negamax6 6909 79483 21643 40787 73706
negaalpha2 148 166 166 172 187
negaalpha3 278 446 405 326 382
negaalpha4 467 600 569 614 689
negaalpha5 689 1651 1463 1106 1514
negaalpha6 1201 2089 1835 2181 2389
test
name end45.pos end46.pos end47.pos end48.pos end49.pos
negamax2 231 238 204 217 217
negamax3 613 641 581 649 672
negamax4 1648 1846 1521 1605 1851
negamax5 7495 8294 6351 9081 11898
negamax6 58783 84254 57276 56096 103962
negaalpha2 202 200 186 188 175
negaalpha3 437 436 261 433 442
negaalpha4 649 741 715 662 580
negaalpha5 1544 2261 778 1909 1202
negaalpha6 1950 3732 3420 2964 2204
test
name end50.pos end51.pos end52.pos end53.pos end54.pos
negamax2 237 226 222 252 201
negamax3 771 641 668 741 538
negamax4 2292 1779 1805 2269 1359
negamax5 18820 7853 10665 16513 5537
negamax6 157724 75202 66660 171968 37524
negaalpha2 197 208 200 208 177
negaalpha3 469 356 404 485 388
negaalpha4 762 858 751 862 704
negaalpha5 2648 1105 1207 2321 1065
negaalpha6 3720 5664 1937 5738 3626
test
name end55.pos end56.pos end57.pos end58.pos end59.pos
negamax2 266 229 200 285 205
negamax3 807 697 570 896 616
negamax4 2642 2161 1473 3234 1425
negamax5 19360 16159 7499 32512 6098
negamax6 227045 167510 48530 366104 46530
negaalpha2 225 203 187 239 174
negaalpha3 434 370 428 669 379
negaalpha4 837 857 592 811 602
negaalpha5 1641 1281 1814 3272 1327
negaalpha6 5587 4255 1793 4273 2051
nagealphaとkiller heuristic, history heuristic, transposition tableの比較は次の通り。
多くの盤面でkiller heuristicとtransposition tableの組み合わせが最もよい成績を収めている。
> xtabs(node ~ name + test, data=data)
test
name end40.pos end41.pos end42.pos end43.pos end44.pos
negaalpha6 1278 6865 4063 10677 6969
killer6_32 1259 4463 2894 3733 4865
history6 1445 6983 3980 3720 7391
transposition6 1205 5159 3818 9939 6347
transposition_k6 1220 3338 2695 3327 4397
transposition_h6 1329 5744 3669 3511 6947
test
name end45.pos end46.pos end47.pos end48.pos end49.pos
negaalpha6 2723 11688 14354 9337 6707
killer6_32 2491 6313 8238 6105 6608
history6 2902 6068 16889 6299 9535
transposition6 2120 10377 12686 8672 5633
transposition_k6 2035 5122 7778 5599 5928
transposition_h6 2179 5533 14725 6113 8294
test
name end50.pos end51.pos end52.pos end53.pos end54.pos
negaalpha6 10816 31843 6498 29471 14222
killer6_32 8119 11697 3956 13370 4067
history6 6781 19981 8367 13158 4789
transposition6 9222 29411 5734 25134 12567
transposition_k6 6826 11206 3598 11054 3530
transposition_h6 5375 20090 8070 11771 4416
test
name end55.pos end56.pos end57.pos end58.pos end59.pos
negaalpha6 20688 26438 4485 15619 2592
killer6_32 13649 6337 4357 12740 2370
history6 30422 7353 5982 12378 2264
transposition6 19080 22952 4152 14000 2248
transposition_k6 12423 5298 4193 10983 2127
transposition_h6 27967 6018 5387 10597 2062
> xtabs(inode ~ name + test, data=data)
test
name end40.pos end41.pos end42.pos end43.pos end44.pos
negaalpha6 1302 2769 2491 2416 3143
killer6_32 1277 2255 2170 1186 2595
history6 1459 2849 2504 1151 3245
transposition6 1302 2338 2446 2306 3017
transposition_k6 1277 1988 2151 1118 2429
transposition_h6 1430 2592 2439 1124 3287
test
name end45.pos end46.pos end47.pos end48.pos end49.pos
negaalpha6 2685 5602 4855 5112 2270
killer6_32 2683 3511 2781 4105 1901
history6 2927 3243 4742 3879 2924
transposition6 2581 5307 4504 5037 2040
transposition_k6 2578 3368 2682 4026 1765
transposition_h6 2461 3127 4395 3947 2646
test
name end50.pos end51.pos end52.pos end53.pos end54.pos
negaalpha6 6816 8116 2085 8971 5509
history6 4578 5938 2701 4077 3167
killer6_32 6011 4977 2069 4757 3260
transposition6 6376 7878 1990 8316 5345
transposition_k6 5750 4947 1940 4282 3038
transposition_h6 4142 6099 2649 3764 3046
test
name end55.pos end56.pos end57.pos end58.pos end59.pos
negaalpha6 8782 5578 1911 5514 2643
killer6_32 6394 2333 1810 3845 2562
history6 11729 2467 2252 3589 2374
transposition6 8537 5139 1839 5233 2529
transposition_k6 6183 2109 1759 3691 2485
transposition_h6 11182 2267 2100 3325 2300
> xtabs(time ~ name + test, data=data)
test
name end40.pos end41.pos end42.pos end43.pos end44.pos
negaalpha6 1201 2089 1835 2181 2389
killer6_32 1236 1871 1672 1489 2107
history6 1272 2244 1812 1382 2538
transposition6 1227 1951 1890 2198 2426
transposition_k6 1308 1740 1822 1470 2123
transposition_h6 1387 2220 2041 1514 2712
test
name end45.pos end46.pos end47.pos end48.pos end49.pos
negamax6 58783 84254 57276 56096 103962
killer6_32 1971 2809 2460 2640 2095
history6 2091 2592 3613 2470 2483
transposition6 1859 3714 3293 3026 2061
transposition_k6 1939 2698 2497 2691 2005
transposition_h6 2026 2714 3627 2730 2532
test
name end50.pos end51.pos end52.pos end53.pos end54.pos
negaalpha6 3720 5664 1937 5738 3626
killer6_32 3410 3707 1849 3680 2527
history6 2797 4391 2313 3294 2521
transposition6 3542 5527 1928 5426 3566
transposition_k6 3335 3733 1824 3418 2431
transposition_h6 2708 4745 2521 3297 2670
test
name end55.pos end56.pos end57.pos end58.pos end59.pos
negaalpha6 5587 4255 1793 4273 2051
killer6_32 4559 2274 1807 3399 1981
history6 7623 2309 1972 3188 1853
transposition6 5498 4029 1893 4106 1991
transposition_k6 4437 2232 1820 3298 2069
transposition_h6 7493 2321 2116 3143 1963








