试玩游戏



在 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



游戏前端设计方案

image.gif

这个前端项目是基于:



SpriteshootManagershoot managerbullet


游戏后端设计方案


Components(组件)


5


Architecture(架构图)


微信图片_20220611150311.png

image.gif

channel


Client 与 Server 交互设计方案


Player connect(玩家连接)


微信图片_20220611150351.png

image.gif

Player Disconnect(玩家断开连接)


微信图片_20220611150423.png

image.gif

Client input(客户端输入)


微信图片_20220611150433.png

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"