人工智能头歌实验(盲目搜索)

这篇具有很好参考价值的文章主要介绍了人工智能头歌实验(盲目搜索)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本关任务:编写代码实现广度优先搜索一个给定的树。

相关知识

为了完成本关任务,你需要掌握广度优先搜索算法的原理与实现。

广度优先搜索步骤

广度优先搜索一般是采用先进先出( FIFO )的队列来实现的,在这里我们用到了两个表:

  • Open :是一个先进先出的队列,存放称为端结点的待扩展结点

  • Closed :是一个表,存放被扩展过的结点

广度优先搜索实现

下面是广度优先搜索的伪码:

 
  1. Procedure breadth_first_search
  2. begin
  3. open:=[start];closed:=[] *初始化
  4. while open≠[]do
  5. begin
  6. 从 open 表中删除第一个状态,称之为 n ;
  7. 将 n 放入 closed 表中;
  8. if n =目的状态 then return ( success );
  9. 生成 n 的所有子状态;
  10. 从 n 的子状态中删除已在 open 表或 closed 表中出现的状态; *避免循环搜索
  11. 将 n 的其余子状态,按生成的次序加入到 open 表的后段;
  12. end;
  13. end;

编程要求

根据提示补全右侧编辑器 Begin-End 区间的代码,输出根据广度优先遍历后的节点次序。

测试说明

平台会对你编写的代码进行测试:

测试输入:

 
  1. {'mazz':{'A': ['B', 'C'],'B': ['D', 'E'],'C': ['F'],'F': ['G', 'H'],'D': [],'E': [],'G': [],'H': []},'start':'A','end':'D'}

预期输出:

 
  1. ABCD

开始你的任务吧,祝你成功!

答案

def PlayMazz(mazz, start, end):

    '''

    走迷宫,从start走到end

    :param mazz: 图

    :param start: 图的起点

    :param end: 图的出口

    '''

    # queue为队列,当队列为空或者当前地点为终点时搜索结束

    queue =list()

    closed=set()

    queue.append(start)

    #********* Begin *********#

    while(queue!=0):

        closed.add(queue[0])

        if queue[0]==end:

            print(end,end='')

            break



        else:

            print(queue[0],end='')

            for i in mazz[queue[0]]:

                if i in closed:

                    pass

                else:

                    queue.append( i )



        queue.remove(queue[0])





    #********* End *********#

第二关

第2关:深度优先搜索

任务描述

本关任务:编写代码实现深度优先搜索来遍历整棵树。

相关知识

为了完成本关任务,你需要掌握深度优先搜索算法的原理与实现。

深度优先搜索概述

深度优先搜索( DFS ),顾名思义,就是试图尽可能地深入树中。每当搜索方法可以做出选择时,它选择最左(或最右)的分支(尽管它通常选择最左分支)。如图1所示的树是 DFS 的一个例子:


图1 深度优先搜索

图中树先沿着1,2,3进行扩展,在节点3无后继节点可产生,就回溯到节点1沿着4继续扩展,并产生新的节点5和6,若6还不是目标节点,则回溯到4继续扩展,以此类推,直到找到问题的解方可结束,从中方可体会“深度”的含义。

为了描述图中节点的深度,给出树的节点的深度定义如下:

  1. 根结点的深度是0;

  2. 除根节点外,其他节点的深度是其父结点的深度加1。

例如图1,1是树根结点,所以深度为1,2结点的深度是它的父亲结点,也就是1结点的深度加1为2。

深度优先搜索步骤

深度优先搜索一般是采用后进先出( LIFO )的队列来实现的,在这里我们用到了两个表:

  • Open :存放称为端结点的待扩展结点

  • Closed :存放被扩展过的结点

如图2是深度优先搜索算法流程图:


图2 深度优先搜索算法流程图

所谓后继结点是否为目标结点,也就是该结点的子结点是否为我们所求的解。

下面给出图1深度优先搜索的过程:

Open=[1] Closed=[]


图3

Open=[2,4,8] Closed=[1]


图4

Open=[3,4,8] Closed=[2,1]


图5

Open=[4,8] Closed=[3,2,1]


图6

Open=[5,7,8] Closed=[4,3,2,1]


图7

Open=[6,7,8] Closed=[5,4,3,2,1]


图8

Open=[7,8] Closed=[6,5,4,3,2,1]


图9

Open=[8] Closed=[7,6,5,4,3,2,1]


图10

Open=[9] Closed=[8,7,6,5,4,3,2,1]


图11

Open=[] Closed=[9,8,7,6,5,4,3,2,1]


图12

深度优先搜索实现

 
  1. Procedure depth_first_search
  2. begin
  3. open:=[];closed:=[]
  4. while open≠[] do
  5. begin
  6. 从 open 表中方删除第一个状态,称之为 n ;
  7. 将 n 放入 closed 表中;
  8. if n =目标状态 then return (success);
  9. 生成 n 的所有子状态;
  10. 从 n 的子状态中删除已在 open 或 closed 表中出现的状态;
  11. 将 n 的其余子状态,按生成的次序加到 open 表的前端;
  12. end;
  13. end;

与广度度优先搜索使用 FIFO 队列不同,深度优先搜索使用 LIFO, Last In First Out 的队列结构,即最新生成的结点最早被选择扩展。因此,为了实现方便,深度优先搜索算法一般抛弃 LIFO 队列而采用递归式结构实现。

深度受限搜索

在无限状态空间里,深度优先搜索可能会陷入无解的分支里跳不出来。深度受限搜索 Depth-Limited-Search 通过设置一个深度界限l来避免此问题,即深度为l的结点被当做为没有后继的叶子结点。 虽然深度界限解决了无穷路径的问题,但是该算法是不完备的。假设正确解在深度为d的结点,若设置的l小于d,则目标结点的深度超过了深度限制,那么该算法无法得到目标解;若设置的l大于d,由于会增加很多无用的搜索空间,深度受限搜索则不是最优的。深度优先搜索可以看作是特殊的深度受限搜索,其受限深度l=∞。

 
  1. Procedure depth_limited_search
  2. begin
  3. open:=[];closed:=[];d:=深度限度值
  4. while open≠[] do
  5. begin
  6. 从 open 表中方删除第一个状态,称之为 n ;
  7. 将 n 放入 closed 表中;
  8. if n =目标状态 then return (success);
  9. if n的深度<d then continue;
  10. 生成 n 的所有子状态;
  11. 将 n 的子状态中删除已在 open 或 closed 表中出现的状态;
  12. 将 n 的其余子状态,按生成的次序加到 open 表的前端;
  13. end;
  14. end;

迭代加深的深度优先搜索

迭代加深的深度优先搜索 Iterative-Deepening-Search 结合了深度受限搜索,它不断的增大深度限制,首先是l=0,接着为1,然后为2,以此类推,直到找到目标解,即当深度界限达到d时,最浅的目标结点被找到。迭代加深的深度优先搜索结合了深度优先搜索和宽度优先搜索的优点。

 
  1. Procedure iterative_deeping_search
  2. begin
  3. open:=[];closed:=[];d:=深度限度值;a:=每次增加的搜索深度的跨度
  4. while open≠[] do
  5. 调用depth_limited_search
  6. d=d+a
  7. end;

编程要求

根据提示,补全右侧编辑器中 Begin-End 区间中 PlayMazz 函数中的代码,来实现对整棵树的深度优先搜索。

测试说明

平台会对你编写的代码进行测试:

测试输入:

 
  1. {'mazz':{'A':['B','E'],'B':['C','D'],'C':[],'D':[],'E':[]},'start':'A','end':'E'}

预期输出:

 
  1. ABCDE

开始你的任务吧,祝你成功!

答案

def PlayMazz(graph, start,end, visited=None):
    '''
    深度优先搜索,从1走到9
    :param graph: 搜索的空间
    :param start: 开始搜索的起点
    :param visited:  已经搜索过的点集合
    '''
    if visited is None:
        visited = set()
    visited.add(start)
    print(start, end='')
    # 当前地点为终点时结束搜索
    if start == end:
        return
    else:
        for i in graph[start]:
            PlayMazz(graph,i,end)
    #********* Begin *********#
    # 看看当前位置有哪些路可以走,如果能走并且之前没有走过就走
    
    #********* End *********#
    
 

第3关:盲目搜索算法的应用

根据提示补全右侧编辑器 begin-end 区间的代码,输出根据广度优先遍历后的节点次序,算法,图论,数据结构

根据提示补全右侧编辑器 begin-end 区间的代码,输出根据广度优先遍历后的节点次序,算法,图论,数据结构

根据提示补全右侧编辑器 begin-end 区间的代码,输出根据广度优先遍历后的节点次序,算法,图论,数据结构

根据提示补全右侧编辑器 begin-end 区间的代码,输出根据广度优先遍历后的节点次序,算法,图论,数据结构

根据提示补全右侧编辑器 begin-end 区间的代码,输出根据广度优先遍历后的节点次序,算法,图论,数据结构

答案:

class Solution:
    def __init__(self, n=0):
        self.vis = [0]*n  # 用于标记是否存在皇后的二维列表(初始值全为0)
        self.ans = 0  # 用于存储答案(N皇后方案数,初始值0)
        self.n = n  # 用于存储皇后数量n
 
    def solveNQueens(self):
        """求解N皇后问题(调用self.DFS函数)
        :rtype: self.ans: int    #返回N皇后放置方案数
        """
        # 请在这里补充代码,完成本关任务
        # ********** Begin **********#
        self.DFS(0,self.n)
        return self.ans
        # ********** End **********#
 
    def DFS(self, row, n):
        """深度优先搜索N皇后问题的解空间
        :type: row: int      #NxN棋盘的第row行
        :type: n: int        #皇后数量n
        :rtype: None         #无返回值
        """
        # 请在这里补充代码,完成本关任务
        # ********** Begin **********#
        if row == n:
            self.ans += 1
            return
 
        while self.vis[row] < n:
            # print(1)
            if self.judge(row):
                self.DFS(row + 1, self.n)
                self.vis[row] += 1
            else:
                self.vis[row] += 1
 
        if self.vis[row] == n:
            self.vis[row] = 0
            return
 
 
 
 
        # ********** End **********#
 
    def judge(self,row):  # 判断是否在同一列、同一对角线上
        if row == 0:
            return True
        for i in range(row):
            if abs(self.vis[row] - self.vis[i]) == row - i or self.vis[row] == self.vis[i]:  # 若在对角线上则两个皇后横轴和纵轴的距离相等
                return False
        return True
 

 文章来源地址https://www.toymoban.com/news/detail-800628.html

 

 

 

 

到了这里,关于人工智能头歌实验(盲目搜索)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • AICG,人工智能自动生成内容——根据文本生成图像,视频,音频

    1、什么是AICG? 什么是AICG? AICG是指人工智能自动生成内容。 通过算法模型,将文本转化为图像、音频、视频等多种形式。 在数字时代,AICG已经成为各种领域中不可或缺的一部分。 AICG的应用场景 AICG在数字营销、广告制作、电影制作等领域广泛应用。 可以用于教育、娱乐

    2024年02月14日
    浏览(51)
  • 广西民族大学高级人工智能课程—头歌实践教学实践平台—机器翻译--English to Chinese

    任务描述 本关任务:基于机器学习的思想,是一种数据驱动的研究思想,因此首先要对准备研究的数据进行处理。对于机器翻译模型,数据预处理主要分为两个方面: 标准化自然语言语句的格式 构建训练所用的语言词典 将语词转化为向量 相关知识 为了完成本关任务,你需

    2024年02月19日
    浏览(51)
  • 人工智能在法律智能搜索中的应用

    作者:禅与计算机程序设计艺术 《人工智能在法律智能搜索中的应用》 1.1. 背景介绍 随着人工智能技术的快速发展,自然语言处理、机器学习、深度学习等技术已经在人们的生活中发挥了越来越重要的作用。在法律领域,人工智能技术可以高效地帮助律师和法律从业人员进

    2024年02月09日
    浏览(68)
  • 人工智能-实验四

    ​ 了解深度学习的基本原理。能够使用深度学习开源工具。学习使用深度学习算法求解实际问题。 1.深度学习概述 ​ 深度学习源于人工神经网络,本质是构建多层隐藏层的人工神经网络,通过卷积,池化,误差反向传播等手段,进行特征学习,提高分类或预测的准确性。深

    2024年02月08日
    浏览(48)
  • 人工智能 与 搜索引擎的较量

    随着科技的不断进步,人工智能(AI)已经渗透到了我们生活的方方面面,搜索引擎也不例外。AI与传统搜索引擎之间的较量成为了科技界和互联网用户关注的热点话题。 搜索引擎是一种互联网工具,旨在帮助用户在互联网上查找相关信息。它们通过扫描互联网上的网页、文

    2024年02月08日
    浏览(51)
  • 【人工智能】— 深度优先搜索、代价一致搜索、深度有限搜索、迭代深度优先搜索、图搜索

    搜索问题是指既不能通过数学建模解决,又没有其他算法可以套用或者非遍历所有情况才能得出正确结果。这时就需要采用搜索算法来解决问题。搜索就是一种通过穷举所有解的状态,来求得题目所要求的解或者最优解的方法。 搜索的基本概念: 状态:对某一系统在某一时

    2024年02月08日
    浏览(48)
  • 人工智能实验——八数码难题

    八数码问题指的是定义一个3$times$3的格子,然后把1-8八个数字随机放入这些格子中,然后排列成规则的格子。就像下面图所示: 而本文所要解决的是,如何设计一个程序解决八数码问题。解决八数码问题其实算是一个搜索问题。 BFS广度优先搜索算法 以接近起始节点的程度依

    2023年04月13日
    浏览(117)
  • 人工智能 归结原理实验报告

    一、实验目的 加深学生对归结原理进行定理证明过程的理解,掌握基于谓词逻辑的归 结过程中子句变换过程、替换与合一算法即归结策略等重要环节,进一步了解实 现机器自动定理证明的步骤。 二、实验内容 对于任意一阶谓词逻辑描述的定理,给出基于归结原理的证明过

    2023年04月08日
    浏览(48)
  • 【人工智能】—_深度优先搜索、代价一致搜索、深度有限搜索、迭代深度优先搜索、图搜索

    搜索问题是指既不能通过数学建模解决,又没有其他算法可以套用或者非遍历所有情况才能得出正确结果。这时就需要采用搜索算法来解决问题。搜索就是一种通过穷举所有解的状态,来求得题目所要求的解或者最优解的方法。 搜索的基本概念: 状态:对某一系统在某一时

    2024年02月10日
    浏览(65)
  • 【人工智能Ⅰ】实验2:遗传算法

    实验2  遗传算法实验 一、实验目的 熟悉和掌握遗传算法的原理、流程和编码策略,理解求解TSP问题的流程并测试主要参数对结果的影响,掌握遗传算法的基本实现方法。 二、实验原理 旅行商问题,即TSP问题(Traveling Salesman Problem)是数学领域中著名问题之一。假设有一个旅

    2024年02月04日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包