Open novohool opened 1 year ago
这个AI不会发波,升龙是因为作者不知基于什么原因让一个AI的指令持续6帧。你想让这个AI会发波升龙也很简单。只需注释或删除street_fighter_custom_wrapper.py的74行到81行。不需要重新训练。
另外我感觉这个所谓的AI动作都很随机,很多动作都是乱来。例如离敌人还很远就在乱出招。能赢最后的boss也有点盲拳打死老师傅的感觉,一对真人就没戏了。我感觉用这种方法训练的AI真的很不聪明。
还有吐槽AI的是,打晕点居然不继续进攻
另外我感觉这个所谓的AI动作都很随机,很多动作都是乱来。例如离敌人还很远就在乱出招。能赢最后的boss也有点盲拳打死老师傅的感觉,一对真人就没戏了。我感觉用这种方法训练的AI真的很不聪明。
别这样,作者虽然技术菜了点,但最少开源了LOL
另外我感觉这个所谓的AI动作都很随机,很多动作都是乱来。例如离敌人还很远就在乱出招。能赢最后的boss也有点盲拳打死老师傅的感觉,一对真人就没戏了。我感觉用这种方法训练的AI真的很不聪明。
别这样,作者虽然技术菜了点,但最少开源了LOL
我可没说作者技术菜!作者的目的的是打赢最终boss,他这个AI可是做到了。特别是第一局, 有100%的胜率,这是因为他是用第一局来训练的。可是第一局的boss是有固定套路的,所以AI也是用固定套路来赢的。所以这个AI根本无法对决其他电脑控制角色,更不论和人对决。 所以我尝试修改程序,从第一关打起来训练,每次训练直到AI被败为止。所以AI可以学习如何对战不同的对手。可是训练结果很差,根本不收敛。所以说,我才是那个菜鸟。我也是第一次接触RL,多谢Linyi作者给我带来兴趣和入门方法。我现在也有一些想法,看看能不能提高AI的水平。
现在我大概明白为什么作者要一个AI的指令持续6帧然后才输出奖惩值。这个是因为在游戏中,做出一个动作并不会马上打到对手并得分,要大概几个Frame的时间才能看到效果。如果我们把每一帧都丢给AI,当AI做对一个动作,并在几帧(step)后得到一个奖励,这个做对的动作实际得到的discounted return (刚刚学到的术语)就会相当小, 反而离奖励近的无效动作得到的discounted return多,这样并不利于AI训练。
所以我有个想法,既要用作者的这个方法,也要让AI会发波,升龙。
现在我大概明白为什么作者要一个AI的指令持续6帧然后才输出奖惩值。这个是因为在游戏中,做出一个动作并不会马上打到对手并得分,要大概几个Frame的时间才能看到效果。如果我们把每一帧都丢给AI,当AI做对一个动作,并在几帧(step)后得到一个奖励,这个做对的动作实际得到的discounted return (刚刚学到的术语)就会相当小, 反而离奖励近的无效动作得到的discounted return多,这样并不利于AI训练。
所以我有个想法,既要用作者的这个方法,也要让AI会发波,升龙。
另外我感觉这个所谓的AI动作都很随机,很多动作都是乱来。例如离敌人还很远就在乱出招。能赢最后的boss也有点盲拳打死老师傅的感觉,一对真人就没戏了。我感觉用这种方法训练的AI真的很不聪明。
别这样,作者虽然技术菜了点,但最少开源了LOL
我可没说作者技术菜!作者的目的的是打赢最终boss,他这个AI可是做到了。特别是第一局, 有100%的胜率,这是因为他是用第一局来训练的。可是第一局的boss是有固定套路的,所以AI也是用固定套路来赢的。所以这个AI根本无法对决其他电脑控制角色,更不论和人对决。 所以我尝试修改程序,从第一关打起来训练,每次训练直到AI被败为止。所以AI可以学习如何对战不同的对手。可是训练结果很差,根本不收敛。所以说,我才是那个菜鸟。我也是第一次接触RL,多谢Linyi作者给我带来兴趣和入门方法。我现在也有一些想法,看看能不能提高AI的水平。
我录了第一集对阵春莉的state,然后打两局输了如何继续,代码怎么写
现在我大概明白为什么作者要一个AI的指令持续6帧然后才输出奖惩值。这个是因为在游戏中,做出一个动作并不会马上打到对手并得分,要大概几个Frame的时间才能看到效果。如果我们把每一帧都丢给AI,当AI做对一个动作,并在几帧(step)后得到一个奖励,这个做对的动作实际得到的discounted return (刚刚学到的术语)就会相当小, 反而离奖励近的无效动作得到的discounted return多,这样并不利于AI训练。 所以我有个想法,既要用作者的这个方法,也要让AI会发波,升龙。
另外我感觉这个所谓的AI动作都很随机,很多动作都是乱来。例如离敌人还很远就在乱出招。能赢最后的boss也有点盲拳打死老师傅的感觉,一对真人就没戏了。我感觉用这种方法训练的AI真的很不聪明。
别这样,作者虽然技术菜了点,但最少开源了LOL
我可没说作者技术菜!作者的目的的是打赢最终boss,他这个AI可是做到了。特别是第一局, 有100%的胜率,这是因为他是用第一局来训练的。可是第一局的boss是有固定套路的,所以AI也是用固定套路来赢的。所以这个AI根本无法对决其他电脑控制角色,更不论和人对决。 所以我尝试修改程序,从第一关打起来训练,每次训练直到AI被败为止。所以AI可以学习如何对战不同的对手。可是训练结果很差,根本不收敛。所以说,我才是那个菜鸟。我也是第一次接触RL,多谢Linyi作者给我带来兴趣和入门方法。我现在也有一些想法,看看能不能提高AI的水平。
我录了第一集对阵春莉的state,然后打两局输了如何继续,代码怎么写
输了就是游戏结束了,返回Done=True,系统会重置环境进行下一轮训练啊。 你可以看看我的项目基于linyi的这个项目的一些改进。我加了这个命令行参数: Add --reset=[round|match|game] command line parameter to test.py and train.py 你可以控制是一局/一个比赛/总游戏结束就重置状态继续训练。 linyi的这个AI是每局结束就重置状态,所以只训练了Bison的第一局,通用性很不好。
现在我大概明白为什么作者要一个AI的指令持续6帧然后才输出奖惩值。这个是因为在游戏中,做出一个动作并不会马上打到对手并得分,要大概几个Frame的时间才能看到效果。如果我们把每一帧都丢给AI,当AI做对一个动作,并在几帧(step)后得到一个奖励,这个做对的动作实际得到的discounted return (刚刚学到的术语)就会相当小, 反而离奖励近的无效动作得到的discounted return多,这样并不利于AI训练。
所以我有个想法,既要用作者的这个方法,也要让AI会发波,升龙。
原来是这样啊,我把这个加回去试试。
把动作持续几帧似乎立竿见影,随便一连就通关了,等会模型出来了我验证一下是真通关还是假通关。
果然没有这种好事,代码写错了 T_T
我可没说作者技术菜!作者的目的的是打赢最终boss,他这个AI可是做到了。特别是第一局, 有100%的胜率,这是因为他是用第一局来训练的。可是第一局的boss是有固定套路的,所以AI也是用固定套路来赢的。所以这个AI根本无法对决其他电脑控制角色,更不论和人对决。 所以我尝试修改程序,从第一关打起来训练,每次训练直到AI被败为止。所以AI可以学习如何对战不同的对手。可是训练结果很差,根本不收敛。所以说,我才是那个菜鸟。我也是第一次接触RL,多谢Linyi作者给我带来兴趣和入门方法。我现在也有一些想法,看看能不能提高AI的水平。
泛化确实难,训练了8百万次勉强达到第三关。感觉不是调参数能解决的了
现在我大概明白为什么作者要一个AI的指令持续6帧然后才输出奖惩值。这个是因为在游戏中,做出一个动作并不会马上打到对手并得分,要大概几个Frame的时间才能看到效果。如果我们把每一帧都丢给AI,当AI做对一个动作,并在几帧(step)后得到一个奖励,这个做对的动作实际得到的discounted return (刚刚学到的术语)就会相当小, 反而离奖励近的无效动作得到的discounted return多,这样并不利于AI训练。
所以我有个想法,既要用作者的这个方法,也要让AI会发波,升龙。
成功了没?进展如何
升龙拳就可以解决的问题,为什么一定要躲在墙角过肩摔