分享一个简单的unityAI框架,基于神经网络和遗传算法,可以简单的实现自成长的游戏对象
2018-01-10 23:15
951 查看
基于神经网络和遗传算法的unity开发框架,可以轻易的应用到各种不同类型的游戏中
20171226 完成第一个demo,坦克扫雷
核心代码参考:https://github.com/ArztSamuel/Applying_EANNs
参考书籍:游戏编程中的人工智能技术(详细的介绍了神经网络和遗传算法在游戏领域的应用,虽然有点老,但不失为一本很好的入门书籍)
# EasyAIFrame使用说明
## 使用介绍:
### 1.管理类
#### 1.1预制体
将AIManager拖拽到场景中,构建自己的游戏管理类,如demo中的TanksManager脚本
#### 1.2使用代码开始遗传进程
#### 1.3一些回调
直接设置
### 2.实体类
#### 2.1创建自己的实体
创建自己的游戏实体类,并继承自Entity类
同时需要实现一些方法
#### 2.2实体的配置与应用
关键函数是SetInputs和GetOutPuts
需要在这两个函数中配置游戏对象的输入和输出,输入可以认为是智能判断自身处境的条件,输入即是智能判断的结果
以demo中的坦克为例,我设置了4个输入和2个输出
4个输入分别为当前tank的速度,旋转,最近的地雷方位(让智能能够辨识最近的地雷在哪),最近的tank方位(防止多辆tank互相挤在一堆)
2个输出为tank的目标速度和位移,用于控制tank做出下一步动作
#### 2.3行为奖励
判断哪些行为是正确的,哪些是错误的,主要是通过分数加减的形式
在达成正确行为时可以增加实体的分数
以demo为例:
奖励机制为当tank吃到一个地雷时就增加它的分数
惩罚机制为当两个tank互相碰撞时就减少他们的分数
### 3.参数配置
遗传参数的配置,选中管理类预制体,打开下图窗口即可编辑遗传和神经网络的相关参数,这里设置的输入参数和输出参数必须和实际相等
### 4.高级扩展,自定义选择,变异和交叉策略
如果你对与遗传算法有一定的了解,可以根据需要改变以上三中策略
打开GeneticAlgorithm.GeneticOpetation脚本
可以看到这三种策略的方法是用委托绑定的,实现你自己的策略函数,直接修改委托的绑定对象,即可生效
下载地址:http://download.csdn.net/download/a827443469/10199533
或者是我的github:https://github.com/ShenZhouXieZhiFeng/TheAncestralNerve
20171226 完成第一个demo,坦克扫雷
核心代码参考:https://github.com/ArztSamuel/Applying_EANNs
参考书籍:游戏编程中的人工智能技术(详细的介绍了神经网络和遗传算法在游戏领域的应用,虽然有点老,但不失为一本很好的入门书籍)
# EasyAIFrame使用说明
## 使用介绍:
### 1.管理类
#### 1.1预制体
将AIManager拖拽到场景中,构建自己的游戏管理类,如demo中的TanksManager脚本
#### 1.2使用代码开始遗传进程
#### 1.3一些回调
直接设置
### 2.实体类
#### 2.1创建自己的实体
创建自己的游戏实体类,并继承自Entity类
同时需要实现一些方法
#### 2.2实体的配置与应用
关键函数是SetInputs和GetOutPuts
需要在这两个函数中配置游戏对象的输入和输出,输入可以认为是智能判断自身处境的条件,输入即是智能判断的结果
以demo中的坦克为例,我设置了4个输入和2个输出
4个输入分别为当前tank的速度,旋转,最近的地雷方位(让智能能够辨识最近的地雷在哪),最近的tank方位(防止多辆tank互相挤在一堆)
2个输出为tank的目标速度和位移,用于控制tank做出下一步动作
#### 2.3行为奖励
判断哪些行为是正确的,哪些是错误的,主要是通过分数加减的形式
在达成正确行为时可以增加实体的分数
以demo为例:
奖励机制为当tank吃到一个地雷时就增加它的分数
惩罚机制为当两个tank互相碰撞时就减少他们的分数
### 3.参数配置
遗传参数的配置,选中管理类预制体,打开下图窗口即可编辑遗传和神经网络的相关参数,这里设置的输入参数和输出参数必须和实际相等
### 4.高级扩展,自定义选择,变异和交叉策略
如果你对与遗传算法有一定的了解,可以根据需要改变以上三中策略
打开GeneticAlgorithm.GeneticOpetation脚本
可以看到这三种策略的方法是用委托绑定的,实现你自己的策略函数,直接修改委托的绑定对象,即可生效
下载地址:http://download.csdn.net/download/a827443469/10199533
或者是我的github:https://github.com/ShenZhouXieZhiFeng/TheAncestralNerve
相关文章推荐
- 基于python实现一个简单的神经网络
- 分享:基于epoll实现的一个简单的web服务器
- 基于RNN神经网络和BPTT算法实现的简单二进制计数器
- 实现一个最简单的神经网络
- 遗传算法和神经网络实现chrome的小恐龙游戏(Flappy TRex)的人工智能
- [Unity通信]一个基于socket的3DARPG网络游戏(一):建立连接和事件分发
- 基于Actor模式的c#网络游戏服务器的实现和Unity游戏客户端的连接
- 分享:基于epoll实现的一个简单的web服务器
- 利用tensorflow 一步一步实现一个简单神经网络,线性回归
- 自学笔记:一个简单的神经网络,机器学习数字图片,可以显示错误的数字的图片
- 【微信支付】分享一个失败的案例 跨域405(Method Not Allowed)问题 关于IM的一些思考与实践 基于WebSocketSharp 的IM 简单实现 【css3】旋转倒计时 【Html5】-- 塔台管制 H5情景意识 --飞机 谈谈转行
- 用JAVA实现一个简单地Socket服务器,可以实现发给指定对象
- 一个简单的matlab项目实现三层神经网络的简单应用
- 一个最简单的三层神经网络的实现
- 【分享】分享一个基于SSH实现的简单学生选课系统(附源码)
- 基于神经网络和遗传算法的【手写数字识别】机器人的实现
- [Unity通信]一个基于socket的3DARPG网络游戏(二):消息分类处理和json的使用
- go实现一个简单的游戏服务器框架(lotou)网络通信
- 2016.3.29 一个简单的视觉化证明神经网络可以拟合任意函数
- Go/Python/Erlang编程语言对比分析及示例 基于RabbitMQ.Client组件实现RabbitMQ可复用的 ConnectionPool(连接池) 封装一个基于NLog+NLog.Mongo的日志记录工具类LogUtil 分享基于MemoryCache(内存缓存)的缓存工具类,C# B/S 、C/S项目均可以使用!