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
|
e27cbb367b
|
关闭 SORT_CONSIDER_PRUNED 宏
|
2020-04-25 08:49:59 +08:00 |
Calcitem
|
41bae6e6f2
|
prefetch: 实现不需要模拟走子的预取 (目前只实现了吃子) 并启用预取
自对弈时长由 22s 缩短到 20.5s。
|
2020-04-20 01:56:18 +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
|
c8b1fee7a5
|
ext: 深度延伸默认启用并且改为做成菜单选项
|
2020-04-02 23:53:06 +08:00 |
Calcitem
|
0dbce7591c
|
depth: placingDepthTable 修改为黑白每回合单独控制深度
|
2020-03-27 01:04:59 +08:00 |
Calcitem
|
95c2e0f9b8
|
horizon: 水平线效应支持仅一步可走时延伸一层的机制
暂不开启。若开启:
无论是执黑还是执白,相对原来都提升5%胜率。
执黑 6291 盘
3253 44.61% *
3799 52.10%
239 3.27%
执白 8103 盘
2674 33.00%
5152 63.58% *
277 3.41%
自对弈 3225 盘,黑白胜率和未开启时相当。
1266 39.25%
1833 56.83%
126 3.90%
|
2020-03-26 01:04:22 +08:00 |
Calcitem
|
b0594698ad
|
IDS: 将迭代加深开关做到界面菜单中而不再用宏控制
|
2020-03-22 23:09:53 +08:00 |
Calcitem
|
2f5380f58a
|
如果定义了 FIRST_MOVE_STAR_PREFERRED 则黑方首步强制走星位
暂不开启,但是当前星位的 rating 值高所以通常还是走星位。
|
2020-03-20 22:22:19 +08:00 |
Calcitem
|
3138424e97
|
depth: 如果定义了 FIX_DEPTH 宏则深度就定为这个宏的 值
|
2020-03-20 01:10:49 +08:00 |
Calcitem
|
7da2d0416c
|
mcts: 新增分段线性分布相关代码
使用 MCTS_PLD 宏控制,暂不启用。
若启用,棋力反而比均匀分布弱。
|
2020-03-06 00:17:10 +08:00 |
Calcitem
|
57f5a0d3ba
|
mcts: 移除 Node 类中和 MCTS 无关而仅和 AB 有关的成员变量
|
2020-02-26 02:28:09 +08:00 |
Calcitem
|
ac18becf93
|
mcts: MCTS 在本游戏中可用
开启 MCTS_AI 宏即可。
|
2020-02-26 02:02:39 +08:00 |
Calcitem
|
1cd374512e
|
copyright: 更新版权年份为 2019-2020
|
2020-01-29 22:25:34 +08:00 |
Calcitem
|
f2e4f00a5a
|
ai: tt: 完全去除 bestMove 相关参数
内存占用由 409M 缩小到 285M。
自对弈时长几乎无变化。
|
2020-01-25 09:41:48 +08:00 |
Calcitem
|
4504801dc6
|
endgame: 若开启 ENDGAME_LEARNING_FORCE 宏,则不需要勾选菜单,就能生效残局库功能;
|
2019-12-23 00:26:02 +08:00 |
Calcitem
|
a067ccf0fd
|
mcts: 补充 cpp 文件
启用 UCT_DEMO 宏时可以运行一个四子棋程序。
只是添加四子棋 demo, 暂未和原有 AI 结合。
|
2019-12-15 23:58:19 +08:00 |
Calcitem
|
533c3e2d49
|
新增 TEST_MODE 宏
开启时,启动后进入对引擎对战友好的默认配置
|
2019-12-14 01:48:07 +08:00 |
Calcitem
|
cc2d80660e
|
Test: 增加引擎对战模式的选项
暂未添加图片;
选中后若双方都是AI会卡死,暂未处理。
|
2019-12-08 12:11:03 +08:00 |
Calcitem
|
3182eff1ad
|
test: 新增测试模块用于本地对战
使用共享内存实现,效率比 socket 高。
打开 TEST_MODE 宏才能生效。
|
2019-12-08 02:28:24 +08:00 |
Calcitem
|
a3f9059528
|
timestat: 增加 CYCLE_STAT 宏但仅为示例用故不启用
|
2019-11-10 12:36:31 +08:00 |
Calcitem
|
22ffd83b19
|
去除 EMIT_COMMAND_DELAY
QTimer::singleShot(EMIT_COMMAND_DELAY, this, &AiThread::emitCommand);
改为:
emitCommand();
顺带将 i/id 重命名为 sideId/playerId.
|
2019-11-03 20:23:57 +08:00 |
Calcitem
|
d6307b5c61
|
depth: 如果深度小于1则设置为1
为了调试需要, 新增 DEPTH_ADJUST 宏用于深度调整.
|
2019-11-03 17:43:27 +08:00 |
Calcitem
|
e90266d3e1
|
license: Change Licence to GPL 3.0
由 LGPL 协议切换为 GPL 协议.
|
2019-11-03 13:00:45 +08:00 |
Calcitem
|
5e8fc4ddea
|
endgame: 关闭 ENDGAME_LEARNING 功能
内存占用从 570MB 下降到 433MB.
因为 movingDiffDepthTable 的切换, 自对弈时长由 18s 缩短到 13s.
|
2019-10-29 00:39:08 +08:00 |
Calcitem
|
a453c7b63e
|
trainer: 初步实现能走出第1步就停止了
|
2019-10-27 01:03:10 +08:00 |
Calcitem
|
25fa3e8dc7
|
rule: 新增 DEFAULT_RULE_NUMBER 宏
|
2019-10-26 19:03:18 +08:00 |
Calcitem
|
5450ad9de9
|
refactor: 替换 MILL_FIRST 宏名为 SORT_MOVE_WITH_HUMAN_KNOWLEDGES
|
2019-10-23 00:22:15 +08:00 |
Calcitem
|
091a208fbe
|
AI: 关闭 IDS 并调整 rating 计算以提升性能
* 关闭IDS, 因为通过判断是否成三来排定走子顺序已经很有效;
* 仅在吃子时才统计各个点周围子类型分布;
* 仅在需要检测落子点是否能阻止对方成三时才统计点位于对手几个三连中;
* 去掉摆子阶段尽量往禁点旁边落子的策略;
* 不再判断吃子点处于我方的三连中, 因为可能正好也处于对方的三连中.
自对弈时长 2s, 但走棋阶段没多久就闷杀.
若开 IDS 则是 20s.
|
2019-10-21 00:09:51 +08:00 |
Calcitem
|
b229c07141
|
depth: 将加深的深度值用 HARD_LEVEL_DEPTH 宏控制并禁用
|
2019-10-20 11:27:39 +08:00 |
Calcitem
|
1789c25dac
|
ids: 因为杀棋探查异常故禁用窗口
|
2019-10-20 03:14:20 +08:00 |
Calcitem
|
c82aab9a88
|
AI: 能成三就优先成三
能成三就优先成三, 除非置换表中记录了最优着法.
完成此功能, 相关修改用 MILL_FIRST 控制, 启用此宏.
自对弈时长缩短一半.
|
2019-10-18 01:12:34 +08:00 |
Calcitem
|
618b294280
|
ids: 对最佳走法所在结点价值加一 (默认关闭)
性能下降明显
|
2019-10-16 00:52:09 +08:00 |
Calcitem
|
a729fedb04
|
ids: 打印每次 IDS 迭代的各着法的分值
|
2019-10-16 00:52:09 +08:00 |
Calcitem
|
faab2b59aa
|
ai: search: 解决因 IDS 导致的有时根节点所有子结点都剪枝了的问题
默认不启用, 因为自对弈时长会由44s增长到84s.
|
2019-10-16 00:52:09 +08:00 |
Calcitem
|
29e1297531
|
[gnuc] A little bit Performance Enhancement
可能对cache命中率稍有提升 (MISS: 0.03%->0.01%)
实测无明显变化.
|
2019-10-11 22:11:13 +08:00 |
Calcitem
|
877f87ec19
|
timestat: 增加 TIME_STAT 宏并默认关闭
因 now() 函数较耗时.
关闭后自对弈时长恢复到 44-45s 左右.
|
2019-10-07 16:54:39 +08:00 |
Calcitem
|
eef8e13c23
|
mempool: 去掉 MEMORY_POOL 宏
MEMORY_POOL 打开后无法通过编译, mempool 功能已完成, 故去除
MEMORY_POOL 宏.
|
2019-10-06 01:10:34 +08:00 |
Calcitem
|
31323da82e
|
mempool: 更换为不需要 new 的实现
原有的内存池实现还是会调用 new, 性能提升不显著, 故切换到不需要 new
的实现.
参考:
https://github.com/eliben/code-for-blog/blob/master/2008/memmgr/main.c
https://gitrepos.estec.esa.int/taste/panda/blob/master/etc/libbambu/memmgr.c
自对弈时长由54s缩短到52s.
临时使用转换为 vector 再调用 std:sort 进行排序的方式, 后续切换到
自己的排序函数, 应会明显提升性能.
|
2019-10-05 04:04:06 +08:00 |
Calcitem
|
8e54962233
|
ai: tt: 使用更新年龄机制来取代每次全部清空置换表
memset 大块内存效率较低, 故在哈希表中增加年龄纪录,
当年龄不一致时即认为哈希表项过时, 就更新它.
如果年龄一致则从中读取数据.
年龄增长到255时才清空一次置换表, 这样自对弈一盘棋只需要清2次.
修改使用 TRANSPOSITION_TABLE_FAKE_CLEAN 宏控制.
代价是会增加哈希表的体积, 空间换时间.
自对弈时长由 63s 缩短到 54s, 提速 15%.
|
2019-10-02 19:23:52 +08:00 |
Calcitem
|
2918b9a23d
|
stack: 增加 Stack 类取代 std::stack 并且在拷贝时使用 memcpy 提高效率
自对弈时长由66秒缩短到63秒, 提速 4.5%.
|
2019-10-02 11:36:17 +08:00 |
CalciteM Team
|
c9ec23603a
|
endgame: 以残局库代码取代开局库代码
* 目前残局库依赖于自动认输开启.
|
2019-09-17 23:13:25 +08:00 |
CalciteM Team
|
3e47a5963b
|
depth: 去除深度相关的编译宏
|
2019-09-15 21:57:45 +08:00 |
CalciteM Team
|
874dac69f1
|
perf: 哈希表不加锁去掉线程安全机制
自对弈性能测试:
加锁: 2"93 = 213s
不加锁: 2"33 = 153s
提速 28%.
|
2019-09-14 23:51:52 +08:00 |
CalciteM
|
3a043b469c
|
refactor: 将部分哈希相关重命名为置换表相关名称
|
2019-09-09 00:29:50 +08:00 |
CalciteM
|
3d1022f292
|
refactor: 清理成三表和着法表等无用的逻辑
|
2019-09-08 23:58:26 +08:00 |
CalciteM
|
fa531d5926
|
refactor: Rename chess to game
|
2019-09-08 23:40:22 +08:00 |
CalciteM
|
dc90db249c
|
refactor: 创建 board 和 rule 模块
* 将部分逻辑转移到这两个 class;
* 创建了 types.h 将部分类型转移到此文件;
* 将 millList 由 list 改为 vector, 否则容易出现段错误.
|
2019-09-08 23:22:28 +08:00 |