AI实验四实验报告课件
人工智能实验报告四

人工智能实验报告四课程实验报告课程名称:人工智能实验项目名称:实验四:分类算法实验专业班级:姓名:学号:实验时间:2021年6月18日实验四:分类算法实验一、实验目的1.了解有关支持向量机的基本原理2.能够使用支持向量机的代码解决分类与回归问题3. 了解图像分类的基本原理二、实验的硬件、软件平台硬件:计算机软件:操作系统:***** 10应用软件:C+ + ,Java或者Matlab三、实验内容支持向量机算法训练分类器:1.训练数据集:见文档“分类数据集.doc”,前150个数据作为训练数据,其他数据作为测试数据,数据中“ + 1”“-1”分别表示正负样本。
2.使用代码中的C-SVC算法和默认参数来训练“分类数据集doc”中所有的数据(包括训练数据和测试数据),统计分类查准率。
3.在2的基础上使用k-折交叉验证思想来训练分类器并统计分类查准率。
4.使用2中的设置在训练数据的基础上学习分类器,将得到的分类器在测试数据上进行分类预测,统计查准率。
5.在4上尝试不同的C值("-c”参数)来调节分类器的性能并绘制查准率曲线。
6.尝试不同的kernel函数("-t”参数)来调节分类器的性能并绘制查准率曲线,对每种kernel函数尝试调节其参数值并评估查准率。
四. 实验操作采用提供的windows版本的libsvm完成实验。
1.文档“分类数据集.doc”改名为trainall.doc,前150组数据保存为train.doc 后120 组保存为test.doc2.使用代码中的C-SVC算法和默认参数来训练“分类数据集.doc” 中所有的数据(包括训练数据和测试数据),统计分类查准率。
用法:svm-scale [-l lower] [-u upper] [-y y_lower y_upper] [-s save_filename] [-r restore_filename] filename (缺省值:lower =- 1, upper = 1,没有对y进行缩放)按实验要求这个函数直接使用缺省值就行了。
人工智能实验报告

人工智能实验报告实验一 在搜索策略实验群实验目的熟悉和掌握启发式搜索的定义、估价函数和算法过程,并利用A*算法求解N 数码难题,理解求解流程和搜索顺序。
搜索图算法比较广度优先深度优先 A*Open 表 节点G ,节点10节点G ,节点6节点3,节点9,节点G ,节点10,节点8Close 表节点s ,节点1,节点2,节点3,节点4,节点5,节点6,节点7,节点8,节点9 节点s,节点1,节点3,节点7,节点4,节点8,节点2,节点5,节点9节点s ,节点2,节点1,节点5,节点6,节点4估价函数无无)()()(n h n g n f +=搜索节点次序记录 节点s ,节点1,节点2,节点3,节点4,节点5,节点6,节点7,节点8,节点9,节点G 节点s,节点1,节点3,节点7,节点4,节点8,节点2,节点5,节点9,节点G 节点s ,节点2,节点1,节点5,节点6,节点4,节点G观测结果 经过11步搜索得到目标节点经过10步搜索得到目标节点经过7步搜索得到目标节点学生结论宽度优先搜索能保证在搜索树 深度优先搜索要沿路径一条一 A*算法是启发式算法的一中找到一条通向目标节点的最短路径,但由于盲目性大所以当搜索数据比较多的时候该方法较为费时。
条的走到底,如果目标在前几条路径中那么该搜索会较为快捷,在本搜索树中虽然比宽度优先少一步,但是若第一条路径或者某几条路径很深,则该搜索会相当耗时且不能保证成功。
种能通过路径的权值找出代价最为小的一条,所以很具优越性,但是算法本身计算较为复杂,要考虑以前的和将来两方面的代价,进行估算,所以没有前两种方法简单。
实验二:产生式系统实验实验目的熟悉和掌握产生式系统的运行机制,掌握基于规则推理的基本方法。
推理方法□ 正向推理 □ 反向推理建立规则库 建立事实库该动物是哺乳动物 <- 该动物有毛发. 该动物是哺乳动物 <- 该动物有奶.该动物是鸟 <- 该动物有羽毛.该动物是鸟 <- 该动物会飞&会下蛋. 该动物是食肉动物 <- 该动物吃肉.该动物是食肉动物 <- 该动物有犬齿&有爪&眼盯前方. 该动物是有蹄类动物 <- 该动物是哺乳动物&有蹄. 该动物是有蹄类动物 <- 该动物是哺乳动物& 是嚼反刍动物.该动物是金钱豹 <- 该动物是哺乳动物&是食肉动物&是黄褐色&身上有暗斑点.该动物是虎 <- 该动物是哺乳动物&是食肉动物&是黄褐色&身上有黑色条纹.该动物是长颈鹿 <- 该动物是有蹄类动物&有长脖子&有长腿&身上有暗斑点.该动物是斑马 <- 该动物是有蹄类动物&身上有黑色条纹.该动物是鸵鸟 <- 该动物是鸟&有长脖子&有长腿&不会飞&有黑白二色.该动物是企鹅 <- 该动物是鸟&会游泳&不会飞&有黑白二色.该动物是信天翁 <- 该动物是鸟&善飞.%------动物识别系统事实集: %--该动物是企鹅 会游泳. 不会飞.有黑白二色. %该动物是鸟.%-------- %--该动物是鸟 该动物会飞.会下蛋.%----该动物是金钱豹 <- 该动物是哺乳动物&是食肉动物&是黄褐色&身上有暗斑点. 该动物有毛发. %是食肉动物. 是黄褐色. 身上有暗斑点. 该动物吃肉.%----该动物是虎 <- 该动物是哺乳动物&是食肉动物&是黄褐色&身上有黑色条纹.该动物是哺乳动物.%是食肉动物. 是黄褐色.身上有黑色条纹.%----该动物是长颈鹿 <- 该动物是有蹄类动物&有长脖子&有长腿&身上有暗斑点. %该动物是有蹄类动物. 有长脖子. 有长腿. 身上有暗斑点.%----该动物是有蹄类动物 <- 该动物是哺乳动物&有蹄. %有蹄.预测结果在相关询问:该动物是哺乳动物? 该动物是鸟? 该动物是食肉动物? 该动物是金钱豹?该动物是鸵鸟?该动物是企鹅?时为真,其余为假。
AI实验报告

AI实验报告1. 实验目的本次实验旨在探索人工智能(AI)在特定领域的应用,并评估其性能和效果。
通过利用AI技术,我们希望实现更高效、准确的数据分析和处理,并提供可行的解决方案。
2. 实验方法为了完成实验目的,我们采用以下步骤:2.1 数据收集:从相关数据库和实验场景中收集必要的数据,并确保数据的质量和准确性。
2.2 数据预处理:对收集到的数据进行清洗、去噪和标准化处理,以提高后续算法的准确性。
2.3 特征提取:通过选择合适的特征和特征工程方法,将原始数据转化为机器学习模型可以识别和处理的形式。
2.4 模型选择:根据实验需求和数据特点,选择适当的AI模型进行实验。
考虑到模型的性能和效果,我们选择了XXX模型作为我们的实验对象。
2.5 模型训练:利用标注数据对选择的AI模型进行训练,并通过合适的优化算法提高模型的收敛速度和准确率。
2.6 模型评估:使用测试集评估训练得到的模型的性能指标,包括准确率、召回率、精确率等,并与已有的方法进行对比。
2.7 结果分析与总结:对实验结果进行详细分析和总结,包括模型的优势与不足之处,并提出改进方案。
3. 实验结果经过实验,我们获得了如下结果:3.1 数据预处理:通过进行数据清洗、去噪和标准化处理,我们获得了高质量、准确的数据集。
3.2 特征提取:通过应用特定的特征选择和特征工程方法,我们获得了对于所研究问题来说最具区分度的特征集。
3.3 模型训练:经过充分的训练和优化,我们的AI模型在训练集上实现了较高的准确率和收敛速度。
3.4 模型评估:通过在测试集上的评估,我们的AI模型在各项性能指标上取得了令人满意的结果,超过了已有方法的效果。
4. 结果分析与讨论根据实验结果,我们得出以下结论:4.1 AI在特定领域的应用:通过本次实验,我们验证了AI在特定领域中的应用潜力。
AI模型能够高效地处理大规模数据,并提供准确的预测和解决方案。
4.2 模型优势与不足:尽管我们的AI模型在大多数性能指标上表现出色,但仍存在一些潜在的问题和局限性。
人工智能实验报告四

人工智能实验报告四在当今科技飞速发展的时代,人工智能已经成为了引领创新和变革的重要力量。
本次实验旨在深入探究人工智能在特定领域的应用和表现,以期为未来的研究和实践提供有价值的参考。
实验的背景是随着数据量的爆炸式增长和计算能力的大幅提升,人工智能技术在图像识别、自然语言处理、智能推荐等领域取得了显著的成果。
然而,其在某些复杂场景下的性能和可靠性仍有待进一步提高。
实验的目标主要有两个:一是评估某个人工智能模型在处理特定任务时的准确性和效率;二是分析该模型在不同参数设置下的表现差异,寻找最优的配置方案。
为了实现上述目标,我们首先进行了充分的实验准备工作。
收集了大量相关的数据集,并对其进行了预处理,包括数据清洗、标注和划分。
同时,确定了实验所需的硬件和软件环境,确保实验的顺利进行。
在实验过程中,我们采用了多种技术手段和方法。
例如,运用了深度学习中的卷积神经网络(CNN)来处理图像数据,利用循环神经网络(RNN)及其变体长短时记忆网络(LSTM)来处理序列数据。
此外,还尝试了不同的优化算法,如随机梯度下降(SGD)、Adagrad、Adadelta 等,以提高模型的训练速度和收敛效果。
通过一系列的实验,我们得到了丰富的实验结果。
在准确性方面,模型在某些任务上的表现达到了较高的水平,但在一些复杂和模糊的情况下仍存在一定的误判。
效率方面,不同的模型结构和参数设置对训练时间和推理速度产生了明显的影响。
进一步分析实验结果发现,数据的质量和数量对模型的性能起着至关重要的作用。
高质量、大规模的数据能够显著提升模型的泛化能力和准确性。
同时,模型的超参数调整也是一个关键环节,合适的学习率、层数、节点数等参数能够有效提高模型的性能。
然而,实验中也遇到了一些问题和挑战。
例如,模型的过拟合现象时有发生,导致在新数据上的表现不佳。
此外,计算资源的限制也在一定程度上影响了实验的规模和效率。
针对这些问题,我们提出了相应的改进措施和建议。
AI实验报告

目录人工智能及其应用........................................................................................... 错误!未定义书签。
实验报告................................................................................................... 错误!未定义书签。
实验一产生式系统实验群. (2)一、实验目的: (2)二、实验原理: (2)三、实验条件: (3)四、实验内容: (3)五、实验步骤: (3)实验二搜索策略实验群搜索策略: (6)一、实验目的: (6)二、实验原理: (6)三、实验条件: (6)四、实验内容: (6)五、实验步骤: (7)六:实验过程: (7)七、A*算法流程图: (18)八、实验结论: (19)实验三神经网络实验群 (20)一、实验目的: (20)二、实验原理: (20)三、实验条件: (20)四、实验内容: (20)五、实验步骤: (21)六、实验结论: (21)实验四自动规划实验群 (25)一、实验目的: (25)二、实验原理: (25)三、实验条件: (25)四、实验内容: (26)五、实验步骤: (26)实验一产生式系统实验群产生式系统: 是由一组规则组成的、能够协同作用的推理系统。
其模型是设计各种智能专家系统的基础 .产生式系统主要由规则库、综合数据库和推理机三大部分组成。
本实验环境主要提供一个能够实现模拟产生式专家系统的验证、设计和开发的可视化操作平台。
学生既能用本系统提供的范例进行演示或验证性实验,也能够用它来设计并调试自己的实验模型。
一、实验目的:熟悉和掌握产生式系统的运行机制,掌握基于规则推理的基本方法。
二、实验原理:生式系统用来描述若干个不同的以一个基本概念为基础的系统,这个基本概念就是产生式规则或产生式条件和操作对。
人工智能实验报告

人工智能实验报告摘要:人工智能(AI)是一种模拟和模仿人类智能的技术,它可以模拟人类的思维和决策过程。
本实验报告旨在介绍人工智能的基本概念、发展历程、应用领域以及实验结果。
实验结果显示,人工智能在各个领域都取得了显著的成果,并且在未来的发展中有着广泛的应用前景。
引言:人工智能是一个非常有趣和有挑战性的领域,吸引了许多研究人员和企业的关注。
人工智能技术可以应用于各种领域,包括医疗、金融、交通、教育等。
本实验报告将通过介绍人工智能的基本概念和应用案例,以及展示实验结果,来展示人工智能的潜力和发展前景。
一、人工智能的基本概念人工智能是一种模拟和模仿人类智能的技术,主要包括以下几个方面:1. 机器学习:机器学习是人工智能的一个重要分支,它通过让机器学习自己的模式和规则来实现智能化。
机器学习的方法包括监督学习和无监督学习。
2. 深度学习:深度学习是机器学习的一个子集,它模拟了人类大脑的神经网络结构,可以处理更复杂的问题并取得更好的结果。
3. 自然语言处理:自然语言处理是指让计算机理解和处理人类语言的能力。
这个领域涉及到语音识别、语义分析、机器翻译等技术。
二、人工智能的发展历程人工智能的发展可以追溯到上世纪50年代,当时研究人员开始探索如何使计算机具备智能。
但是由于当时计算机的处理能力和算法的限制,人工智能的发展进展缓慢。
直到近年来,随着计算机技术和机器学习算法的快速发展,人工智能迎来了一个新的发展阶段。
如今, 人工智能技术在各个领域中得到了广泛的应用。
三、人工智能的应用领域1. 医疗领域:人工智能可以应用于医疗影像分析、疾病诊断和预测等方面。
例如,利用人工智能技术,可以提高病理切片的诊断准确率,帮助医生更好地判断病情。
2. 金融领域:人工智能可以应用于风险管理、投资决策和交易监测等方面。
例如,利用机器学习和数据分析,可以预测股票市场的走势并制定相应的投资策略。
3. 交通领域:人工智能可以应用于交通管理、无人驾驶和交通预测等方面。
人工智能实验报告

}G�5�1 { }6�5�1{ }2�1{ }S{ �hcraes tsriF tseB� 一式发启
}6�5�4�3{ } 4�3�2{ }2�1{ }S{ 先优度广 表 nepO 表 nepO 较比 法算
图 索 搜
。序顺索搜和程流解求解理�题 难码数 N 解求法算*A 用利并 �程过法算和数函价估 、义定的索搜式发启握掌和悉熟 期日验实 师老导指 级班 级年
果结测预
沟纵深具面腹&形圆长&生单穗小 线长片叶&物植子被是物植该 -< 麦小是物植该 .&形
5
x05petS
x05petS
x05petS
差 误 练 训
集 据 数 练 训
图 扑 拓 络 网
。构结及理原的络网馈前悉熟�例实络网 PB 建构过通。式公播传向 反解了�程过练训的元经神对法算络网播传向反握掌�理原和构结的络网播传向反解理 期日验实 师老导指 级班 级年
�练训经未�网尔布
题问或异
器决表成赞数多
数函 或题 问的 拟模
Hale Waihona Puke 7。一之络网的广最用应前目是�差方均的小较到敛收够能络网 此�时当适数参当。络网射映层多的差误正修能并递传向反种一是络网 PB。值差方均小最的 间出输望期与出输际实的络网馈前解求于用�法算度梯代跌种一是法算练训�PB�播传向反 。数函型 S 用选般一数函发激的点节。果结出 输出给后最�点节出输到递传息信出输的点节隐把再�后用作过经�点节隐到递传前向先号 信入输。点节)层(隐层多或层一有含且而�点节出输和点节入输有含仅不络网 PB。正修值权 的起引差误总由播传)层含隐的层入输近接最即(层含隐一第向地向反�始开点节出输从程过 法算 PB。法方的单简为较的值化变能性络网起引化变值权个单算计种一是法算)PB(播传向反
人工智能_实验报告

人工智能_实验报告在当今科技飞速发展的时代,人工智能(Artificial Intelligence,简称 AI)已经成为了备受瞩目的领域。
为了更深入地了解人工智能的原理和应用,我们进行了一系列的实验。
本次实验的目的是探究人工智能在不同场景下的表现和能力,以及其对人类生活和工作可能产生的影响。
实验过程中,我们使用了多种技术和工具,包括机器学习算法、深度学习框架以及大量的数据样本。
首先,我们对图像识别这一领域进行了研究。
通过收集大量的图像数据,并使用卷积神经网络(Convolutional Neural Network,简称 CNN)进行训练,我们试图让计算机学会识别不同的物体和场景。
在实验中,我们发现,随着训练数据的增加和网络结构的优化,计算机的图像识别准确率得到了显著提高。
然而,在面对一些复杂的图像,如光线昏暗、物体遮挡等情况下,识别效果仍有待提升。
接着,我们转向了自然语言处理(Natural Language Processing,简称 NLP)的实验。
利用循环神经网络(Recurrent Neural Network,简称RNN)和长短时记忆网络(Long ShortTerm Memory,简称 LSTM),我们尝试让计算机理解和生成人类语言。
在文本分类和情感分析任务中,我们取得了一定的成果,但在处理语义模糊和上下文依赖较强的文本时,计算机仍会出现理解偏差。
在实验过程中,我们还遇到了一些挑战和问题。
数据的质量和数量对人工智能模型的性能有着至关重要的影响。
如果数据存在偏差、噪声或不完整,模型可能会学到错误的模式,从而导致预测结果不准确。
此外,模型的训练时间和计算资源需求也是一个不容忽视的问题。
一些复杂的模型需要在高性能的计算机集群上进行长时间的训练,这对于普通的研究团队和个人来说是一个巨大的负担。
为了应对这些问题,我们采取了一系列的措施。
对于数据质量问题,我们进行了严格的数据清洗和预处理工作,去除噪声和异常值,并通过数据增强技术增加数据的多样性。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验四博弈搜索(3 学时)班级:计科041 班姓名:陆宇海学号:0407100232一实验目的熟悉和掌握博弈(对抗)搜索基本思想和实现关键技术,使用Python 语言实现通用的极大极小算法与Alpha-Beta剪枝算法,并进行实验验证。
二实验原理博弈是人工智能取得巨大成功的领域,著名的有深蓝系统等。
所有的计算机博弈程序(或系统)的基础Alpha-Beta剪枝算法,即在极大极小算法基础再进行剪枝。
熟练掌握该两种算法,能够解决博弈领域的大部分问题(当然可能需要大型数据库的支撑)。
三实验条件1 Python解释器,及IDLE等程序开发调试环境。
2 本实验所提供的几个Python文件,请解压文件gameproject.rar.四实验内容1 MiniMax算法实现2 AlphaBeta剪枝算法实现3 应用于一字棋游戏(TicTacToe,) 进行算法测试4 应用于抓三堆游戏(Nim),进行算法测试五实验步骤1 一字棋游戏的搜索问题形式化import tictactoeinitialTTTState = tictactoe.TicTacToeGameState()你先试着和一字棋随机Agent(它只会随机乱走,碰运气)对弈一局import gamesimport gameagentsgames.runGame(initialTTTState, {"X" : gameagents.HumanGameAgent(),"O" : gameagents.RandomGameAgent()},False, False)#输出结果为:-------------2 | | | |-------------1 | | | |-------------0 | | | |-------------0 1 2Your move? 0,0Opponent's move was (1, 1)-------------2 | | | |-------------1 | | O | |-------------0 | X | | |-------------0 1 2Your move? 0,1Opponent's move was (2, 0)-------------2 | | | |-------------1 | X | O | |-------------0 | X | | O |-------------0 1 2Your move? 0,2-------------2 | X | | |-------------1 | X | O | |-------------0 | X | | O |-------------0 1 2Game finished with utilities {'X': 1, 'O': -1}{'X': 1, 'O': -1}#由于智能体的行棋策略是随机的,故人可以毫不费力地战胜它2 实现一个简单的Agent,它会抢先占据中心位置,但是之后只会按照格子的顺序下子(其实不能算是智能体),试着和它玩一局:把步骤1的语句中的RandomGameAgen替t()换成SimpleTTTGameAgen即t()可。
输出结果为:-------------2 | | | |-------------1 | | | |-------------0 | | | |-------------0 1 2Your move? 2,0Opponent's move was (1, 1) -------------2 | | | |-------------1 | | O | |-------------0 | | | X |-------------0 1 2Your move? 2,2Opponent's move was (0, 0) -------------2 | | | X |-------------1 | | O | |-------------0 | O | | X |-------------0 1 2Your move? 0,2Opponent's move was (1, 0) -------------2 | X | | X |-------------1 | | O | |-------------0 | O | O | X |-------------0 1 2Your move? 0,1Opponent's move was (2, 1) -------------2 | X | | X |-------------1 | X | O | O |-------------0 | O | O | X |-------------0 1 2Your move? 1,2-------------2 | X | X | X |-------------1 | X | O | O |-------------0 | O | O | X |-------------0 1 2Game finished with utilities {'X': 1, 'O': -1}#在以上的下棋步骤中,我有意让棋,才得以观察到智能体的下棋顺序:先下中间的格(1,1),若(1,1)#已被占据,则沿着从第0 行到第 2 行,每行从第0 列到第 2 列的规律探索可下棋的格子然后再让随机Agent和SimpleAgen两t 个所谓的智能体对弈:把步骤1的语句中的HumanGameAgen替t()换成SimpleTTTGameAgen即t()可。
#输出结果为:#回合1:-------------2 | X | O | X |-------------1 | X | O | X |-------------0 | O | X | O |-------------0 1 2Game finished with utilities {'X': 0, 'O': 0}#双方平局#回合2:-------------2 | X | X | X |-------------1 | X | O | O |-------------0 | O | O | X |-------------0 1 2Game finished with utilities {'X': 1, 'O': -1}#随机智能体(RandomGameAge)nt获胜#回合3:-------------2 | O | X | |-------------1 | X | O | X |-------------0 | X | O | O |-------------0 1 2Game finished with utilities {'X': -1, 'O': 1}#固定方式智能体(SimpleTTTGameAge)n t获胜#经以上三次对弈,可以看出由于这两种智能体在下棋时都不考虑效用,而在无目的地下棋,故两者对弈#时,获胜的概率是相同的3 实现极大极小算法#极大极小算法是封装在一个名叫Minimax的类里:class Minimax(GameTreeSearcher):def getBestActionAndValue(self, currentState):#通过此函数获得最优行动方案self.player = currentState.currentPlayer()#获取当前的玩家(“O”或“X”)return self.maximin(currentState)#返回最优行动和此行动的最终效用值def maximin(self, currentState):#轮到Max先生行棋时的最优行动计算函数utility = currentState.utility()#返回针对Max先生的当前棋盘的效用值if utility: return None, utility[self.player]#若棋局已结束,则直接返回Max先生的最终效用值bestAction = None#初始化最优行动bestValue = -9999.0#负无穷#初始化当前行棋的最终效用值for (action, succ) in currentState.successors():#检索所有合法的行棋val = self.minimax(succ)[1]#将每一种合法行棋所产生的棋局交给Min先生,并获得他的最优行棋效用值if val > bestValue:bestAction, bestValue = action, val#找出Min先生针对Max先生的不同棋局所产生的最优行动和最优(最大——针对Max#先生来说)效用值return bestAction, bestValue#返回Max先生的最优行动和此行动的最终效用值def minimax(self, currentState):utility = currentState.utility()if utility: return None, utility[self.player]bestAction = NonebestValue = 9999.0#正无穷for (action, succ) in currentState.successors():val = self.maximin(succ)[1]if val < bestValue:bestAction, bestValue = action, valreturn bestAction, bestValue#此函数是针对Min先生行棋时的最优行动计算函数,由于它和上面的maxmini函数是对称的,故不#再做过多的说明让极大极小智能体和SimpleAgen对t 弈:minimaxAgent = gameagents.UtilityDirectedGameAgent(gameagents.Minimax())games.runGame(initialTTTState, {"X" : minimaxAgent,"O" : gameagents.SimpleTTTGameAgent()},True, True)注意,极大极小算法可能在开局考虑会耗时数分钟,请耐心等待(或者你让SimpleAgen先t走,这样会快些)#输出结果:-------------2 | | | |-------------1 | | | |-------------0 | | | |-------------0 1 2Got state value 0 with best action (0, 0)Player X agent returned action (0, 0)actions called 294778 times and successor called 549945 times in 23.2628102175 seconds-------------2 | | | |-------------1 | | | |-------------0 | X | | |-------------0 1 2Player O agent returned action (1, 1)actions called 0 times and successor called 0 times in 0.00254697175183 seconds-------------2 | | | |-------------1 | | O | |-------------0 | X | | |-------------0 1 2Got state value 0 with best action (1, 0)Player X agent returned action (1, 0)actions called 3864 times and successor called 7331 times in 0.318435164246 seconds -------------2 | | | |-------------1 | | O | |-------------0 | X | X | |-------------0 1 2Player O agent returned action (2, 0)actions called 0 times and successor called 0 times in 0.00385188620339 seconds-------------2 | | | |-------------1 | | O | |-------------0 | X | X | O |-------------0 1 2Got state value 0 with best action (0, 2)Player X agent returned action (0, 2)actions called 104 times and successor called 197 times in 0.0147457288565 seconds-------------1 | | O | |-------------0 | X | X | O |-------------0 1 2Player O agent returned action (0, 1)actions called 0 times and successor called 0 times in 0.00271906066268 seconds -------------2 | X | | |-------------1 | O | O | |-------------0 | X | X | O |-------------0 1 2Got state value 0 with best action (2, 1)Player X agent returned action (2, 1)actions called 8 times and successor called 13 times in 0.00692462310144 seconds -------------2 | X | | |-------------1 | O | O | X |-------------0 | X | X | O |-------------0 1 2Player O agent returned action (1, 2)actions called 0 times and successor called 0 times in 0.00309676229813 seconds --------------------------0 | X | X | O |-------------0 1 2Got state value 0 with best action (2, 2)Player X agent returned action (2, 2)actions called 1 times and successor called 1 times in 0.00675309292114 seconds-------------2 | X | O | X |-------------1 | O | O | X |-------------0 | X | X | O |-------------0 1 2Game finished with utilities {'X': 0, 'O': 0}#结果有些出人意料,是平局,或许是极大极小智能体(minimaxAgen)t 正好踩在了固定方式智能体#(SimpleTTTGameAge)n t的行动路线上你也可以和极大极小智能体对弈:games.runGame(initialTTTState, {"X" : gameagents.HumanGameAgent(),"O" : minimaxAgent },True, True)#输出结果为:-------------2 | | | |-------------1 | | | |0 1 2Your move? 1,1Player X agent returned action (1, 1)actions called 1 times and successor called 0 times in 10.2226939457 seconds-------------2 | | | |-------------1 | | X | |-------------0 | | | |-------------0 1 2Got state value 0 with best action (0, 0)Player O agent returned action (0, 0)actions called 29633 times and successor called 55504 times in 2.45857560109 seconds -------------2 | | | |-------------1 | | X | |-------------0 | O | | |-------------0 1 2Opponent's move was (0, 0)-------------2 | | | |-------------1 | | X | |-------------0 | O | | |-------------Your move? 1,0Player X agent returned action (1, 0)actions called 1 times and successor called 0 times in 8.68631013159 seconds-------------2 | | | |-------------1 | | X | |-------------0 | O | X | |-------------0 1 2Got state value 0 with best action (1, 2)Player O agent returned action (1, 2)actions called 582 times and successor called 1054 times in 0.0557467499361 seconds -------------2 | | O | |-------------1 | | X | |-------------0 | O | X | |-------------0 1 2Opponent's move was (1, 2)-------------2 | | O | |-------------1 | | X | |-------------0 | O | X | |-------------0 1 2Your move? 0,2Player X agent returned action (0, 2)actions called 1 times and successor called 0 times in 17.3988976253 seconds-------------2 | X | O | |-------------1 | | X | |-------------0 | O | X | |-------------0 1 2Got state value 0 with best action (2, 0)Player O agent returned action (2, 0)actions called 32 times and successor called 52 times in 0.0087340709506 seconds -------------2 | X | O | |-------------1 | | X | |-------------0 | O | X | O |-------------0 1 2Opponent's move was (2, 0)-------------2 | X | O | |-------------1 | | X | |-------------0 | O | X | O |-------------0 1 2Player X agent returned action (0, 1)actions called 1 times and successor called 0 times in 6.34426554213 seconds-------------2 | X | O | |-------------1 | X | X | |-------------0 | O | X | O |-------------0 1 2Got state value 0 with best action (2, 1)Player O agent returned action (2, 1)actions called 3 times and successor called 4 times in 0.00612368331713 seconds -------------2 | X | O | |-------------1 | X | X | O |-------------0 | O | X | O |-------------0 1 2Opponent's move was (2, 1)-------------2 | X | O | |-------------1 | X | X | O |-------------0 | O | X | O |-------------0 1 2Your move? 2,2actions called 1 times and successor called 0 times in 9.0314******* seconds-------------2 | X | O | X |-------------1 | X | X | O |-------------0 | O | X | O |-------------0 1 2Game finished with utilities {'X': 0, 'O': 0}#极大极小智能体(minimaxAgen)t 的实力的确不容小觑,如果人不失误,那么最好的结局就是和智能体#平局4 实现AlphaBeta剪枝算法class AlphaBeta(GameTreeSearcher):def getBestActionAndValue(self, currentState):#此函数用于获得最优行旗和此行棋的效用值self.player = currentState.currentPlayer()#获取当前玩家return self.maximin(currentState, -1, 1)#返回针对当前棋局的最优行动和此行动的效用值def maximin(self, currentState, alpha, beta):#Max先生的行棋策略utility = currentState.utility()#如果棋局结束,则返回Max先生的效用值bestAction = None#初始化最优行棋for (action, succ) in currentState.successors():#穷举针对当前棋局的所有可能行棋val = self.minimax(succ, alpha, beta)[1]#将其中一种行棋后产生的棋局传给Min先生,并由他返回关于他行棋的最优效用值if val > alpha:bestAction, alpha = action, val#如果Min先生返回的行棋效用大于当前的最低效用,则更新最优行棋与最低效用if alpha >= beta: break#如果当前的最低效用值大于最高效用值(事实上是上层节点的最高效用值)时,将不考虑#余下未判断的所有行棋可能(即剪枝)。