写在前面

最近在研究游戏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怎么写(一)——高级随机技术相关推荐

  1. MATLAB插值:柏林噪声插值

    这是MATLAB插值拟合系列的第四期,这里附上前几期的链接: 第三期:MATLAB数值拟合:最小二乘多项式拟合 第二期:matlab插值:拉格朗日插值 第一期:[数值分析拟合]Matlab三次样条插值 ...

  2. MATLAB | MATLAB地形生成:矩形迭代法 · 傅里叶逆变换法 · 分形柏林噪声法

    1:矩形迭代法 这个非常简单,就是将矩阵的四个角分别定下初值,之后进行如下形式的迭代就好: [wxyz]⟶[ww+x2xw+y2w+x+y+z4x+z2yy+z2z]+noise.\begin{bma ...

  3. 1.5万字详述 | 全开源:python写小游戏+AI强化学习与传统DFS/BFS控制分别实现

    简介:本周的强化学习我们来到实践部分.我以我在 GitHub 上开源的项目 PiperLiu / Amazing-Brick-DFS-and-DRL 为对象,从零开始与各位朋友分享:如何用 pytho ...

  4. 如何写一个游戏AI(一)

    由于目前游戏的ai最后两手牌打的不尽人意,而手头上的工作又暂时弄完了.就被安排去学习AI,最终目标是重新训练/优化现有的AI.而这只是我的记录,仅仅是偏向我的应用,并不偏向研究.虽然只是这样,但是其实 ...

  5. UnityStandardAsset工程、源码分析_5_赛车游戏[AI控制]_AI机制

    上一章地址: UnityStandardAsset工程.源码分析_4_赛车游戏[玩家控制]_摄像机控制 前几章我们已经将赛车游戏的绝大多数机制分析过了,而Unity还提供了不同的操控模式--AI控制. ...

  6. 3D数学之柏林噪声(Perlin Noise)

    好了,转入正题. 其实它的原理并不是很难,但是由于网上实现的版本太多太杂,真要实现起来竟然不知从何处下手,而且自己写的时候会遇到各种各样的问题.最终写出来了,所以很欣然. 先看下,我在网上找的一些资料 ...

  7. 基于MATLAB的拼图游戏设计(图文详解,附完整代码)

                                                                               基于MATLAB的拼图游戏设计 内容摘要:MATL ...

  8. Unity 使用柏林噪声(Perlin Noise)生成网格地图

    前言 最近在尝试制作一个基于网格地图的RPG游戏,所以想着自己生成一个网格地图. 但是网格地图的生成有很多的方式,大多数的方式都达不到我的要求,我需要一个地图可以随机生成各种地形,也可以储存一些地形数 ...

  9. 10行Python,搭建一个游戏AI | 视频教程

    昨天为大家推荐了三个Python视频,包含:<利用Python,用4分钟时间搭建一个情感分析系统>.<7行Python代码,搭建一个可以识花的机器学习APP>.<10行P ...

最新文章

  1. 一文理解CatBoost!
  2. java 图像膨胀与腐蚀程序_膨胀和腐蚀 - 解决图像缺陷问题
  3. python画椭圆-python opencv圆、椭圆与任意多边形的绘制实例详解
  4. 我的春招求职经验分享(已拿阿里京东网易等 5 个 offer)
  5. C++全局变量和局部变量有什么区别
  6. git 服务器搭建,在自己服务器上搭建私有仓库
  7. ZEN CART 在LINUX系统下设置邮箱方法---用GMAIL设置,方法选择SMTPAUTH
  8. 【学习笔记】JAVA基础——异常处理部分
  9. PerfDog-移动端性能测试-基本使用
  10. oracle数据库日期加一,日期和Oracle数据库
  11. 数字音频特效的软件实现项目
  12. java task和thread_【Java学习笔记-并发编程】线程与任务
  13. linux7怎么配yum,centos7怎么配置yum
  14. LAMP+Zabbix课程总结
  15. mysql+instr查询,mysql中使用instr进行模糊查询方法介绍
  16. 静态RAM读时序分析
  17. linux全角半角切换快捷键,切换中英文标点快捷键,全角半角之间的转换快捷键
  18. VUE3 实现前台图片标注添加矩形框、图片放大、缩小、鼠标滚轮缩放
  19. 《Accurate 3D Face Reconstruction with Weakly-Supervised Learning: From Single Image to Image Set》
  20. 跨平台第三方平台登录和单点登录

热门文章

  1. warning: control reaches end of non-void function:错误解决
  2. tensorflow之tfrecord
  3. html5表单与Jquery Ajax结合使用
  4. hadoop开启后jps只有jps一个进程
  5. abb变频器acs880说明书_ABB变频器ACS880-104/ACS880-204/ACS880-304产品参数及功能介绍
  6. Python求梅森尼数
  7. hbase中的master启动后自动关闭
  8. silverlight安装后网页_纯干货收藏|两个技巧教你完美长截屏网页!
  9. 传输分析_密西根大学倪军谈信息传输与分析成本:5G的推广让该问题不复存在...
  10. 学计算机应用基础学到了什么,2021年学习计算机应用基础心得体会-得范文网