GOWOG 
  
 GOWOG 
 试玩游戏
在 Agent 上的 AI 实验
PythonAI agentneuroevolution 
  
 本地 Docker 运行
run_local.sh 
 #!/bin/bash
docker build . --build-arg HOSTNAME=localhost:8080 -t gowog_local|| exit
docker stop gowog
docker rm gowog
docker run --privileged -d --name gowog -p 8080:8080 gowog_local server -prod client/build/ 
 Mac 
 ./run_local.sh 
  
 本地开发
GolangNode.JSPhaser 
 服务器
为少调整过的项目:Kirk-Wang/gowog
go 1.14 
 本地启动:
go run cmd/server/* 
 8080 
 客户端
npm install
npm run dev -- --env.HOST_IP=localhost:8080 # HOST_IP -> 服务器地址 
  
 注意
30008080 
 productiondockerClient8080docker 
 通讯约定
protobufprotocprotobuf 
  
 server/message.proto 
 cd server
./generate.sh 
 游戏前端设计
这个前端项目是基于:
├── client
│   ├── index.html
│   ├── src
│   │   ├── config.js: javascript config
│   │   ├── index.html
│   │   ├── main.js
│   │   ├── sprites
│   │   │   ├── Leaderboard.js: Leaderboard object
│   │   │   ├── Map.js: Map object
│   │   │   ├── Player.js: Player object
│   │   │   └── Shoot.js: Shoot object
│   │   ├── states
│   │   │   ├── Boot.js Boot screen
│   │   │   ├── const.js
│   │   │   ├── Game.js: Game master
│   │   │   ├── message_pb.js: Protobuf Message
│   │   │   ├── Splash.js
│   │   │   └── utils.js
│   │   └── utils.js 
 SpriteshootManagershoot managerbullet 
 游戏后端设计方案
Components(组件)
5 
 ClientHubObjManagerGame Master 
 Architecture(架构图)
channel 
 Client 与 Server 交互设计方案
Player connect(玩家连接)
Player Disconnect(玩家断开连接)
Client input(客户端输入)
Profile
ProfileGolangslow components--cpuprofile--memprofile 
 cd server
go run cmd/server/* --cpuprofile --memprofile 
 代码结构
├── server
│   ├── cmd
│   │   └── server
│   │       └── server.go: Entrypoint running server
│   ├── game
│   │   ├── common
│   │   ├── config
│   │   │   └── 1.map: Map represented 0 and 1
│   │   ├── gameconst
│   │   ├── game.go: Game master objects, containing logic and communication
│   │   ├── mappkg
│   │   ├── objmanager
│   │   ├── playerpkg
│   │   ├── shape
│   │   ├── shootpkg
│   │   ├── types.go
│   │   └── ws
│   │       ├── wsclient.go
│   │       └── wshub.go
│   ├── generate.sh: Generate protobuf for server + client + AI environment
│   ├── message.proto
│   └── Message_proto
│       └── message.pb.go
├── Dockerfile
└── run_local.sh 
 AI 训练设计方案
openAI GymCS2DNeuroEvolution(神经进化) 
  
 运行
gowog 
 ./run_local.sh 
 virtualenvpython3 
 requirements.txt 
 运行训练脚本
python train_ga.py -n save_file_name 
 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"