【以EIGEN单线程b6c96模型maxVisits=5举例】katago analysis 求解过程

当收到json请求后,
asyncbot.cpp的AsyncBot::genMoveSynchronous会唤醒其它线程去干活。

之后,其它线程接到命令,同样是asyncbot.cpp的AsyncBot::internalSearchThreadLoop(),开始干活

搜索的关键为这一步

search->runWholeSearch(shouldStopNow,&searchBegun,pondering,tc,searchFactor);

5秒后(DEBUG版)搜索结束,获取答案,343,也是C3

Loc moveLoc = search->getChosenMoveLoc();

其中比较重要的

bool shouldStop =
  (numPlayouts >= maxPlayouts) ||
  (numPlayouts + numNonPlayoutVisits >= maxVisits);
bool finishedPlayout = runSinglePlayout(*stbuf, upperBoundVisitsLeft);

search.cpp: playoutDescend()函数则是MCTS,检查游戏是否结束,NN评估局面等等(会递归)

selectBestChildToDescend()函数通过访问次数等决定哪个子节点最适合继续探索,新版的人类策略也在此处进行
nneval.cpp: NNEvaluator::evaluate()函数先算hash看能不能命中缓存,不能就加入队列
nninputs.cpp: NNInputs::fillRowV7()函数填入各种特征:棋盘状态,气数,贴目等等
eigenbackend.cpp: NeuralNet::getOutput()函数是前向传播

在fillRowV7中,有以下代码:

  assert(board.x_size <= nnXLen);
  assert(board.y_size <= nnYLen);

其中board.x_size为13,或者16,等等,而nnXlen为19。因为我们都知道,Katago会让AI在不同大小的棋盘上玩。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值