linyiLYi / street-fighter-ai

This is an AI agent for Street Fighter II Champion Edition.
Apache License 2.0
6.34k stars 1.36k forks source link

AI为什么不会升龙拳 #43

Open novohool opened 1 year ago

novohool commented 1 year ago

升龙拳就可以解决的问题,为什么一定要躲在墙角过肩摔

tonyxu99 commented 1 year ago

这个AI不会发波,升龙是因为作者不知基于什么原因让一个AI的指令持续6帧。你想让这个AI会发波升龙也很简单。只需注释或删除street_fighter_custom_wrapper.py的74行到81行。不需要重新训练。

tonyxu99 commented 1 year ago

另外我感觉这个所谓的AI动作都很随机,很多动作都是乱来。例如离敌人还很远就在乱出招。能赢最后的boss也有点盲拳打死老师傅的感觉,一对真人就没戏了。我感觉用这种方法训练的AI真的很不聪明。

narakai commented 1 year ago

还有吐槽AI的是,打晕点居然不继续进攻

novohool commented 1 year ago

另外我感觉这个所谓的AI动作都很随机,很多动作都是乱来。例如离敌人还很远就在乱出招。能赢最后的boss也有点盲拳打死老师傅的感觉,一对真人就没戏了。我感觉用这种方法训练的AI真的很不聪明。

别这样,作者虽然技术菜了点,但最少开源了LOL

tonyxu99 commented 1 year ago

另外我感觉这个所谓的AI动作都很随机,很多动作都是乱来。例如离敌人还很远就在乱出招。能赢最后的boss也有点盲拳打死老师傅的感觉,一对真人就没戏了。我感觉用这种方法训练的AI真的很不聪明。

别这样,作者虽然技术菜了点,但最少开源了LOL

我可没说作者技术菜!作者的目的的是打赢最终boss,他这个AI可是做到了。特别是第一局, 有100%的胜率,这是因为他是用第一局来训练的。可是第一局的boss是有固定套路的,所以AI也是用固定套路来赢的。所以这个AI根本无法对决其他电脑控制角色,更不论和人对决。 所以我尝试修改程序,从第一关打起来训练,每次训练直到AI被败为止。所以AI可以学习如何对战不同的对手。可是训练结果很差,根本不收敛。所以说,我才是那个菜鸟。我也是第一次接触RL,多谢Linyi作者给我带来兴趣和入门方法。我现在也有一些想法,看看能不能提高AI的水平。

tonyxu99 commented 1 year ago

现在我大概明白为什么作者要一个AI的指令持续6帧然后才输出奖惩值。这个是因为在游戏中,做出一个动作并不会马上打到对手并得分,要大概几个Frame的时间才能看到效果。如果我们把每一帧都丢给AI,当AI做对一个动作,并在几帧(step)后得到一个奖励,这个做对的动作实际得到的discounted return (刚刚学到的术语)就会相当小, 反而离奖励近的无效动作得到的discounted return多,这样并不利于AI训练。

所以我有个想法,既要用作者的这个方法,也要让AI会发波,升龙。

aijunzhao commented 1 year ago

现在我大概明白为什么作者要一个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,然后打两局输了如何继续,代码怎么写

tonyxu99 commented 1 year ago

现在我大概明白为什么作者要一个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的第一局,通用性很不好。

https://github.com/tonyxu99/String_fighter_AI

Datou commented 1 year ago

现在我大概明白为什么作者要一个AI的指令持续6帧然后才输出奖惩值。这个是因为在游戏中,做出一个动作并不会马上打到对手并得分,要大概几个Frame的时间才能看到效果。如果我们把每一帧都丢给AI,当AI做对一个动作,并在几帧(step)后得到一个奖励,这个做对的动作实际得到的discounted return (刚刚学到的术语)就会相当小, 反而离奖励近的无效动作得到的discounted return多,这样并不利于AI训练。

所以我有个想法,既要用作者的这个方法,也要让AI会发波,升龙。

原来是这样啊,我把这个加回去试试。

Datou commented 1 year ago

把动作持续几帧似乎立竿见影,随便一连就通关了,等会模型出来了我验证一下是真通关还是假通关。 image

Datou commented 1 year ago

果然没有这种好事,代码写错了 T_T

hzhangeng commented 1 year ago

我可没说作者技术菜!作者的目的的是打赢最终boss,他这个AI可是做到了。特别是第一局, 有100%的胜率,这是因为他是用第一局来训练的。可是第一局的boss是有固定套路的,所以AI也是用固定套路来赢的。所以这个AI根本无法对决其他电脑控制角色,更不论和人对决。 所以我尝试修改程序,从第一关打起来训练,每次训练直到AI被败为止。所以AI可以学习如何对战不同的对手。可是训练结果很差,根本不收敛。所以说,我才是那个菜鸟。我也是第一次接触RL,多谢Linyi作者给我带来兴趣和入门方法。我现在也有一些想法,看看能不能提高AI的水平。

泛化确实难,训练了8百万次勉强达到第三关。感觉不是调参数能解决的了

banditgao commented 1 year ago

现在我大概明白为什么作者要一个AI的指令持续6帧然后才输出奖惩值。这个是因为在游戏中,做出一个动作并不会马上打到对手并得分,要大概几个Frame的时间才能看到效果。如果我们把每一帧都丢给AI,当AI做对一个动作,并在几帧(step)后得到一个奖励,这个做对的动作实际得到的discounted return (刚刚学到的术语)就会相当小, 反而离奖励近的无效动作得到的discounted return多,这样并不利于AI训练。

所以我有个想法,既要用作者的这个方法,也要让AI会发波,升龙。

成功了没?进展如何