Calcitem
|
c702f873b5
|
rating: 在走棋阶段检测落子点是否能阻止对方成三
|
2019-10-22 01:10:56 +08:00 |
Calcitem
|
2569d72cb7
|
rating: 仅在摆棋阶段检测落子点是否能阻止对方成三
|
2019-10-21 01:09:15 +08:00 |
Calcitem
|
091a208fbe
|
AI: 关闭 IDS 并调整 rating 计算以提升性能
* 关闭IDS, 因为通过判断是否成三来排定走子顺序已经很有效;
* 仅在吃子时才统计各个点周围子类型分布;
* 仅在需要检测落子点是否能阻止对方成三时才统计点位于对手几个三连中;
* 去掉摆子阶段尽量往禁点旁边落子的策略;
* 不再判断吃子点处于我方的三连中, 因为可能正好也处于对方的三连中.
自对弈时长 2s, 但走棋阶段没多久就闷杀.
若开 IDS 则是 20s.
|
2019-10-21 00:09:51 +08:00 |
Calcitem
|
8611d4db8b
|
AI: 优化吃子优先级
|
2019-10-20 23:16:32 +08:00 |
Calcitem
|
c7fbc4b1bc
|
AI: 增强第2着的走法
* 仅当前2着时才认为星点的重要性, 以免摆棋阶段走到中途时选点优先级不合理.
* 上调第2着的深度由9变为10, 以当黑方走形如21->29时白方不会连续走两次星点造成被动.
自对弈时长: 31s
|
2019-10-20 14:47:30 +08:00 |
Calcitem
|
df31044caf
|
AI: 吃子时尽量吃和我方子形成三连的子
|
2019-10-20 12:10:58 +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
|
d5486fb2cf
|
depth: 进一步提升摆子和走子的深度
|
2019-10-20 03:05:22 +08:00 |
Calcitem
|
7c2345537c
|
depth: 调高摆子阶段后段的深度以防止走棋阶段没多久就闷杀
|
2019-10-20 02:30:37 +08:00 |
Calcitem
|
969aee6c4c
|
AI: 摆子阶段将棋子摆放在星点和成三的优先级一样
|
2019-10-20 00:39:52 +08:00 |
Calcitem
|
95ea8a2c5d
|
AI: 吃子时尽量不吃对方三连中的子
|
2019-10-19 23:59:57 +08:00 |
Calcitem
|
ccf8b45187
|
AI: 使用 rating 机制取代成三着法直接插到首位
* 对于 node, 使用 rating 记录排序分数;
* rating 取值的依据为置换表最佳着法优先, 然后再考虑己方成三, 最后
考虑封堵对方的三;
* 排序时先比较 rating 再比较 value;
* bestMove 维持取第一个 root value 一致的结点不变;
* 不再在 AddNode 函数中改变父节点的孩子顺序;
* 着法排序改为在生成着法后马上进行.
自对弈时长缩短到16秒.
|
2019-10-19 03:05:41 +08:00 |
Calcitem
|
c82aab9a88
|
AI: 能成三就优先成三
能成三就优先成三, 除非置换表中记录了最优着法.
完成此功能, 相关修改用 MILL_FIRST 控制, 启用此宏.
自对弈时长缩短一半.
|
2019-10-18 01:12:34 +08:00 |
Calcitem
|
cfe4ce4e9b
|
Fix: 修复开局阶段AI可能被堵死的问题
提交 79effc7 实现摆子阶段最后一着如果成三则先吃子再进入走棋阶段.
但是忘了在判断到未成三时且摆满时判断胜负,而是直接进入走棋阶段.
故会造成开局阶段AI可能被堵死. 现在补上这个判断,修复之.
|
2019-10-16 23:56:40 +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
|
5ec79bd146
|
stack: 新增析构函数以解决退出程序时抛出异常的问题
|
2019-10-15 22:45:44 +08:00 |
Calcitem
|
3013ef372f
|
ids: 解决关闭 IDS 后编译不通过的问题
|
2019-10-15 00:42:44 +08:00 |
Calcitem
|
7365d059e8
|
refactor: history 改名为 moveHistory
|
2019-10-13 22:46:40 +08:00 |
Calcitem
|
ccc8f2c415
|
ai: 补全缺失的 SORT_CONSIDER_PRUNED 宏控制
|
2019-10-13 22:20:25 +08:00 |
Calcitem
|
ac06cb6531
|
对优先成三(MILL_FIRST)的代码进行部分修正 (未完成)
MILL_FIRST 目前默认仍未启用.
|
2019-10-13 21:45:53 +08:00 |
Calcitem
|
6ec062e5bc
|
tt: 函数改为 const 引用传参
|
2019-10-12 23:10:26 +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
|
3459050600
|
tt: debug: 打印 HASH 命中率
|
2019-10-09 23:59:36 +08:00 |
Calcitem
|
30c5df101e
|
ai: tt: 查询置换表是否命中后不再判断是否为根节点
|
2019-10-09 23:22:41 +08:00 |
Calcitem
|
5606c6e579
|
tt: 解决开启 TRANSPOSITION_TABLE_DEBUG 后编译失败问题
|
2019-10-07 23:56:16 +08:00 |
Calcitem
|
f7fc03dbd3
|
rule: 如果规则没有禁点就跳过清除所有禁点的逻辑
|
2019-10-07 23:56:16 +08:00 |
Calcitem
|
997ef0b979
|
Refactor: 0x0F 替换为 PIECE_FORBIDDEN
|
2019-10-07 23:56:16 +08:00 |
Calcitem
|
ac83c89726
|
rule: 新增莫里斯十二子棋规则
|
2019-10-07 21:03:45 +08:00 |
Calcitem
|
6bd6f20d2d
|
stack: 多加几个函数备用
|
2019-10-07 20:39:22 +08:00 |
Calcitem
|
409cd53517
|
tree: 解决开启 DEBUG_AB_TREE 宏后的编译和段错误问题
|
2019-10-07 19:02:34 +08:00 |
Calcitem
|
727063d6b0
|
mempool: alloc 时不调用指定 align 的函数
修改后自对弈时长比较稳定在 43s.
|
2019-10-07 17:03:51 +08:00 |
Calcitem
|
877f87ec19
|
timestat: 增加 TIME_STAT 宏并默认关闭
因 now() 函数较耗时.
关闭后自对弈时长恢复到 44-45s 左右.
|
2019-10-07 16:54:39 +08:00 |
Calcitem
|
aaa78f54a9
|
ids: 更改 IDS 调试信息打印形式
|
2019-10-07 16:54:29 +08:00 |
Calcitem
|
0b6e98b15d
|
sort: compare: 优化 compare 条件判断顺序并精简代码
目前自对弈中, 两个数左大于右或右大于左的概率之和小于两者相等, 3:4
的关系, 并且两者子结点是否剪枝, 不一致的情况明显小于一致的情况, 约
1:10的关系, 如果随机走子概率有所变化但总体结论不变. 故通过根据比例
计算总的判断次数, 进行优化.
自对弈加2层搜索实验, 搜索耗时由 102.511s 缩减到 91.947s, 提速 11.5%.
|
2019-10-07 12:46:55 +08:00 |
Calcitem
|
a526dbff2c
|
sort: 棋局结束后打印排序算法总耗时
顺带将 AiThread 类实例由 ai 改名为 aiThread
|
2019-10-07 11:36:11 +08:00 |
Calcitem
|
39d0e34f9f
|
depth: 当 VC 下编译为 Debug 时不再减少4层搜索深度
|
2019-10-07 01:31:35 +08:00 |
Calcitem
|
16652ac3b8
|
fly: 修复被围时是否可飞子因传参类型不对引起的判断错误问题
仅从代码上看到问题,暂未验证.
顺带加上一个注释提醒.
|
2019-10-06 11:19:04 +08:00 |
Calcitem
|
c8cdfa8536
|
sort: 删除一些未使用的比较函数以及比较运算符重载
|
2019-10-06 01:19:57 +08:00 |
Calcitem
|
eef8e13c23
|
mempool: 去掉 MEMORY_POOL 宏
MEMORY_POOL 打开后无法通过编译, mempool 功能已完成, 故去除
MEMORY_POOL 宏.
|
2019-10-06 01:10:34 +08:00 |
Calcitem
|
6d81a994d8
|
sort: 将 std::sort 排序算法替换为 sqrt_sort_sort_ins 算法
不需要通过转换为 vector 再调用 std::sort 排序。
自对弈时长由 52s 缩短到 45s。
排序算法代码来源:
https://github.com/swenson/sort
|
2019-10-06 00:39:43 +08:00 |
Calcitem
|
d9758fcca5
|
mempool: 提升内存池大小到 2M
并修改打印统计信息的格式.
每下一着打印出内存池剩余空间大小.
创建了resize函数未完成.
|
2019-10-05 10:50:23 +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
|
a6a5ecf89c
|
ui: lcd: score: Change digit to 5
|
2019-10-03 04:53:43 +08:00 |
Calcitem
|
3de806ccf5
|
refactor: 新建 piece_t 类型并进行魔数替换
|
2019-10-03 01:11:04 +08:00 |
Calcitem
|
55b4197139
|
refactor: Player 1/2 在代码中用 BLACK 和 WHITE 取代
|
2019-10-02 23:26:08 +08:00 |
Calcitem
|
5629387901
|
refactor: 启用 color_t 枚举并将1和2分别替换为 BLACK 和 WHITE
|
2019-10-02 23:15:25 +08:00 |
Calcitem
|
57e3eab4d5
|
Revert 'refactor: 减少 setPosition() 的参数个数到3'
Revert Commit cd6f8a6a77
and Solve conflicts.
解决载入棋谱后前后着跳转显示异常问题.
|
2019-10-02 21:40:39 +08:00 |