matlab 柏林噪声,游戏AI怎么写(一)——高级随机技术
写在前面
最近在研究游戏AI,感觉要写一个不傻的AI并没有那么容易,于是开始研究AI到底该怎么写,有没有什么技巧和框架。
发现Web图书:Game AI Pro
刚开始读这一套书,我似乎意识到了把技巧理论化的重要性,我写AI时用瞎搞的逻辑,居然是什么“施密特触发器”“双阈值法滞后”,我决定把这一套书读完。
知识点
1.施密特触发器和滞后
据说双阈值法滞后是保持AI控制系统干脆利落的关键
例:物体A跟随物体B,物体A与物体B的距离超过5米,A就会靠近B,当A与B的距离缩小到2.5米以下的时候,停止跟随。再次超过5米,又会进入跟随状态。
const float SEPARATION_DISTANCE = 2.5f;
const float APPROACH_DISTANCE = 5.0f;
if (approach_player == false) {
if (distance > APPROACH_DISTANCE)
{
approach_player = true;
//动作函数
}
}
else
{
if (distance < SEPARATION_DISTANCE)
{
approach_player = false;
}
}
注:这段是c语言伪代码,本篇博客中其余脚本均为MATLAB
2.高斯随机值
你一定了解过正态分布,在概率论,统计学等诸多学科都有用到
如果不知道: https://zh.wikipedia.org/wiki/正态分布
我们经常用到伪随机数rand(),它可以产生白噪声,是绝对随机的。但这样的随机往往满足不了我们的需求
比如我们以 vec2(0.5,0.5)为中心,产生100个随机坐标
clear;
x=rand(1,100);
y=rand(1,100);
scatter(x,y);
但是过于随机了,我们想增加落在 vec2(0.5,0.5)周围的概率
clear;
x=zeros(1,100);
y=zeros(1,100);
for i=1:20
x=x+rand(1,100)*0.05;
y=y+rand(1,100)*0.05;
end
scatter(x,y);
射击游戏的精准度应该就是根据正态分布标准差得来的
3.随机处理对策
我们随机生成40个 0 1
clear;
x=1:1:40;
y=floor(rand(1,40)*2.0);
stairs(x,y);
axis([0 40 -0.5 1.5]);//设置XY轴范围
set(gca,'xtick',x);//设置坐标精度
似乎并没有我们想象的那么随机,现实是会出现很多连续序列。//所以说现实和我们计划的总是不一样
解决办法:根据情况翻转数值,比如连续和重复情况
总之就是设定规则,比如浮点型的差值,规律性,根据情况重新生成,再次判断
筛选高斯随机数的随机范围,可以根据值,标准差,重新生成
注意保持随机算法各自独立
4.应用于游戏AI中的柏林噪声
这是当然了
一维柏林噪声在游戏AI中的潜在应用有
角色移动:方向,速度,加速度
动画叠加层:角色的面部表情或注释动作增加噪声影响
精准度:连续的成功或失败,需要保持的势头
注意力:守卫的警惕性、反应时间
行为风格:防御型,进攻型
角色情绪:冷静、愤怒、高兴、沮丧、狂暴、无所事事、专心致志
/论读书的好处,我甚至想到了,二维柏林FBM+阈值可以用来给大面积植被上MainColor
在有大量角色而且玩家不会仔细观察这个角色时,这种方法尤为有用
limx=[0 10];
dx=1/64;
x=limx(1):dx:limx(2);
numx=diff(limx)+1;
uxmat=rand(1,numx+1)*2-1;
numx_z=diff(limx)/dx+1;
zmat=zeros(1,numx_z);
for j=1:length(x)
ddx=x(j)-floor(x(j));
ux=uxmat(1,floor(x(j))-limx(1)+1);
n0=(ux*ddx);
ddx=x(j)-floor(x(j))-1;
ux=uxmat(1,floor(x(j))-limx(1)+2);
n1=(ux*ddx);
zmat(j)=lerp(n0,n1,x(j)-floor(x(j)));
end
zmat=zmat*2;
plot(x,zmat)
function u=lerp(a,b,t)
tw=6*t.^5-15*t.^4+10*t.^3;
u=(1-tw)*a + tw*b;
end
可控因素:频程的阶数、频程的范围、每阶的放大倍数、差值函数的选择。
未完待续
此分类的下一篇将会记录AI常用的体系框架及技巧。
只要实习之余我有时间就会尽量填坑。。。
挖坑太多填不上,也请见谅
matlab 柏林噪声,游戏AI怎么写(一)——高级随机技术相关推荐
- MATLAB插值:柏林噪声插值
这是MATLAB插值拟合系列的第四期,这里附上前几期的链接: 第三期:MATLAB数值拟合:最小二乘多项式拟合 第二期:matlab插值:拉格朗日插值 第一期:[数值分析拟合]Matlab三次样条插值 ...
- MATLAB | MATLAB地形生成:矩形迭代法 · 傅里叶逆变换法 · 分形柏林噪声法
1:矩形迭代法 这个非常简单,就是将矩阵的四个角分别定下初值,之后进行如下形式的迭代就好: [wxyz]⟶[ww+x2xw+y2w+x+y+z4x+z2yy+z2z]+noise.\begin{bma ...
- 1.5万字详述 | 全开源:python写小游戏+AI强化学习与传统DFS/BFS控制分别实现
简介:本周的强化学习我们来到实践部分.我以我在 GitHub 上开源的项目 PiperLiu / Amazing-Brick-DFS-and-DRL 为对象,从零开始与各位朋友分享:如何用 pytho ...
- 如何写一个游戏AI(一)
由于目前游戏的ai最后两手牌打的不尽人意,而手头上的工作又暂时弄完了.就被安排去学习AI,最终目标是重新训练/优化现有的AI.而这只是我的记录,仅仅是偏向我的应用,并不偏向研究.虽然只是这样,但是其实 ...
- UnityStandardAsset工程、源码分析_5_赛车游戏[AI控制]_AI机制
上一章地址: UnityStandardAsset工程.源码分析_4_赛车游戏[玩家控制]_摄像机控制 前几章我们已经将赛车游戏的绝大多数机制分析过了,而Unity还提供了不同的操控模式--AI控制. ...
- 3D数学之柏林噪声(Perlin Noise)
好了,转入正题. 其实它的原理并不是很难,但是由于网上实现的版本太多太杂,真要实现起来竟然不知从何处下手,而且自己写的时候会遇到各种各样的问题.最终写出来了,所以很欣然. 先看下,我在网上找的一些资料 ...
- 基于MATLAB的拼图游戏设计(图文详解,附完整代码)
基于MATLAB的拼图游戏设计 内容摘要:MATL ...
- Unity 使用柏林噪声(Perlin Noise)生成网格地图
前言 最近在尝试制作一个基于网格地图的RPG游戏,所以想着自己生成一个网格地图. 但是网格地图的生成有很多的方式,大多数的方式都达不到我的要求,我需要一个地图可以随机生成各种地形,也可以储存一些地形数 ...
- 10行Python,搭建一个游戏AI | 视频教程
昨天为大家推荐了三个Python视频,包含:<利用Python,用4分钟时间搭建一个情感分析系统>.<7行Python代码,搭建一个可以识花的机器学习APP>.<10行P ...
最新文章
- 一文理解CatBoost!
- java 图像膨胀与腐蚀程序_膨胀和腐蚀 - 解决图像缺陷问题
- python画椭圆-python opencv圆、椭圆与任意多边形的绘制实例详解
- 我的春招求职经验分享(已拿阿里京东网易等 5 个 offer)
- C++全局变量和局部变量有什么区别
- git 服务器搭建,在自己服务器上搭建私有仓库
- ZEN CART 在LINUX系统下设置邮箱方法---用GMAIL设置,方法选择SMTPAUTH
- 【学习笔记】JAVA基础——异常处理部分
- PerfDog-移动端性能测试-基本使用
- oracle数据库日期加一,日期和Oracle数据库
- 数字音频特效的软件实现项目
- java task和thread_【Java学习笔记-并发编程】线程与任务
- linux7怎么配yum,centos7怎么配置yum
- LAMP+Zabbix课程总结
- mysql+instr查询,mysql中使用instr进行模糊查询方法介绍
- 静态RAM读时序分析
- linux全角半角切换快捷键,切换中英文标点快捷键,全角半角之间的转换快捷键
- VUE3 实现前台图片标注添加矩形框、图片放大、缩小、鼠标滚轮缩放
- 《Accurate 3D Face Reconstruction with Weakly-Supervised Learning: From Single Image to Image Set》
- 跨平台第三方平台登录和单点登录
热门文章
- warning: control reaches end of non-void function:错误解决
- tensorflow之tfrecord
- html5表单与Jquery Ajax结合使用
- hadoop开启后jps只有jps一个进程
- abb变频器acs880说明书_ABB变频器ACS880-104/ACS880-204/ACS880-304产品参数及功能介绍
- Python求梅森尼数
- hbase中的master启动后自动关闭
- silverlight安装后网页_纯干货收藏|两个技巧教你完美长截屏网页!
- 传输分析_密西根大学倪军谈信息传输与分析成本:5G的推广让该问题不复存在...
- 学计算机应用基础学到了什么,2021年学习计算机应用基础心得体会-得范文网