打印

计算机人工智能技术纵览---入门部分

[复制链接]
2484|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本文尽量用简单的例子,易懂的语言来综述一些人工智能的主流技术,其实很多看似高深复杂的技术原理,都是可以用一句话直接点透核心原理。



请注意:本文有的技术被分为两个部分,第一部分为面向初学者的原理介绍,第二部分为面向程序员的进阶编程内容,非程序员请忽略第二个部分。



为了能直观简单的领略人工智能技术从低到高的过程,我们从最简单的乐高机器人自动倒垃圾开始。其实楼主写这篇**也是自我学习的过程,开发了很多年的游戏,人工智能技术运用了不少,但是都是在虚拟游戏世界中的,但是这回买了一台真正的机器人,很想将这些技术运用在现实中,于是整理了这篇**


http://www.tudou.com/programs/view/jzkkUHmMSbM

相关帖子

沙发
keer_zu|  楼主 | 2015-4-3 09:28 | 只看该作者
一、入门技术


(1)自动流水线技术

这是最为简单的人工智能技术了,程序中可能连IF ELSE 都不需要,以这个乐高机器人倒垃圾的程序来说,他的步骤很简单:

1.启动
2.电机后退10圈
3.左电机转3圈(转身)
4.电机前进5圈
5.翻转垃圾桶,倒垃圾
6.等待2秒后,翻转还原垃圾桶
7.原路返回

这项技术的缺点也很明显,由于简单,可以说应付不了任何突发情况,而且只要把他放在别人家里,或者更换起点,他就找不到垃圾桶的位置了。


---------------------------------------------------------------------------------------------------------------


(2)布尔逻辑 IF ELSE


这个技术就是我们程序员最喜欢的 if else了,如果...那么... 否则...


比如这台倒垃圾机器人,我们可以利用头上的红外线传感器,做if else判断,如果红外线传感器返回的值小于XXX,那么就开始倒垃圾,这样就比流水线机器人智能一些,他可以通过红外线传感器,感知到你在伸手在他面前放垃圾,然后他会自动开启1中所示的程序。


---------------------------------------------------------------------------------------------------------------
(3)有限状态机(FSM)

可以说,从现在开始,才真正的进入了人工智能的领域,上面的只是最基本的程序概念。

有限状态机,其实就是由更多的IF ELSE来实现的,简单的理解就是IF ELSE的多层嵌套。


例如,这个倒垃圾机器人,就可以有三个状态:
1.待命状态
2.移动状态
3.倒垃圾状态



【状态机第一个重要功能:就是可以自定义状态切换的顺序】


例如这三个状态的切换是这样的
1.待命
2.移动
3.倒垃圾
4.移动
5.待命


他比IF ELSE的优势在于,状态机可以随意跳转到任意状态,反复执行,而不是固定死的流程。

【状态机第二个重要功能,就是可以赋予每个状态,不同的响应】


例如,我们可以只在待命状态下,加入IF ELSE ,如果红外线传感器值<XXX(感知到前方有人手在放垃圾) ,那么跳转到移动状态。 这样,这段IF ELSE 只会在待命状态下生效,而移动过程中,则不受干绕。

【状态机第三个重要功能,就是历史记录功能】


例如在移动状态中我们写了一个IF ELSE,如果声音传感器收到了“停”这个声音,那么跳转回待命状态,并记录当前已经走过的步骤,比如已经后退了10圈,并转身2.5圈。那么在待命状态下,我们又给机器人放上额外的垃圾,触发机器人的移动状态,这时机器人不会从移动状态的开始进行,而是从我们刚刚停止的那个位置进行,机器人会知道他已经后退了10圈,并转了一半的身,这时他们继续转完剩下的一半,然后前进5圈,跳转到倒垃圾状态。


有限状态机的基本原理到此结束,下面是程序员进阶部分:


====================如果你没接触过编程,可以忽略此部分===================

对于有限状态机,在程序中有个通用的图纸表达方式,那就是UML图中的状态图(Statechart Diagram)
图中展示的,就是一张状态机图:

箭头:代表我们说的第一个功能,状态切换.

方框:代表我们说的第二个功能,自定义状态功能,大的方框代表大状态,里面可以包含多个子状态,子状态里面还可以包括更小的子状态。每个状态的功能都是不同的。

(圆圈H)图标:代表我们说的第三个功能,历史记录,例如关闭电源状态Power Off,会记录当前其它状态的运行情况,然后再次开机时,继续原有的进程运行。


想深度学习UML状态图的朋友请点击:http://www.cnblogs.com/ywqu/archive/2009/12/17/1626043.html


这里推荐一个C++状态机程序库,Boost库中的statechart库。


Boost是大名鼎鼎的C++准标准库,相信C++程序员都不陌生,但是其中statechart库确很少有人使用,Boost.statechart库完美的支持UML状态图,跟据图纸,你可以轻松的用boost.statechart库搭建你需要的有限状态机组。

想深度学习C++ Boost.statechart库的请点击:http://blog.csdn.net/521/article/details/5565144





---------------------------------------------------------------------------------------------------------------
工作比较忙,中级部分内容待续中......(模糊状态机FUSM,决策树,博弈论,A星D星寻路算法,空间搜索算法)

使用特权

评论回复
板凳
keer_zu|  楼主 | 2015-4-3 11:45 | 只看该作者

使用特权

评论回复
地板
keer_zu|  楼主 | 2015-4-4 11:48 | 只看该作者
抽丝剥茧嘛,慢慢来

使用特权

评论回复
5
shdjdq| | 2015-4-6 13:26 | 只看该作者
不错

使用特权

评论回复
6
HORSE7812| | 2015-4-6 15:11 | 只看该作者

使用特权

评论回复
7
robin_kb| | 2015-5-8 15:22 | 只看该作者

使用特权

评论回复
8
gxwzq| | 2015-5-12 17:16 | 只看该作者
okk

使用特权

评论回复
9
cxdylee| | 2015-5-13 11:01 | 只看该作者
MARK,好东西。

使用特权

评论回复
10
han0097| | 2015-5-13 11:10 | 只看该作者
好,支持!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:qq群:49734243 Email:zukeqiang@gmail.com

1350

主题

12427

帖子

53

粉丝