《MEX文件在人工智能软件中的应用(精)》由会员分享,可在线阅读,更多相关《MEX文件在人工智能软件中的应用(精)(13页珍藏版)》请在金锄头文库上搜索。
1、.word可编辑.收稿日期:2003-01-05。本论文受国家自然科学基金项目(50275043资助。孙鲁涌,副教授,主研领域:CAD ,智能设计,机构与传动等方面的研究。MEX 文件在人工智能软件中的应用孙鲁涌1,2周异2张云电21(浙江大学生产工程研究所杭州3100272(杭州电子工业学院机电分院杭州310037摘要在使用M AT LAB 软件进行人工智能领域中的研究开发工作时,常会遇到运行速度太慢的问题,合理地使用MEX 文件可有效地解决此问题。本文介绍在Windows 中基于C 语言的MEX 文件的应用方法,并以梵塔程序为例说明运用MEX 文件可显著地优化软件运行效率,这在人工智能等领
2、域的开发应用中有重要作用。关键词人工智能MEX M AT LAB 优化APP LICATION OF MEX FI LE IN ARTIFICIAL INTE LLIGENCE SOFTWARESun Luy ong 1,2Zhou Y i 2Zhang Y undian 21(Institute o f Production Engineering ,Zhejiang University ,Hangzhou 3100272(School o f Mech 2Electronic Engineering ,Hangzhou Institute o f Electronic Engineeri
3、ng ,Hangzhou 310037Abstract While using M AT LAB s oftware to carry on the research and development in the artificial intelligence field ,the problem of slow run in speed of the s oftware was often met.It can be s olved effectively by using MEXfile.In this article ,the way of how developing MEXfile
4、with C language on Windows platform was introduced.F or illustration ,a Hanoi T ower program was developed to show that the application of MEXfile can obviously op 2timize the running efficiency of the s oftware.This makes important function in s oftware development and application in artificial int
5、elligence and other fields.K eyw ords Artificial intelligence MEX M AT LAB Optimization1前言在人工智能等领域的应用软件开发中,为了提高软件的研制效率和质量,需要最大限度地利用开发工具的特长。M AT LAB 作为一个工程应用软件在人工智能领域中已经有了很多的应用。M AT LAB 有其自身的特长,如编程简捷方便,有强大的函数库和工具箱支持,在矩阵运算、数值拟合、二维和三维图形的表达方面具有极强的功能等,但M AT LAB 也存在一些不足,如在某些应用中运行速度偏慢,其应用程序界面开发不如VC 方便强大等。在
6、正确和有效地使用M AT LAB 的同时,适当的结合C 语言程序的应用,可以弥补其不足,使程序质量提高。本文主要讲述采用VC 编写器编写MEX 文件,然后通过在M AT LAB 中加载该MEX 文件来实现M AT LAB 和C 程序的连接,以改善程序的运行效率、提高程序的总体质量,并以具有人工智能特点的梵塔程序为例,介绍上述方法在人工智能领域软件开发中的实际意义和作用。2MEX 文件介绍M AT LAB MEX 文件是M AT LAB 系统的外部程序调用接口。通过它,用户可以完成以下功能:1可以在M AT LAB 系统中像调用M AT LAB 的内建函数一样调用已经存在的用C (C +语言编写
7、的算法,而无需把这些程序重新编写为M AT LAB 的M 文件,从而使资源得到充分利用;2当使用M AT LAB 进行大规模的数据处理时,M AT LAB 往往由于执行效率的问题而显得力不从心,这时可以使用其他高级编程语言进行算法的设计,然后在M AT LAB 中调用,从而大大地提高数据处理的效率;3通过MEX 文件,用户可以直接对硬件进行编程,进一步拓展了M AT LAB 的应用领域。调用并执行的动态链接函数,在Micros oft Windows 操作系统中,这种文件类型的后缀名为dll 。而在其他的平台上,则有较大的变化,例如在Apple 公司的Macin 2tosh 上,后缀名为mex
8、 。MEX 文件的使用极为方便,只需在M AT 2LAB 命令提示符下键入MEX 名即可,与M AT LAB 的内建函数的调用方式完全相同。在本文中,MEX 文件是通过Visual C +集成环境去建立的。3MEX 文件的建立下面通过梵塔程序的编制来说明如何建立MEX 文件。梵塔程序要完成的功能是:有三根竖杆A 、B 、C 。A 杆上套有若干个套圈,套圈外径各不相同,大的在下,小的在上。要求把这n 个套圈从A 杆移到C 杆,在移动过程中可以借助B 杆,每次只允许移动一个圈,且移第21卷第3期计算机应用与软件Vol 121,No 132004年3月C om puter Applications
9、and S oftware Mar 1,2004 图1梵塔程序完成目标示意图动过程中,三根杆上都保持大圈在下,小圈在上。其完成的目标示意图如图1所示 。该MEX文件的主要代码为:v oid m ove(char3getone,char3putoneprintf(%s-%sn,getone,putone;定义指向三个套圈的指针v oid hanoi(int n,char3one,char3tw o,char3threeif(n=1m ove(one,three;elsehanoi(n-1,one,three,tw o;m ove(one,three;hanoi(n-1,tw o,one,thre
10、e;v oid mexFunction(int nlhs,mxArray3plhs,int nrhs,const mxArray3 prhs/3定义程序中使用的变量3/int n;char3one;char3tw o;char3three;int bu flen1,bu flen2,bu flen3,status;/3检查输入输出变量的个数和类型3/if(nrhs!=4mexErrMsgT xt(F our inputs required.;else if(nlhs1mexErrMsgT xt(T oo many output arguments.;if(mxIsChar(prhs1!=1mx
11、IsChar(prhs2!=1mxIsChar(prhs 3!=1mexErrMsgT xt(The second,third and fourth inputs must be a string.;/3获取输入字符串的长度3/bu flen1=(mxG etM(prhs13mxG etN(prhs1+1;bu flen2=(mxG etM(prhs23mxG etN(prhs2+1;bu flen3=(mxG etM(prhs33mxG etN(prhs3+1;/3为字符串指针分配内存3/one=mxCalloc(bu flen1,sizeof(char;tw o=mxCalloc(bu f
12、len2,sizeof(char;three=mxCalloc(bu flen3,sizeof(char;/3从输入参数中获取字符串,并判断操作的正确性3/status=mxG etS tring(prhs1,one,bu flen1;if(status!=0mexW arnMsgT xt(N ot enough space.S tring is trucated.;status=mxG etS tring(prhs2,tw o,bu flen2;if(status!=0mexW arnMsgT xt(N ot enough space.S tring is truncated.;status
13、=mxG etS tring(prhs3,three,bu flen3;if(status!=0mexW arnMsgT xt(N ot enough space.S tring is truncated.;hanoi(n,one,tw o,three;return;从上面的源程序看出,MEX文件主要由两个截然不同的部分组成,它们分工明确,分别用于完成不同的任务:第一部分称为计算程序部分,它包含了所有实际完成计算功能的源代码,用来完成实际的计算工作;第二部分称为接口程序部分,它是计算程序同M AT LAB环境之间的接口,用来完成两者之间的通信任务。接口程序的名字为mexFunction,拥有四
14、个参数,分别为prhs,nrhs,plhs和nlhs,其中prhs为一个mxArray结构体类型的指针数组,该数组的元素按顺序指向所有的输入参数;nrhs为整数类型,它标明了输入参数的个数;plhs同样为一个mxArray结构体类型的指针数组,该数组的元素按顺序指向所有的输出参数, nlhs则标明了输出参数的个数,为整数类型。在接口程序中,用户主要可以完成两个方面的任务:一方面,是从输入的mxArray结构体中获得计算所需的数据,然后在图2梵塔程序的运行过程用户的计算程序中加以使用;另一方面,用户同样可以将计算完毕的结果返回给一个用于输出的mxArray结构体,这样M AT LAB系统就能够认
15、识从用户计算程序返回的结果。MEX文件在Visual C+中调试通过后,可以生成为一个动态链接库文件(filename.dll,然后只要在M AT LAB中调用该动态链接库文件即可。梵塔程序的运行过程界面之一如图2所示。4MEX文件在人工智能软件中的应用意义与作用M AT LAB提供的庞大的工具箱功能,它方便于人工智能方面软件的研究开发,是其它软件工具所无法取代的。但M AT2 LAB对循环语句执行等方面的速度偏慢,常令人无法满意。解决的方法自然就考虑到了如何利用其它计算速度较快的语言工具与之结合使用。当采用MEX接口文件以后,会发现能较好地解决此类问题。可以利用C语言计算速度快的优点,在开发软件时将循环计算等部分内容用C语言来实现、执行,然后编写成MEX文件在M AT LAB里运行之。因此,在进行一些复杂的人工智能问题研究时,采用MEX文件来做,速度会成倍地提高。比如,对上述的梵塔程序这一例子,可采用两种方法来实现该移动操作:第一种就是像上面所述编写MEX文件来运行;第二种是直接在M AT LAB工作空间中进行该操作。通过测试