"); //-->
经过我今年对深度学习 机器学习的研究发现 其算法是错误的
计算机是一台以指令为单位的机器 它是不会学习的 所以没有学习算法一说 那是没有认清计算机的本质 学习是人才有的行为 机器怎么会学习吗 它只有指令啊 经过研究发现我们常说的人工智能 主要是如下四个函数构成的 下面我以常见的游戏AI为例讲解其实现 由于已有多年未碰编程 这里只给出大致算法
在游戏中 当角色或者NPC看/听到什么的时候 就开始学习过程 如何学习呢 其实所有的学习都是从理解开始的 下面给出Understand()函数
int Understand(string type, string action, string p1, string p2)
{
string memory;
switch(type)
{
case 'walk'
memory=Walk(action,p1,p2); // Walk()函数根据词典定义及参数p1, p2解释action并将相应的字符串写入memory
break;
case 'run'
memory=Run(action,p1,p2);
break;
case 'fight'
memory=Fight(action,p1,p2);
break;
case 'look'
memory=Look(action,p1,p2); // 比如看这个行为 Understand()函数会把它解释成使视线接触人或事物 并把记忆记在数据库里
// 实际上人在想看东西的时候 检索记忆也是找到上面的解释并做出相应的行为的
break;
......
各种人的行为的函数 // 这里要注意的是行为的归类一定要仔细不要冗余 比如躺和侧躺是一类不能归为2类 我个人估算25个行为左右已经有很好
// 的人工智能70个基本上完美 这个时候Understand才两三百行 对游戏来说是个微不足道的小函数
// 要特别指出的是像跳绳 踢毽子等应该归属于一类Playing()玩游戏
break;
}
Remember(action, memory); // 记忆理解所得的结果即把原始记忆和理解得出的记忆写入数据库 如表hero/NPC
}
第二个函数是Study() 人要认识世界就要各种学习 理解了就学习了 所以
bool Study(string action)
{
action=Look()/action=Listen(); // 通过看或者听学习
string type=IsAction(action); // 判断是某种行为 比如走 跑 说话 看等
string p1,p2;
p1=IsParam1(action); p2=IsParam2(action); // 对行为的一些描述p1 p2
Understand(type, action, p1, p2); // 对行为进行理解并记忆
}
然后 NPC在空闲的时候还会想事情(就是普通的漫无目的想 假定其函数名为Thinking) 想了之后就做某种事情 第三个函数如下
int Thinking()
{
int n=0; // n是随机数 NPC在空闲的时候想什么事情是个随机事件 它随机性的发生
int type=rand()/2; // 2可用其它值 处于某种想之中
switch(type)
{
case 1:
n=OnIdle(); // 在空想 函数给n赋予随机值
break;
case 2:
n=Memory(); // 在回忆 函数给n赋予随机值
break;
......
}
switch(n)
{
case 1:
Walk(); // 某种形式某种目的的行走 与Understand()中那个不同这个是实际的行为 那个是把行走理解成某种行动的字符串数据
break;
case 2:
Talk(); // 某种目的某种内容的谈话
break;
......
default
break;
}
}
最后一个函数 也是最难的一个函数 就是思考(Thought) 对某个问题经过思考得出结果
int Thought(string question)
{
if(LookupMemory(question)) // 在记忆中查找看是否找到 实际上是一个查找数据库的表并在表中的数据项查找的函数
{
string law;
law=Haslaw(question); // 函数中可用IsNum() IsMathChar() IsLaw()等函数判断question里面是否有数字 数学符号 数学/物理法则等
if(law.IsNotNull()) // 看是否包含有法则
{
RunLogic(law); // 运行相应的逻辑法则
}
else
{
// 做其它的事 比如和某个NPC对话
}
return 1;
}
else
{
if(Research(question)) // 研究问题
{
...... // 成功相应的行为
return 1;
}
else
{
...... // 失败相应的行为
return 0;
}
}
}
通过以上四个函数就可以把理解 学习 想事情 思考问题完整的实现出来 完成人工智能的全部功能 这里根本不需要什么深度学习 机器学习 这就是全部的人工智能函数
下面再写两个跟游戏有关及常用的人工智能函数 第一个自动寻路/自动驾驶
自动寻路要注意的一点就是不能把HitTest()当成"轻重缓急"算法写在判断避让那里 因为自动寻路避让障碍的时候是个轻重缓急行为 不是进行碰撞检测
bool AutoDriving(int Character)
{
bool obstacle=Look(); // 看道路上有无障碍
if(obstacle)
{
int distance=OrderofPriority(Character); // 判断轻重缓急
int direction=GetInput(keyboard);
ChangeDirection(direction, distance); // 在距离distance处转向
}
}
一个可能的轻重缓急算法是
int OrderofPriority(int Character)
{
int type=rand()/2; // 轻和重 缓和急是个随机产生的情况 这是客观世界的真实反应 游戏世界也是一样的
switch(type)
{
int min=GetMinimum(); // 测出物体中心到前端的距离的最大值即碰撞距离 不碰撞只要大于它就行了 比如可以略大于它 也可以+1 +2 +5厘米或者加个随机数
int senmin,senmax;
GetDistanceSensitivity(Character,senmin,senmax); // 得到角色的最小最大距离敏感度 一个查询数据库的函数
case 1: // 轻/缓
return min+(rand()/0.1~1)+senmax; // 大于碰撞距离小于等于角色最大距离敏感度并略有出入的随机数 或者其它可自定
break;
case 2: // 重/急
return min+(rand()/0.1~1)+senmin; // 大于碰撞距离小于等于角色最小距离敏感度并略有出入的随机数 或者其它可自定
break;
}
}
第二个真实打斗 主要用在怪物和敌人与角色打斗/战斗 这个函数主要是随机数加上一些三十六计计谋即可 如
int RealFighting()
{
int type=rand()/50; // 计谋中的一种 包括连环计 计中计
switch(type)
{
case 1:
声东击西();
break;
case 2:
围魏救赵();
break;
case 3:
四面楚歌();
火上浇油();
break;
......
}
}
甚至还可以写出复合体及变体
提到游戏中人工智能 很多时候都是个随机数问题 因为自然界中的事都是随机发生的 当然到了虚拟世界里面 各种事情也是个随机性的 恰好有rand()函数能很好的解决这一问题
欢迎转载
专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们
相关推荐
AOS 推出 SmartClamp 智能功率级 适配 AI 高动态电流应力工况
硬件革新:借助稀疏计算让AI算力提质降耗
数字PID控制算法之一
ADI公司:工业4.0——人工智能的端
求FSK信号的解调算法,主要是铁路上的移频信号!
软银宣布已在日本正式启动电池业务 满足AI电力需求
有简单人工智能的温度控制电路
莱迪思联手英伟达推出 Sensor Bridge 方案 加速边缘 AI 产品落地
[转帖]us/os就绪表的维护算法分析
简单实用的单片机CRC 快速算法
有关指纹算法
个人-窗口卫士项目采访
vxwokrs下静态图像压缩算法(上)
CRC算法原理及C语言实现
目标跟踪算法在红外热成像跟踪技术上的应用
有简单人工智能的温度控制电路图
人工智能与机器人
AI 全域数字孪生加速半导体与电子系统研发落地
计算机科学与技术反思录(2)
2026 全球半导体产业冲刺 1 万亿美元规模
光电路交换何以成为 AI 数据中心刚需
面向算法硬件加速的FPGA实现方法
PID算法
加密算法之MD5算法
基于LPC2138的血压测量算法开发平台电路图
微软X英特尔黑客松大赛
中国硅片国产化提速 带动奕斯伟产能大幅扩张
三菱携手Tallgrass布局怀俄明州 AI 专属能源枢纽
简单人工智能的温度控制电路
个人-口罩识别系统项目采访