多智能体技术及应用
上QQ阅读APP看书,第一时间看更新

1.6 人工智能编程语言

人工智能(AI)语言是一类适应于人工智能和知识工程领域的、具有符号处理和逻辑推理能力的计算机程序设计语言。能够用它来编写程序求解非数值计算、知识处理、推理、规划、决策等具有智能的各种复杂问题。

1.几种人工智能编程语言

人工智能是一个很广阔的领域,很多编程语言都可以用于人工智能开发,所以很难说人工智能必须用哪一种语言来开发。选择多也意味着会有优劣之分,并不是每种编程语言都能够为开发人员节省时间及精力。在人工智能的研究发展过程中,从一开始就注意到了人工智能语言问题。实际上60年来有一百来种人工智能语言先后出现过,但很多都被淘汰了。现在典型的人工智能语言主要有LISP、Prolog、Smalltalk、Java、Python,还有多智能体编程语言Netlogo、Swarm、Repast、MASON、Any Logic等。

(1)LISP

1958年,John McCarthy设计了LISP语言。语言格式只有一个形式:列表,所以也称为表处理语言,这不是一般的表,是可以包容任意结构的表,有了它,完全不用C语言来写链表,二叉树的程序,学习数据结构不妨使用LISP,让你更加关心算法、而不是数据如何在计算机内部表达。列表是LISP的精华之一。LISP语言是为处理人工智能中大量出现符号编程问题而设计的,它的理论基础是符号集上的递归函数论。已经证明,用LISP可以编出符号集上的任何可计算函数。

(2)Prolog

Prolog语言是人工智能领域常用的语言,开发自然语言分析,专家系统,以及所有和智能有关的程序。Prolog语言是为处理人工智能中也是大量出现的逻辑推理问题(首先是为解决自然语言理解问题)而设计的。它的理论基础是一阶谓词演算(首先是它子集Horn子句演算)的消解法定理证明,其计算能力等价于LISP。

(3)Python

Python是一种解释型、交互式、面向对象的语言,由于简单易用,是人工智能领域中使用最广泛的编程语言之一,它可以无缝地与数据结构和其他常用的人工智能算法一起使用。

Python采用动态数据结构,也就是说变量没有数据类型,这一点和LISP十分相似,在python中所有事物都是对象(object),字符串、函数以至于类和模块。Python之所以适合人工智能项目,也是基于Python的很多有用的模块库都可以在人工智能中使用,如Numpy提供科学的计算能力,Scypy的高级计算和Pybrain的机器学习。另外,Python有大量的在线资源,所以学习曲线也不会特别陡峭。

(4)Java

Java也是人工智能项目的一个很好的选择。它是一种面向对象的编程语言,专注于提供人工智能项目上所需的所有高级功能,它是可移植的,并且提供了内置的垃圾回收。另外,完善丰富的Java社区生态可以帮助开发人员随时随地查询和解决遇到的问题。

对于人工智能项目来说,算法几乎是灵魂,无论是搜索算法、自然语言处理算法还是神经网络,Java都可以提供一种简单的编码算法。另外,Java的扩展性也是人工智能项目必备的功能之一。

(5)基于多智能体编程

近年来出现了具有人工智能特色基于多智能体的程序设计,基于多智能体(Multi-Agent System)程序设计。本书主要采用了这种方法。

基于智能体的模型通常用编程语言实现,并使用计算机模拟进行探索。目前应用得比较多的基于Agent的模拟平台有Netlogo、Swarm、Repast、MASON、Any Logic等,通过对各个软件进行比较,本书选择Netlogo软件作为模拟仿真平台。Netlogo是一个多智能体可编程建模环境(更多信息和下载方法请参见https://ccl.northwestern.edu/Netlogo/)。Netlogo被广泛用于向几乎没有编程经验的学生教授模拟和建模。目前的最新版本为Netlogo 6.1.0。

2.Netlogo介绍

Netlogo编程特点:

1)软件环境兼容性好:Netlogo运行在Java虚拟机上,所以它可以运行在所有主要平台上(Mac、Windows、Linux等)。它作为桌面应用程序运行,还支持命令行操作。

2)编程语言结构简单:logo语言非常接近自然语言(英语),学习起来最为简单,对于缺乏编程学习背景的研究者最为友好;Netlogo也遵循Logo易用性的理念,为新用户提供“低门槛”的入口。Netlogo允许用户打开模拟并与他们“交互”,探索他们在各种条件下的行为。Netlogo也是一个非常简单的创作环境,学生和研究人员可以创建自己的模型,即使他们不是专业的程序员。

3)多智能个体和并发性:Netlogo源于并行LISP,是一种多智能体的编程语言和模拟自然和社会现象的建模环境。它特别适合于建模随时间发展的复杂系统。建模人员可以向数百或数千个独立的“智能体”发出指令,这些“智能体”都可以同时运行,因此,Netlogo建模能很好地模拟微观个体的行为和宏观模式的涌现及其两者之间的联系。

4)Netlogo可以与其他应用程序交换数据:该语言包含允许读写任何类型文本文件的命令。还有以标准格式导出和导入数据的功能。世界的完整状态可以以一种易于使用其他软件打开和分析的格式保存和恢复。图形化数据可以导出,以便使用其他工具进行呈现和分析。图形窗口或模型整个界面的内容可以保存为图像。可以使用标准实用程序将图像转换为电影。完成的模型可以作为Java Applet在Web上发布。

3.Netlogo的主要功能

(1)建模

Netlogo模型的基本假设是:将空间划分为网格,每个网格是一个静态的Agent,多个移动Agent分布在二维空间中,每个Agent自主行动,所有主体并行异步更新,整个系统随着时间推进而动态变化。

(2)模拟运行控制

Netlogo可以采用命令行方式或通过可视化控件进行模拟控制。在命令行窗口可以直接输入命令,另外还提供了可视化控件实现模拟运行控制,进行模拟初始化、启动、停止、调整模拟运行速度等。还提供了一组控件,如开关、滑动条、选择器等,用来修改模型中的全局变量,实现模拟参数的修改。

(3)可视化显示

软件提供了二维和三维的模拟视图,用户可以随时、多角度观看模拟过程。提供了多种手段实现模拟运行监视和结果输出。在主界面中有一个视图(View)区域显示整个空间上所有Agent的动态变化,可以进行2D/3D显示,在3D视图中可以进行平移、旋转、缩放等操作。另外可以对模型中的任何变量、表达式进行监视,可以实现曲线/直方图等图形输出或将变量写入数据文件。

(4)实验管理模拟

Netlogo提供了一个实验管理工具BahaviorSpace,通过设定模拟参数的变化范围、步长、设定输出数据等,实现对参数空间的抽样或穷举,自动管理模拟运行,并记录结果。

(5)系统动力学模拟

系统动力学是应用广泛的一类社会经济系统模拟方法,但与多主体模拟有不同的建模思想。Netlogo可以直接进行系统动力学建模仿真。

(6)参与式模拟

Netlogo提供了一个分布式模拟工具,称为HubNet,实现模型服务器和客户端之间的通信。多个参与者可以通过计算机或计算器分别控制模拟系统的一部分,实现参与式模拟(participatory simulation)。

(7)模型库

Netlogo收集了许多复杂系统经典模型,涵盖数学、物理、化学、生物、计算机、经济、社会等许多领域。这些模型可以直接运行,例子中的文档对模型进行了解释、为可能的扩展提供了建议。建模人员可以通过阅读经典实例的程序代码,学习建模技术,或在研究相关问题时以此为基础进行扩展或修改,大大减少了技术难度和工作量。

快速了解Netlogo到底建模是什么样的,你可以打开它自带的模型库,可以看到会有很多自带模型:样例模型(Sample Model)、课程模型(Curricular Model)、代码示例(Code Example)和参与者模拟(Hubnet Activities)。

开始使用Netlogo的用户通常首先要浏览Netlogo的模型库。这个集合有超过140个预构建的模拟,可以进行探索和修改。这些模拟涉及自然科学和社会科学的许多内容领域,包括生物和医学、物理和化学、数学和计算机科学以及经济学和社会心理学。Netlogo正被用于构建各种各样的模拟。海龟可以代表分子、狼、买家、卖家、蜜蜂、部落成员、鸟类、蠕虫、选民、乘客、金属、细菌、汽车、机器人、中子、磁铁、行星、牧羊人、恋人、蚂蚁、肌肉、网络工作者等等。小块的土地被制成树木、墙壁、地形、水道、洞穴、植物细胞、癌细胞、农田、天空、课桌、毛皮、沙子,应有尽有。海龟和地块也可以用来形象化和研究数学抽象,或者用来制作艺术品和玩游戏。主题包括细胞自动机、遗传算法、正负反馈、进化和遗传漂变、种群动力学、寻路和优化、网络、市场、混沌、自组织、人工社会和人工生命。这些模型都分享了我们关于复杂系统和涌现的核心主题。

(8)Netlogo最强大的一个方面是扩展功能

主要包括:

1)通过与其他语言(如python和r)集成来扩展其功能的能力;

2)地理信息系统(GIS extension)的扩展,它允许矢量和栅格数据直接集成到Netlogo环境中;

3)位图扩展(Bitmap Extension)允许您操作并将图像导入到绘图和地块中。它提供了Netlogo核心原语没有提供的功能,例如:缩放、对不同颜色通道的操作、宽度和高度报告器;

4)水平空间扩展(LevelSpace),模型将能够使用LevelSpace原语加载其他模型,在其中运行命令和报告程序,并在不再需要它们时关闭它们;

5)矩阵扩展为Netlogo添加了一个新的矩阵数据结构。矩阵是一个只包含数字的可变二维数组;

6)CSV扩展可以在Netlogo中使用CSV格式的数据;

7)table扩展可以在Netlogo中使用表格中的数据。

(9)模型运行后可以导出数据,为难获取数据场景提供了可选择方案

例如:

1)导出世界——保存所有变量、所有海龟和地块的当前状态、绘图、输出区域和随机状态信息到一个文件;

2)导出绘图——将绘图中的数据保存到文件中;

3)导出视图——保存当前视图的图片(2D或3D)到一个文件中(PNG格式)。

(10)可以导入数据,为Netlogo提供数据,例如:

1)导入世界——加载导出世界保存的文件;

2)导入地块颜色——将图像加载到地块中;

3)导入地块颜色RGB——使用RGB颜色将图像加载到地块中;

4)导入绘图——将图像加载到绘图中。

4.人工智能语言特点

由于人工智能研究的问题的特点和解决问题的方法的特殊性,为了能方便而有效地建立人工智能系统,需要发展专门的人工智能语言。人工智能语言的特点是什么,亦即人工智能语言应具备的特征是什么?

一般来说,人工智能语言应具备如下特点:

1)要有符号处理能力(即非数值处理能力);

2)适合于结构化程序设计,编程容易(要把系统分解成若干易于理解和处理的小单位的能力,从而既能较为容易地改变系统的某一部分,而又不破坏整个系统);

3)要有递归功能和回溯功能;

4)要有人机交互能力;

5)适合于推理;

6)要有把过程与说明式数据结构混合起来的能力,又要有辨别数据、确定控制的模式匹配机制。