rlcard icon indicating copy to clipboard operation
rlcard copied to clipboard

关于DMC算法model.py中step函数的探讨

Open mingoliu08 opened this issue 2 years ago • 2 comments

问题描述:目前dmc算法斗地主的水平刚好能达到人类的平均水平。在某些情况下,AI出牌会出现让人惊艳的出牌(超高手水准),反之AI偶尔也会犯十分低级的错误。比如(AI手上剩3个牌,一个对子,一个单张,在对子明显对方要不起的情况下,结果AI出了一个单张从而导致输牌)。

个人理解:出现上段描述中低级错误是因为某些牌局AI并没有得到足够多的训练,而按照目前的算法(代码)分析,如果需要基本杜绝低级错误的出现,目前的训练量至少要再提高一个数量级,而这肯定是不现实的。

解决思路:

  1. DMCAgent类中参数exp_epsilon默认值设为0.01,改变此参数的值能否提高训练效率(个人认为针对斗地主的情况,最佳的设定值在0.05~0.1之间)?
  2. 或者能否通过将step函数设计得更加精细来提高训练效率。比如action的选择可以根据过去训练结果的得分概率来选择(当然必须做一定的调整)。而不是简单的在概率为exp_epsilon的情况下随机选择。

mingoliu08 avatar Jun 20 '22 17:06 mingoliu08

@mingoliu08 感谢反馈

  1. 改变exploration的值确实有可能提高训练效率。不过我们没有试过。
  2. 这个是可行的,可以去做一些剪枝。比如把一些明显不太行的action用规则过滤掉,再用算法在剩下的里面做选择

daochenzha avatar Jun 23 '22 05:06 daochenzha

@daochenzha 非常感谢您的解答! 其实还有一个思路,能提高几百上千倍的训练量,不知道为什么您的团队没有采纳。就是针对每个特定牌局,手牌确定后,再即时训练,只需要训练这一个牌局,这样就不做任何无用功。理论上同样数量的显卡,针对特定牌局的训练,只需要1秒钟的训练量就应该就能超过同电脑配置下预训练几十上百年的训练量。而且1秒钟的时间几乎可以忽略不计。如果用CPU训练,一台高端配置的个人电脑不需要显卡,也能有比现在好得多的效果。

mingoliu08 avatar Jun 23 '22 11:06 mingoliu08