Java Kiwippet位置的象棋引擎出现性能(4)问题

Java Kiwippet位置的象棋引擎出现性能(4)问题,java,Java,我正在用Java编写一个象棋引擎=> 我已经使用chessprogramming wiki perft page=> 它们都工作(至少深度为4),除了Kiwipete位置。 芬:r3k2r/p1ppqpb1/bn2pnp1/3PN3/1p2P3/2N2Q1p/pppbbpp/r3k2r w KQkq- 深度4的结果不匹配。我找到4315 415个节点,正确的值是4085 603 我不知道该去哪里找,因为大多数艰难的情况(如被驱逐、晋升、中途)都是在其他职位上测试的。我怀疑它与黑色h3棋子有关,因

我正在用Java编写一个象棋引擎=>

我已经使用chessprogramming wiki perft page=>

它们都工作(至少深度为4),除了Kiwipete位置。 芬:
r3k2r/p1ppqpb1/bn2pnp1/3PN3/1p2P3/2N2Q1p/pppbbpp/r3k2r w KQkq-

深度4的结果不匹配。我找到4315 415个节点,正确的值是4085 603

我不知道该去哪里找,因为大多数艰难的情况(如被驱逐、晋升、中途)都是在其他职位上测试的。我怀疑它与黑色
h3
棋子有关,因为我的程序为这个棋子输出了一些错误


如何跟踪此错误?

通过实现divide命令。这是对perft的简单修改:它不显示节点总数,而是显示每个移动的计数。根据您的位置,这应该是输出:

90978 │  1. a2a4
75677 │  2. g2g4
94405 │  3. a2a3
81066 │  4. b2b3
77468 │  5. g2g3
79551 │  6. d5d6
79803 │  7. e1c1
86975 │  8. e1g1
83866 │  9. e5g6
93913 │ 10. e5d7
88799 │ 11. e5f7
98524 │ 12. f3h3
77838 │ 13. f3f6
69334 │ 14. e2a6
82759 │ 15. g2h3
97464 │ 16. d5e6
84773 │ 17. c3b1
84782 │ 18. c3d1
91447 │ 19. c3a4
81498 │ 20. c3b5
77431 │ 21. e5d3
77752 │ 22. e5c4
79912 │ 23. e5g4
83885 │ 24. e5c6
79989 │ 25. e1d1
77887 │ 26. e1f1
83348 │ 27. a1b1
83263 │ 28. a1c1
79695 │ 29. a1d1
81563 │ 30. h1f1
84876 │ 31. h1g1
83727 │ 32. f3d3
92505 │ 33. f3e3
94461 │ 34. f3g3
90488 │ 35. f3f4
104992 │ 36. f3f5
83037 │ 37. d2c1
90274 │ 38. d2e3
84869 │ 39. d2f4
87951 │ 40. d2g5
82323 │ 41. d2h6
74963 │ 42. e2d1
88728 │ 43. e2f1
85119 │ 44. e2d3
84835 │ 45. e2c4
79739 │ 46. e2b5
92037 │ 47. f3g4
95034 │ 48. f3h5
4085603 │
将输出与参考值进行比较,捕捉导致错误的移动,播放并继续执行深度3。 任何实现了正确perft/divide的程序都可以获得参考输出,比如我的()


亚历克斯

我怀疑很多人是否理解你的象棋位置符号。我不确定。这里的大多数人理解的是代码和程序错误消息。不幸的是,你的帖子没有这些。我试过了,但没有成功,因为问题实际上是在取消晋升时发生的。