国科大2022年春季学期强化学习大作业
Game Page: http://www.ice.ci.ritsumei.ac.jp/~ftgaic/index.htm
效果展示:bilibili (感谢队友的配音)
论文报告:Paper-fighting.pdf
PPT汇报:FightingGames.pptx
原始数据:original-data.xlsx
使用角色:
| ZEN | GARNET |
|---|---|
![]() |
![]() |
This demo is based on Ubuntu 18 system.
Add java
sudo apt-get install openjdk-8-jreIf you have multi java:
sudo update-alternatives --config javaAdd python
python = 3.8
pip install gym
pip install py4j
pip install port_for
pip install opencv-pythonClose the screen in Linux
apt install -y xvfbRun
Xvfb :2 -screen 0 1024x768x16 &
export DISPLAY=:2Start the java server (modify the ftg.sh as Linux) and test.
This is important on Linux
sh ftg.sh注意,运行代码时候不要跑多个,即使修改端口4242也不行,虽然能运行,但很多指令传达不到,导致效果极差。
标准赛道,对战双方初始血量都是400,1分钟限时情况下,剩余血量高者获胜。
由于状态是离散与连续共存,用$s$表示状态,其中$s \in \mathbb{R}^{144}$。
其中,$\mathcal{T}$为一个线性映射,通过权重$w \in \mathbb{R}^{40 \times 144}$,则
这样,通过线性映射的方式,可以间接表示Q值,则在SARSA的时序差分迭代中可以表示为
其中$s$表示状态,$a$表示动作,$r$表示奖励值,$w$代表线性权重。
具体内容请见原文Paper-fighting.pdf。
其中,fightingice_env.py文件被我修改,第40-43行,加入了变量character,这样可以自由从输入端选择ZEN,LUD和GARNET了。
训练:
python train.py\
--RL-method SARSA\
--player ZEN测试也是一样,通用了
python test.py\
--CKPT checkpoint/SARSA/ZEN/weight.npy\
--player ZEN\
--Rounds 100测试DDD:
python test_Dual.py\
--CKPT checkpoint/Duel/GARNET/ckpt.pt\
--player GARNET\
--Rounds 100我们在人物ZEN和GARNET上进行了测试。
为了消融验证DDD 模型架构的可行性,另给定SARSA 算法作为baseline,它仅仅将Q 函数改为一层线性映射,训练过程保持不变。限定比赛时间60 秒,限制双方HP 上限,测试100 轮后得到结果下表所示:
角色ZEN:
| 算法 | 胜率 | HP差 | DPS |
|---|---|---|---|
| DDD | 0.87 | 113.83 | 6.09 |
| SARSA | 0.52 | 0.81 | 3.48 |
角色GARNET:
| 算法 | 胜率 | HP差 | DPS |
|---|---|---|---|
| DDD | 0.93 | 185.23 | 10.53 |
| SARSA | 0.77 | 115.16 | 9.79 |
为了验证DDD 算法在短期内的表现是否稳定,限定格斗过程中HP 上限为100,此时智能体只需8 次左右的有效攻击便可击败对方。1000 轮游戏中双方的游戏结果如下图所示。




