【人工智能/算法】搜索求解(Solving Problems by Searching)

人工智能问题通常是在某个可能的解答空间中寻找一个解的求解过程。

一、求解与搜索

搜索:根据问题实际情况,不断寻找可利用的知识(或条件),构造一条代价最小的推理路线,寻求问题解决的过程

搜索技术的关键:2W

  • What:搜索什么——搜索目标
  • Where:在哪里搜索——搜索空间

搜索两个方面:

  • 找到从初始事实到问题最终笞案的一条推理路径
  • 找到的这条路径在时间和空间上复杂度最小

许多搜索问题都可以转化为图搜索问题

搜索类型:

  • 按问题表示方法分类:
搜索算法
状态空间搜索
(状态空间法)
与/或树搜索
(问题归纳法)
  • 按是否使用启发式信息分类:
搜索算法
盲目搜索
(无信息搜索)
启发式搜索
(有信息搜索)

存在问题:深度问题、死循环问题
解决方法:对搜索深度加以限制、记录从初始状态到当前状态的路径

搜索算法的通常类型

搜索算法
盲目搜索/无信息搜索
启发式搜索/有信息搜索
深度优先搜索
深度限制搜索
广度优先搜索
贪婪搜索
A搜索
A*搜索

图搜索包括穷举搜索和启发式搜索

状态空间法:利用状态变量和操作符号表示系统或问题的有关知识的符号体系
状态空间用四元组表示: ( S , O , S 0 , G ) (S,O,S_0,G) (S,O,S0,G)(分别为状态集合、操作算子集合、初始状态集合、目标状态集合)( S 0 ⊂ S S_0\subset S S

人工智能导论》作业2 对应教学内容:Lecture2:Solving Problems by Uninformed Searching 题目:(参考AIMA(3rd edition)习题3.9)传教士与野人问题求解 三个传教士和三个野人在河的一边,有一条能1载一个人或两个人的船。请设法使所有人都渡到河的另一边。为了防止野人攻击传教士,无论在河的哪一边,都不能让野人人数超过传教士人数,否则野人就会攻击传教士。假设传教士和野人都会划船,请为传教士和野人规划一个安全的过河方案。这个问题在AI领域很有名,它是第一个从分析的观点探讨问题形式化的论文的主题(Amarel,1968)。 作业要求: 1.将传教士与野人问题形式化表述为一个搜索问题。明确定义状态表示、初始状态、目标状态、可行的动作集合、状态转移函数、动作代价,并分析该问题的状态空间。 2.针对该问题,设计并实现广度优先搜索(BFS)算法(建议用Python): a)采用队列存储等待扩展的节点; b)用一个集合存储已访问过的状态,避免重复访问; c)搜索目标状态时,输出从初始状态到目标状态的状态转移序列,统计搜索空间中被访问过的状态总数; d)搜索完整个状态空间也未找到解,则输出"No solution"。 3.针对该问题,设计并实现深度优先搜索(DFS)算法(建议用Python): a)采用栈存储等待扩展的节点; b)用一个集合存储已访问过的状态; c)搜索过程中,选择第一个遇到的可行动作进行扩展,直到达到目标状态,或遍历所有状态; d)搜索目标状态时,输出从初始状态到目标状态的状态转移序列,统计搜索空间中被访问过的状态总数; e)搜索完整个状态空间也未找到解,则输出"No solution"。 4.分析BFS和DFS在该问题上的时间、空间复杂度,并比较它们搜索过程中扩展节点数量的差异。你认为哪种算法更适合求解该问题? 5.讨论采用无信息搜索算法求解该问题可能存在的limitation。你有什么优化搜索效率的思路吗? 评分标准: 1.问题形式化表示是否准确、完整(20分); 2.BFS、DFS算法设计与实现的正确性、规范性、注释是否充分等(30分); 3.复杂度分析是否合理,算法比较是否有理有据,对无信息搜索局限性的认识和改进思路(30分); 4.报告的清晰度、逻辑性和表达能力,算法运行情况,提交材料的完整性和规范性(20分)。 提交方式: 以压缩包形式(命名:班级+学号+姓名+A2)提交如下文件: 1.问题形式化表述、算法设计(伪代码)、算法分析、比较和讨论的文档(PDF或word格式); 2.实现BFS和DFS的源代码。
06-13
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值