试玩游戏
在 Agent 上的 AI 实验
PythonAI agentneuroevolution
本地 Docker 运行
run_local.sh
Mac
打开 http://localhost:8080
本地开发
GolangNode.JSPhaser
服务器
go 1.14
本地启动:
8080
客户端
进入 http://localhost:3000
注意
30008080
productiondockerClient8080docker
通讯约定
protobufprotocprotobuf
server/message.proto
游戏前端设计方案
这个前端项目是基于:
SpriteshootManagershoot managerbullet
游戏后端设计方案
Components(组件)
5
Architecture(架构图)
channel
Client 与 Server 交互设计方案
Player connect(玩家连接)
Player Disconnect(玩家断开连接)
Client input(客户端输入)
Profile
ProfileGolangslow components--cpuprofile--memprofile
代码结构
AI 训练设计方案
openAI GymCS2DNeuroEvolution(神经进化)
运行
gowog
virtualenvpython3
requirements.txt
运行训练脚本
save_fie_nameweightsweights
Genetic Algorithm(遗传算法)
_cs2denv_ga.py 的实现_
CS2D AgentCS2DopenAI gymagentreset()step()observation_spaceaction_space
ObservationSpaceupdate_player
玩家位置玩家大小尺寸列数行数块宽度块高度块01201
1 / distance(到目标的距离)agent1001
NeuroEvolution(神经进化)
_train_ga.py 的实现_
Neural Network
NeuroEvolutionNN(神经网络)NNMutate
一个特别的改进是,我们只存储应用于神经网络的噪声种子列表,而不是存储所有的代权值。因为在同一个种子下,所有的随机化都是相同的,所以一个种子可以代表一个网络的突变算子。我们不需要保留每一代的所有权值,我们只需要存储一组从开始到当前一代的种子,然后从这组种子中重新构造权值来得到所有神经网络的权值。
Maxim Lapan"Deep Reinforcement Learning Hands-On"