人工智能实验平台-五子棋实验手册For v013.docx_第1页
人工智能实验平台-五子棋实验手册For v013.docx_第2页
人工智能实验平台-五子棋实验手册For v013.docx_第3页
人工智能实验平台-五子棋实验手册For v013.docx_第4页
人工智能实验平台-五子棋实验手册For v013.docx_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

AIEP-五子棋实验手册v0.1.5For AIEPv0.1.3快速入口 “竞赛区”助手VS2012注意事项 Eclipse注意事项 .NET用户注意事项 64位Java虚拟机注意事项Eclipse导出jar文件助手 VS导出dll文件助手 v0.1beta-v0.1版本变动 v0.1.1.版本变动 v0.1.2beta版本变动 v0.1.2版本变动 v0.1.2fixed版本变动 v0.1.3版本更新内容 实验目的了解并学会使用某种A*算法,设计启发式估价函数,解决简单的问题。实验背景五子棋是一种两人对弈的策略性游戏。因其简单易学,老少咸宜,并且趣味横生,引人入胜,已经在各游戏平台中现其身影。传统五子棋棋盘为15X15,棋子为黑白两色,并放于棋盘线的交叉点上。游戏开始,两人对局,各执一色,轮流下一子,先将横、竖或斜线的5个或5个以上同色棋子连成不间断的一排者为胜。实验要求在AIEP中,为五子棋下子策略设计2个启发式估价函数,其中每个启发式估价函数有三个等级(以“计算时间”定义等级,具体“计算时间”由“竞赛区”或“裁判员”设定)。实验步骤1. 编写实现(继承)自FIR_AI接口(抽象类)的MyFirAI类如果你是Java用户,请使用Eclipse v3.5.2(或更高版本)导入工程文件夹AIEPClient-JavaAIEP-FIR-AI。如果你是C/C+用户,请使用Visual Studio 2010(或2012)打开工程文件AIEPClient-CPPFIR_AI FIR_AI.sln。如果你是Javascript(或Python)用户,请直接使用任意文本编辑器打开AIEPClient-JavascriptMyFirAI.js(或AIEPClient-PythonMyFirAI.py)。如果你是C#用户,请使用Visual Studio 2010(或2012)打开工程文件AIEPClient-CSharpFIR_AICSharpFIR_AI.sln。如果你是VB.NET用户,请使用Visual Studio 2010打开工程文件AIEPClient-VB.NETFIR_AIVB.NETFIR_AI.sln。如果导入(打开)工程成功,那么我们可以看到MyFirAI这个类(MyFirAI.java、MyFirAI.h、MyFirAI.js、MyFirAI.py)中一共包含如下9个函数: public void setInningInfo(Status myStatus, int limitedTime, StudentInfo opponentInfo, Status piecesArray);/Java、C#publicvoid setInningInfo(Status myStatus, int limitedTime, StudentInfo* opponentInfo, Status piecesArray);/C、C+/* void */ this.setInningInfo = function ( /* Status */ myStatus, /* int */ limitedTime, /*StudentInfo*/opponentInfo, /*Status*/ piecesArray );/Javascript/* void */def setInningInfo( self, /* Status */ myStatus, /* int */ limitedTime, /*StudentInfo*/opponentInfo, /*Status*/ piecesArray );/Python public Step itsmyturn(Step opponentStep);/Java、C#publicStep* itsmyturn( const Step* lastStep);/C、C+/*Step*/this.itsmyturn = function(/*Step*/ opponentStep);/Javascript/*Step*/def itsmyturn(self, /*Step*/ step);/Python public Step itsmyturn2(Step opponentStep);/Java、C#publicStep* itsmyturn2(const Step* lastStep);/C、C+/*Step*/this.itsmyturn2 = function(/*Step*/ opponentStep);/Javascript/*Step*/def itsmyturn2(self, /*Step*/ step);/Python public String getId();/Java、C#publicchar* getId();/C、C+/*String*/ this.getId = function();/Javascript/*String*/def getId(self) ;/Python public String getName();/Java、C#publicchar* getName();/C、C+ /*String*/ this.getName = function();/Javascript/*String*/def getName (self) ;/Python public String getNickname();/Java、C#publicchar* getNickname();/C、C+ /*String*/ this.getNickname = function();/Javascript/*String*/def getNickname (self) ;/Python public boolean isPrintInfo();/Java、C#publicbool isPrintInfo();/C、C+ /*bool*/ this. isPrintInfo = function();/Javascript/*int*/ def isPrintInfo(self) ;/Python public String getVersion();/Java、C#publicchar* getVersion();/C、C+/*String*/ this. getVersion = function();/Javascript/*String*/def getVersion (self) ;/Python public GameTree getLastGameTree();/Java、C#public GameTree* getLastGameTree();/C、C+/* GameTree */this. getLastGameTree = function();/Javascript/* GameTree */def getLastGameTree(self) ;/Python下面依次对以上函数作说明。 setInningInfo函数为棋局设置函数。每一局开始前系统会调用此函数。用户需要在此函数中对自己的数据进行初始化。函数参数说明如下:Status myStatus当前AI在本局游戏中的角色(攻方或守方);int limitedTime 本局游戏最长允许计算时间,当超出该值而itsmyturn/itsmyturn2未返回结果给系统时将会输掉本局;StudentInfo opponentInfo 对手信息,包括Id,Name,Nickname等;Status piecesArray 棋盘状态数组,长度为15*15。 itsmyturn函数为第一个启发式估价函数。每次轮到当前AI下子时系统会调用此函数。用户需要在规定时间内返回结果。函数参数说明如下:Step opponentStep 对手下子位置。Step类包含getX和getY方法,用户可以通过这两个方法获取到对应的位置。请注意,该参数可能无效,如初始棋盘攻方棋子多于守方,并且当前AI为守方。 itsmyturn2为第二个启发式函数,参数意义同上。 getId为获取当前AI的ID值函数,此处请返回用户的唯一标识(如:学号)。 getName为获取当前AI的Name值函数,此处请返回用户的姓名。 getNickname为获取当前AI的Nickname值函数,此处请返回一个绰号,该绰号在公布结果时用到。 isPrintInfo为是否打印调试信息函数。如果该函数返回true,那么客户端每接收到一条消息将会显示相应内容。当然,输赢信息的显示与该函数无关。 getVersion为获取当前AI的版本号。 getLastGameTree获取上一步AI产生的博弈树。2. 调试自己的启发式函数如果你是Java用户,那么你可以在Test.java文件中找到main函数,而如果你是C/C+用户,那么你可以在Test.cpp中找到main函数。如果你是C#用户,那么你可以在Test.cs中找到main函数。如果你是VB.NET用户,那么你可以在Test.vb中找到main函数。main函数很简单,创建一个MyFirAI对象,并传给FIRLoader类,由FIRLoader类对象设置连接服务器(裁判员)地址以及连接端口,并与服务器(裁判员)交互。(注意:Javascript和Python用户不支持该调试功能,请直接转到步骤3。)如果你需要调试自己的启发式函数,那么(1) 启动AIEP服务器(AIEPServer AIEP(32/64-bit).exe,注意:需要安装Java虚拟机);(2) 选择角色:【菜单】系统选择角色裁判员;(3) 选择实验内容:【菜单】系统选择实验五子棋;(4) 启动实验:【菜单】设置(重)启动;下一步,请运行编译生成jar文件或exe文件(或测试文件)。如果选择了机机对战模式,那么请运行两个(次)AI文件。用户也可以通过以下步骤对实验做进一步配置:(1) 配置实验:【菜单】设置扩展设置,此时会弹出模式设置对话框;(2) 选择对战模式:人机对战(MAN vs AI)或机机对战(AI vs AI);(3) 选择先后手:人为攻方(MAN FIRST)或AI为攻方(AI FIRST),如果选择机机对战模式,请忽略此步骤;(4) 设置下棋者Id, Name, Nickname,如果选择机机对战模式,请忽略此步骤;(5) 选择AI所使用的启发式函数;(6) 选择游戏级别:初级(Beginner)、中级(Intermediate)或高级(Advanced);(7) 选择棋盘文件;(8) 点击“(重)启动”按钮启动服务器或点击“应用”按钮保存修改。至此,服务器端设置完毕。3. 导出AI、调试博弈树如果你是Java用户,那么请导出jar文件。如果你是C/C+/.NET用户,那么请导出dll文件。博弈树的调试过程相对有些繁琐:(1) 启动AIEP服务器(AIEPServer AIEP(32/64-bit).exe。(2) 选择角色:【菜单】系统选择角色裁判员;(3) 选择实验内容:【菜单】系统选择实验五子棋;(4) 启动实验:【菜单】设置(重)启动;(5) 再启动一个AIEP服务器(AIEPServer AIEP(32/64-bit).exe。(6) 选择角色:【菜单】系统选择角色站点;(7) 选择实验内容:【菜单】系统选择实验五子棋;(8) 配置:【菜单】设置基本设置,在弹出的对话框中,选择“连接到裁判员”,填写“裁判员”IP以及端口,选择AI文件(Javascript用户和Python用户请直接使用源文件)。(9) 点击“(重)启动”来连接“裁判员”。此时,主界面会显示用户的博弈树。4. 对战与上传AI导出AI文件后,首先,Java用户和.NET用户每一上传版本必须使用唯一的类名。同时.NET用户需要将上传的文件名(不含扩展名)设置为类名。而Javascript用户以及Python请勿修改类名。可以通过以下步骤与其他用户进行对战:(1) 启动AIEP服务器(AIEPServer AIEP(32/64-bit).exe);(2) 选择“站点”角色:【菜单】系统选择角色站点;(3) 选择“五子棋”实验:【菜单】系统选择实验五子棋;(4) 设置远程竞赛区信息:【菜单】设置基本设置,此时弹出“AI站点基本设置”对话框;在此对话框中,选择“连接到竞赛区”,填写“竞赛区”IP以及“在线”(对战)端口,选择AI文件(Javascript用户和Python用户请直接使用源文件)。(5) 点击“(重)启动”来进入对战区。(注意,每次程序启动只能选择一个AI文件,如果需要更换AI文件,请重启程序)。(6) 如果一切正常,那么主界面会以表格的形式展示桌面信息,用户可以通过“双击”某一个对战桌面或“右键”“进入”来选择对战桌面。第一个进入对战桌面的用户需要等待其他用户,并作为先手下子。当第二个用户进入桌面时,游戏立即开始。游戏结束时,桌面信息将会被清空以允许其他用户选择。或者通过以下步骤上传AI文件:(1) 启动AIEP服务器(AIEPServer AIEP(32/64-bit).exe);(2) 选择“站点”角色:【菜单】系统选择角色站点;(3) 选择“五子棋”实验:【菜单】系统选择实验五子棋;(4) 设置远程竞赛区信息:【菜单】设置基本设置,此时弹出“AI站点基本设置”对话框;在此对话框中,选择“连接到竞赛区”,填写竞赛区IP以及发布(结果)端口,选择AI文件。(5) 点击“上传”按钮将AI文件上传到“竞赛区”。用户可以继续通过【菜单】设置(重)启动,视图窗口竞赛区排名,来查看竞赛排名,也可以继续通过【菜单】视图窗口竞赛区状态,来查看竞赛区的基本信息。实验说明1. Status为enum枚举类型,值OFFENSIVE表示攻方,DEFENSIVE表示守方,EMPTY表示空;2. 棋盘横向为X轴,正方向水平向右;纵向为Y轴,正方向为垂直向下;3. 用户需要自己维护棋局状态,当前AI角色(攻方或守方),限定时间等;4. 用户可以直接运行Java版本的测试AI(AIEPClient-Javastart.bat),以及C/C+版本的测试AI(AIEPClient-CPP FIR_AI.exe),测试AI默认在对方右方一格下子;5. 用户可以通过【菜单】视图窗口提示信息窗口,来调试自己的AI;6. 五子棋“裁判员”配置文件为AIEPServerfir_conf.txt,该文件为键值对表。LimitedTime表示限制时间,依次为C/C+的初中高级、Java初中高级,之间用逗号隔开。RemotePort表示棋盘信息端口。7. 当前服务器(裁判员)一共有2种模式:人机对战模式和机机对战模式。两种对战模式都需要选择AI的启发式函数,以及游戏级别(Level)。并且两种模式都可以导入指定的棋盘文件(棋盘文件为文本文件,一共15行,每行一共15个数字,之间用逗号隔开,每个数字代表棋盘中的每个交叉点的属性:数字0表示该位置为空,1表示该位置为攻方棋子白子,-1表示该位置为守方棋子黑子)。当选择人机对战模式时,可以选择AI先行或MAN先行,同时需要填写MAN信息。8. 如果AIEP(32/64-bit).exe运行出现问题,请使用同目录下的start(32/64-bit).bat进行相同操作。9. 如果遇到未知错误,请查看error.log以获取更多信息。结稿时AIEP版本为0.1.3,如果该系统出现任何问题或者您有任何建议,请发邮件至njucs_。 “竞赛区”助手如果你需要创建一个“竞赛区”,那么请执行以下步骤:1. 启动AIEP服务器(aiep(32/64-bit).bat);2. 选择“竞赛区”角色:【菜单】系统选择角色“竞赛区”;3. 选择“五子棋”实验:【菜单】系统选择实验“五子棋”,此时,主界面会显示当前所有上传的AI;4. 设置“竞赛区”基本信息:【菜单】设置基本设置,此时会弹出“AI竞赛区基本设置”对话框,请依次设置“竞赛区”发布端口、上传AI端口、裁判员回复结果端口、模式、是否发布信息,然后点击“(重)启动”按钮(或通过步骤5),来启动“竞赛区”。其中,“模式”分为“在线模式”和“上传”模式。“在线模式”下,“站点”可以查看当前对战桌面,并选择某一桌等待或与另一位正在等待的选手进行PK;“上传模式”下,“站点”可以上传自己的AI文件(.jar/.dll/.js/.py),并在一段时间之后获取AI的排名情况。5. 运行“竞赛区”:【菜单】设置(重)启动;你可以通过【菜单】视图窗口排名,来查看当前竞赛区的排名,或通过【菜单】视图竞赛区状态,来了解竞赛区当前的每场比赛的信息。使用VS2012注意事项C/C+1. 打开.sln文件后,如果提示需要更新,请点击“确定”。2. 请在std.h头文件中,宏定义一个“VS2012”,即取消第22行的注释。使用Eclipse注意事项导入工程后,可能会因为无法找到外部jar文件而导致无法编译。此时,请在工程文件夹上右键构建路径(Build Path)配置构建路径(Configure Build Path),在弹出的对话框的右边,选择选项卡“库(Library)”,编辑(Edit)列表框的3个jar文件路径,修改为工程目录下的jar文件夹下的对应名称的.jar文件。Eclipse导出jar文件在工程目录上“右键”“导出(Export)” ,在弹出的导出对话框中选择“Java” “Jar文件”,然后点击“下一步(Next)”,填写输出文件名,最后点击“完成(Finish)”即可。Visual Studio导出dll文件C/C+首先,使工程的任意一个文件在编辑器中获取焦点,然后选择【菜单】“项目”“项目名称属性” 。在弹出的对话框中,“配置”下拉框选择“所有配置”,“平台”下拉框选择“Win32”,然后依次展开左边的树形结构图:“配置属性”“常规”。此时,将右边的“项目默认值”区的“配置属性”更改为“动态库(.dll)”,如下图所示:点击“确定”完成设置,然后通过【菜单】“调试”“启动调试”来生成dll文件,此时会提示“无法启动dll”,这是因为没有给这个dll设置启动程序所致,这里请忽略之。如果输出窗口提示“生成成功”,那么会在(项目根目录下的)Debug或Release文件夹中生成对应的dll文件。C#/VB.NET首先,使工程的任意一个文件在编辑器中获取焦点,然后选择【菜单】“项目”“项目名称属性” 。在弹出的窗口中,选择“应用程序”选项卡,在“输出类型”下拉框中选择“类库”,如下图所示:按下“Ctrl+S”保存设置,然后通过【菜单】“调试”“启动调试”来生成dll文件,此时会提示“无法直接启动带有类库输出类型的项目”,这是因为没有给这个dll设置启动程序所致,这里请忽略之。如果输出窗口提示“生成成功”,那么会在(项目根目录下的)bin/Debug或bin/Release文件夹中生成对应的dll文件。64位Java虚拟机使用注意事项C/C+如果C/C+用户在64位Java虚拟机上运行本平台,那么请先安装x64服务:以管理员身份运行AIEP/Server/install.bat。该服务将会在开机时自动启动,所以用户只需运行以上脚本一次。注销服务请以管理员身份运行AIEP/Server/uninstall.bat。注意:1. 非C/C+用户不需要执行以上操作。2. 直到AIEPv0.1.3,64位Java虚拟机暂不支持博弈树输出。.NET用户注意事项.NET用户在

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论