Calcitem
|
8177fc40be
|
Add Codacy badge
|
2020-05-10 00:35:25 +08:00 |
Calcitem
|
a334e7ee8d
|
refactor: 清理代码
包括暂时删除 MCTS 大部分代码。
后续再加回来。
|
2020-05-10 00:35:25 +08:00 |
Calcitem
|
08b07c0de8
|
Position::checkGameOverCondition 增加参数控制是否写入 cmdlist
|
2020-05-10 00:35:25 +08:00 |
Calcitem
|
fa0e0b4b33
|
ai: 参考 stockfish 修改 fail-safe search 代码
调用的 TT 部分也被修改
|
2020-05-10 00:35:25 +08:00 |
Calcitem
|
0232de6684
|
refactor: 重命名部分变量
|
2020-05-10 00:35:25 +08:00 |
Calcitem
|
1114906434
|
WAR: 临时处理内存泄漏最大的泄漏点
|
2020-05-10 00:35:25 +08:00 |
Calcitem
|
6399e03a36
|
ai: 搜索时不再生成结点而是遍历着法数组即可
修改后,即便是关闭预取,也能提速 15%。
|
2020-05-10 00:35:25 +08:00 |
Calcitem
|
b8cd08e204
|
消除编译警告
并且万一找不到最佳 move 也不会触发 assert
|
2020-05-10 00:26:39 +08:00 |
Calcitem
|
3fbca61f76
|
解决一局比赛完成或者运行到一半退出时报告 Position 析构过程中 string 析构出错的问题
原因暂不明确,先用此方式规避。
|
2020-05-10 00:26:39 +08:00 |
Calcitem
|
3b40e4b0d6
|
将tips从Position中提出来作为全局变量
以解决运行到一半疑似对tips重复释放导致崩溃的问题。
目前原因不明。不过tips迟早是要提取出来的。
|
2020-05-10 00:26:39 +08:00 |
Calcitem
|
f864c7bbc4
|
refactor: 将 StateInfo 中大多数成员转移到 Position 类中
|
2020-05-10 00:26:39 +08:00 |
Calcitem
|
0f9ae19661
|
nullmove: 增加部分空着裁剪代码 (WIP)
|
2020-05-10 00:26:39 +08:00 |
Calcitem
|
456613e750
|
pvs: 因单纯开 MTD(f) 略快故关闭 PVS 搜索
depth + 4 自对弈时长统计结果:
Alpha-Beta Only: 186.062s
PVS (win=1): 144s
PVS (win=5): 137s
MTDF (win=1): 126s
PVS + MTDF (win=5): 95s
MTDF (win=5): 93s 最快
|
2020-05-10 00:26:39 +08:00 |
Calcitem
|
e4973ce2d9
|
mtdf/pvs: 启用MTD(f) 并把 PVS 和 MTD(f) 的窗口由极小窗口1调整为5
即调整为一个棋子的价值。
修改后,自对弈棋谱不变,自对弈时长由8s缩短到6s以内。
深度+4 测算,耗时缩短到原来的 69%。
|
2020-05-10 00:26:39 +08:00 |
Calcitem
|
02380b64bd
|
pvs: PVS 相关代码用宏控制
|
2020-05-10 00:26:39 +08:00 |
Calcitem
|
335b218d85
|
mtdf: Support MTD(f)
|
2020-05-10 00:26:39 +08:00 |
Calcitem
|
bb50055fda
|
fs: 实现 超出边界(Fail-Soft) 的 Alpha-Beta 搜索
|
2020-05-10 00:26:39 +08:00 |
Calcitem
|
f41c338e29
|
movegen: 解决走子阶段优先成三时的逻辑错误
原来为走子之前的统计故走棋阶段可能会从 @-0-@ 走成 0-@-@, 并未成三,
这就可能造成未选择最佳着法,甚至可能导致赢棋变成和棋。
例如上个提交的自对弈结果就是和棋。
自对弈时长下降到 8s,时长缩短20%。
自对弈棋谱变化,最后一着 (-3,4) 白方胜。
|
2020-05-10 00:26:39 +08:00 |
Calcitem
|
67bfcab176
|
refactor: 新增 deletSubTree() 接口并使用
|
2020-05-10 00:26:39 +08:00 |
Calcitem
|
36daf7bb4f
|
depth: 白方第4步深度上调到18
顺带将 ai.ttMove 修正为 ai.nextMove()
并且多加了几个 nodeCompare 的 策略但未启用。
自对弈时长 10s 多。对比2000盘自对弈结果,速度为修改前的90%。
自对弈棋谱改变,最后一着为 (2,7)->(2,6) 三次重复局面和棋。
|
2020-05-10 00:26:39 +08:00 |
Calcitem
|
4013b5bb7f
|
openingbook: 新增开局库部分代码 (未完成)
|
2020-05-10 00:26:39 +08:00 |
Calcitem
|
79c10960c8
|
hh: 实现历史启发
实测效果不明显,暂不启用
|
2020-05-10 00:26:39 +08:00 |
Calcitem
|
327f3fb28d
|
新建游戏时的保存棋谱会在文件名记录哪方获胜
|
2020-05-10 00:26:39 +08:00 |
Calcitem
|
76ce98e37b
|
nodeCompare 时只比较 rating 而不再比较 value
对战2000盘,提速3.4%, 和修改前自对弈,胜率误差0.2%以内。
|
2020-05-10 00:26:39 +08:00 |
Calcitem
|
8d844cd919
|
BEST_MOVE_ENABLE 改为 TT_MOVE_ENABLE 并完善部分代码 (未完成)
目前在开启后,700盘自对弈显示速度为关闭时的 96.5%,
和关闭时对战600盘,胜率相差 0.8% 左右,可以认为相当。
暂未开启此宏。
|
2020-05-10 00:26:39 +08:00 |
Calcitem
|
2e10e9d380
|
解决开 BEST_MOVE_ENABLE 宏后编译不通过的问题
BEST_MOVE_ENABLE 宏相关代码尚未完善。
|
2020-05-10 00:26:39 +08:00 |
Calcitem
|
e3e7c11f26
|
在关键路径上去除不必要的变量初始化
自对弈4000盘,提升速度8%左右。
|
2020-05-10 00:26:39 +08:00 |
Calcitem
|
9d715fc6a0
|
ui: 界面上显示总盘数
|
2020-05-10 00:26:39 +08:00 |
Calcitem
|
f830f8bb8b
|
修改分数记录文件的文件名格式为 Score-MillGame_<DATA>_<PID>.txt
|
2020-05-10 00:26:38 +08:00 |
Calcitem
|
c315e17063
|
修改引擎对战的 Key 格式为 KeyN
并把程序名的 Key 调到最后。
|
2020-05-02 22:09:08 +08:00 |
Calcitem
|
9ef436a99d
|
启用 TEST_MODE 时不再自动认输
|
2020-05-02 22:09:08 +08:00 |
Calcitem
|
9f17cf0324
|
pvs: 实现主要变例搜索
对战6000盘的结果看,和未加PVS相当,可以认为对棋力无影响。
速度提升 19.5%
自对弈棋谱会变化,三次重复局面和棋。
最后一着为 (2,7)->(2,6)。
自对弈时长10s以内。
|
2020-05-01 21:40:59 +08:00 |
Calcitem
|
c1957e7bee
|
ai: 增加空着向前裁剪部分代码 (未完成)
宏未开启。
|
2020-05-01 21:30:55 +08:00 |
Calcitem
|
7b566b1e71
|
tt: 修复和未开启置换表的对战,执黑胜率少3%,执白胜率少6%的问题
同时对于 alpha-beta 的函数传参形式进行修改:
search(depth - 1 + epsilon, alpha, beta, node->children[i]); 改为
-search(depth - 1 + epsilon, -beta, -alpha, node->children[i]); 的形式。
简化必败以及明显劣势的判断方式。只要判断 root 的值,不需要看其孩子。
并顺带:
删除 MIN_MAX_ONLY 宏相关代码;
删除 SORT_CONSIDER_PRUNED、CLEAR_PRUNED_FLAG_BEFORE_SEARCH 宏相关代码;
新的 TT 算法和修改前算法对战 6000 盘。
黑 22% : 10%, 白 86% : 74% 有 12% 的优势。
速度提升 1.5%, 可以认为无变化。
和未开TT对战1700盘,均为 11% : 83%,误差不超过1%,故可认为新TT已经不会
造成明显劣化。开TT和未开TT比,目前是4.6倍速度比。
自对弈棋谱会变化。自对弈时长 12s+, 最后一步是 -(1,8), 白方胜。
|
2020-05-01 21:29:41 +08:00 |
Calcitem
|
1f62f4469f
|
prefetch: 修复关闭TT宏后编译不通过的问题
|
2020-04-25 09:53:12 +08:00 |
Calcitem
|
e27cbb367b
|
关闭 SORT_CONSIDER_PRUNED 宏
|
2020-04-25 08:49:59 +08:00 |
Calcitem
|
5ddec91a77
|
走子阶段选子时没有没有必要判断候选的子是否被围
自对弈时长缩短到 11.5s 左右。
|
2020-04-25 01:01:15 +08:00 |
Calcitem
|
e2d4b13221
|
prefetch: 预读取成三表
自对弈时长由 14s 多减少到小于 14s。(CPU 忙时测得)
并将每次读取的范围改为256字节。
|
2020-04-23 00:42:35 +08:00 |
Calcitem
|
dae17148d4
|
prefetch: 将 prefetch() 移动到新增的头文件中
|
2020-04-22 01:51:36 +08:00 |
Calcitem
|
0358daa1fb
|
prefetch: 重构 getNextMainHash()
|
2020-04-22 01:07:10 +08:00 |
Calcitem
|
576afd9633
|
prefetch: 实现了走棋阶段走棋的预取
自对弈时长由 15s 下降到 14s。
|
2020-04-22 00:54:07 +08:00 |
Calcitem
|
5391590d3b
|
hash: 修复走子时起始点异或的值不正确的问题
自对弈棋谱没变,自对弈时长由 22s 下降到 15s。
|
2020-04-22 00:12:51 +08:00 |
Calcitem
|
0ad995e0ef
|
prefetch: 支持开局摆子并优化吃子的预取
|
2020-04-21 00:34:55 +08:00 |
Calcitem
|
41bae6e6f2
|
prefetch: 实现不需要模拟走子的预取 (目前只实现了吃子) 并启用预取
自对弈时长由 22s 缩短到 20.5s。
|
2020-04-20 01:56:18 +08:00 |
Calcitem
|
f5570820b4
|
hash: 修正吃子时 hash 误多异或一次的问题
和未修复前对战,
执黑 38% : 61% : 1%, 执黑胜率提升 14%,
执白 15% : 84% : 1%, 执白胜率提升 10%。
自对弈棋谱变化,故自对弈时长下降到 22s,以闷杀结束。
自对弈同时间的盘数比修改前,只有 82%。
自对弈胜率: 19.69% : 79.18% : 1.15%, 白方胜率进一步提升。
|
2020-04-20 01:13:48 +08:00 |
Calcitem
|
3e01a0daf1
|
tt: zobrist 值改为 MISC 位放在高8位并将置换表哈希改为64位
禁用了 TRANSPOSITION_TABLE_CUTDOWN,内存占用由 272MB 升到 532 MB。
在不改为64位 hash 的情况下,会改变自对弈棋谱。
自对弈时长由32s缩短到25s。
|
2020-04-19 11:10:20 +08:00 |
Calcitem
|
e4ec6e22ee
|
prefetch: 增加置换表的预读取特性但暂不启用
对于自对弈,因为局面模拟走下一步,入栈出栈花了7s时间,
而 prefetch 预读置换表,节5s时间,总时间还是增加2s。
故暂不启用。
|
2020-04-19 02:53:04 +08:00 |
Calcitem
|
4b2a5ba5fd
|
清理 DEEPER_IF_ONLY_ONE_LEGAL_MOVE 的代码
已有菜单选项支持,不需要宏。
|
2020-04-18 08:58:52 +08:00 |
Calcitem
|
238b7f7eef
|
depth: 白方摆棋最后一步深度由6上调到14
因为考虑到摆棋之后可能需要吃子,保证吃子深度。
修改对自对弈时长和自对弈胜率几乎没有影响。
|
2020-04-18 08:39:14 +08:00 |
Calcitem
|
bbbf4e8c48
|
vcxproj: 让 Release Win32 编译通过
开启了 ASan。
|
2020-04-09 02:32:20 +08:00 |