在进行完抽象分类后,就是进行蓝图策略的CFR迭代计算的部分,CFR算法的核心就是遍历每一个可能的行动,并且事后对每一个行动进行收益损失评价,那些收益最高的行动将获得更高的概率。进而给每一个决策点计算出对应的行动的概率分布。pluribus对CFR迭代计算进行了优化.对前期的迭代的评估结果赋予较小的权重,因为前期的策略不成熟。并且会对收益特别的差的行动进行减枝,他认为这种负收益行现实中不常见没必要进行多次遍历,但会在固定迭代次数会统一在把全部的节点都放进来重新评估,避免被剪枝的节点收益出现变好的情况。
我在计算的时候并没有剪枝,因为还不清楚剪枝的阀值怎么设才是合理的。计算的时候遇到的问题是map占用内存过大的问题,我用的是32核256g内存的服务器进行迭代,每个key加上value占用的空间为40byte,但是map内部也有内存占用的问题,所以每个节点不只是40byte这没小,导致迭代3000万次的时候,内存占用就有250g左右。这个内存限制直接限制了我的迭代次数,所以下一步优化目标是如何减小map的内存,或者有什么其他的容器能替代map.还有就是计算速度的问题,速度的限制环节计算emd距离,可以提前计算好emd,避免在迭代过程中计算。
CFR代码的实现可以参考https://github.com/bakanaouji/cpp-cfr
代码逻辑图,参见pluribus原文附件,如下: