从零开始,轻松编程探索人工智能的奥秘:强化学习入门指南

共计 10483 个字符,预计需要花费 27 分钟才能阅读完成。

掌握人工智能与编程的全新入门指南

人工智能是否真如人们所说,必须依赖人类所提供的数据才能正常运作呢?只需亲自编写一个“走迷宫”的程序,就能找到答案。

本文将为编程初学者提供一份独特的入门教程,围绕 “软件编程与人工智能” 展开,旨在帮助更多非专业人士从基础层面理解人工智能的运作原理。我们将 尽量少讲理论,而是直接深入实用的语句与算法。

由于内容较为丰富,计划分为三篇文章介绍。现在是 第一篇:软件编程快速入门,将帮助读者建立走迷宫程序的基础。

学习的基本要求是:在电脑中安装微软 Office 办公软件,版本无特别限制。只要熟悉 Excel 的基本操作即可,无需额外安装任何编程语言或开发环境。

如果您的电脑上仅有 WPS Office,理论上也是可行的,但需要下载插件才能使用 VBA 进行编程。如有需求,请随时留言。

我们将从 VBA 编程语言入手,帮助大家在最短时间内 编写出自己的第一个计算机程序 。接下来,参与者将开始编码真正的 人工智能程序 ,采用 强化学习算法。这种算法被谷歌的围棋 AI 阿尔法狗、OpenAI 的红蓝小人捉迷藏以及 ChatGPT 等众多人工智能系统广泛应用。

在 Excel 中,我们将绘制一个小型迷宫,并设置三个表格作为人工智能的“参数”,让小鼠通过这些参数学习如何走出迷宫,获得“智能”。

这个教程同样非常适合假期中的学生,帮助他们学习编程和人工智能。

接下来,让我们开始吧:

01 在 Excel 中编写和运行程序

Excel 软件内置了一种可视化编程语言:VBA,这种语言特别适合初学者进行编程学习。

第一步:打开 Excel 的编程窗口

首先,启动 Excel 软件并新建一个空白工作表。接着,按下组合键 Alt+F11 以打开编程窗口。按法是先按住 Alt 键,然后再按 F11 键。此时将会看到如下界面:

右侧窗口就是编写程序的界面,请根据上述图片调整窗口大小,使其占据屏幕的一半,同时显示出工作表的一部分。

接着,根据图中所示的顺序,点击小框中的“+”号变成“-”号,然后双击“Sheet1”,将光标移动到指定位置,就可以开始编写程序代码了。

第二步:编写第一个程序代码

程序代码应以“Sub”开头,接一个空格,后面是『程序名称』及一对空括号,最后以“End Sub”结束。例如:

Sub 初始化()End Sub

如下所示:

特别需要注意的是,除了程序名称可以使用汉字,其他字符及标点都需在英文状态下输入,否则会出现“无效字符”的提示。尤其是标点符号如逗号『,』、句点『.』、单引号『’』、双引号『””』、括号『()』等,务必要使用英文符号

在一个程序中,可以包含多个以“Sub”开头并以“End Sub”结尾的部分,这些称作“过程”或“子程序”

在“Sub”和“End Sub”之间,输入自定义的程序代码。

第三步:在过程内编写程序代码

将光标移至 Sub 过程内部,输入第一条语句:

Cells(1,1)=1

这条语句的作用是向指定单元格填写内容。格式如下:

例如:Cells(1,1)=1 表示在第 1 行第 1 列的单元格写入数字 1。

在这个 Sub 过程中,我们可以写入三条 Cells()语句:

Sub 初始化()    Cells(1,1)=1    Cells(1,2)=2    Cells(1,3)=3End Sub

注意,程序语句通常要向右缩进 4 个空格,以使程序结构更清晰。按 Tab 键即可实现缩进功能。完整代码如下图所示:

接下来,看看如何运行程序。

第四步:运行程序

将光标移至 Sub 过程内部,然后按 F8 键,此时 Sub 语句的背景会变为黄色,表示程序将从这里开始执行。

如果在运行时提示错误,请跳到第五步 以设置安全级别。

F8 键的作用是逐句执行程序,专业术语称为“单步执行”。

再次按 F8 键,黄色背景将移动到下一句 Cells(1,1)=1,表示此句将被执行。

继续按 F8 键,黄色背景会逐行下移,此时前一行已执行完成,接下来我们看看结果:

掌握 Excel VBA 编程的基本步骤

在表格的第 1 行第 1 列中,我们成功输入了数字 1。

这标志着我们的首条程序已顺利完成。

接下来,再按两次 F8 键,便可以顺利执行接下来的两条语句。此时,表格的第 1 行第 2 列和第 3 列分别填入了数字 2 和 3,如下图所示:

至此,所有的程序语句已经全部执行完成。我们成功编写并运行了第一个程序。

然而,单击 F8 逐条执行程序实在是太繁琐了,是否可以实现一键式执行呢?

当然可以!

通过按下功能键 F5,便可一键执行整个程序。

之所以先介绍 F8 的单步执行,是为了让大家直观地看到程序运行的顺序。在后续的调试过程中,单步执行也是非常有用的。

请注意,当我们编写了多个 Sub 过程时,务必要将光标定位到希望运行的 Sub 过程内部,再按 F5,这样该过程才会被执行。其余的过程将不会运行,如下图所示:

最后,我们来总结一下,在 VBA 编程中常用的功能键 如下图所示:

以上就是在 Excel 环境中利用 VBA 语言编写和运行程序的完整步骤。其实并不复杂吧?

第五步:设置安全级别

如果前面的步骤都没有问题,可以跳过此步。

若程序无法正常运行,提示被“禁止”,这通常是因为 Excel 的安全级别过高,导致不允许执行任何程序。此时需要重新 调整“宏安全性”设置

请按照下图中的四个步骤,将安全级别设置为:“禁用所有宏,并发出通知”。

如果在 Excel 主菜单中找不到步骤①中的“开发工具”选项,请不要着急。

点击主菜单的 “文件”→“选项”→“自定义功能区”,在“主选项卡” 中勾选“开发工具”复选框,即可显示“开发工具”。如下图所示四个步骤:

在某些较低版本的 Excel 中,安全性设置 可能在:“工具”→“宏”→“安全性”选项下,请将安全级别设置为 “中” 即可。

02 编程基本操作

我们已经完成了 3 条代码,现在在表格的第 1 行填入数字 4、5、6,直至 20,每列依次填入一个数字。

如果继续使用上面的方式,就需要逐条写 20 条 Cells()语句,这显得非常繁琐。因此,我们可以借助 循环语句,通过几行代码即可完成。具体步骤如下:

(1)定义变量。

在中学时,我们学过用字母表示数字,如 x =8,y=0.5 等,这些字母在程序中称为 变量

使用变量前,需要先定义其类型,具体方法如下:

例如:(若以下代码显示不完全,可以左右滑动)

Dim 列号 As Integer  '把变量『列号』定义为整型,只能表达整数    Dim x As Single' 把变量『x』定义为浮点型,可表达带小数点的数    Dim 姓名 As String   '把变量『姓名』定义为字符串,可表达“张三”等单词或汉字        Dim 列号 As Integer' 把变量『列号』定义为整型,只能表达整数

通常我们会将所有的变量定义语句集中放置在 Sub 过程内部的上方

此外,我们注意到在 Dim 语句后面,包含了一段以英文单引号『‘』开头的文字,这是注释语句,呈现为绿色。它是为程序的阅读者提供的说明,帮助理解程序的功能。需要说明的是,这种以 单引号开头的注释语句不被执行。

(2)For 循环语句

For 循环语句以 For 开头,以 Next 结束。中间为循环体,示例如下:

例如:

Dim 列号 As Integer      '把变量 列号 定义为整型    For 列号 = 1 To 20' 列号从 1 到 20 循环       Cells(1, 列号) = 列号   '循环体,向指定单元格写入数据    Next 列号' 每循环一次,列号加 1, 大于 20 后退出循环

这段程序从『列号 =1』开始执行,当执行到『Next』语句后,『列号』会自动加 1,然后返回『For』语句重新判断『列号』。

只要『列号』未超过 20,便会再次执行循环体中的代码。

上述过程会持续重复,直到『列号』超过 20 后,退出循环,执行 Next 之后的下一条程序。

完整的代码如下所示。请将光标置于 Sub 过程内部,按 F5 执行此程序

执行结果为:在表格第 1 行的每一列中,数字依次从 1 写到 20,如下图所示。

这一串数字代表了表格的列号,供我们今后使用。

如果你对循环语句的使用还有疑惑,建议按 F8 逐步执行上面的程序,这样可以直观地观察到循环语句的运行过程,以及循环变量『列号』的值变化。如下图所示:

(3)保存程序

编写完成的程序需要保存,以便下次使用。操作方法为:

选择主菜单中的“文件”→“另存为”→“其他格式”

然后选择 “文件格式”,选择“Excel 启用宏的工作簿(*.xlsm)”,输入文件名为“老鼠走迷宫.xlsm”,最后点击“保存”按钮 即可。如下图:

请务必选择后缀为.xlsm 的文件格式进行保存,使用其他格式将导致程序丢失

在某些较低版本的 Excel 中,可能没有 *.xlsm 文件类型选项,此时请按常规方式保存即可。

(4)启动已保存的程序

在 Excel 中,点击主菜单中的 “文件”→“打开”, 然后选择之前保存的“老鼠走迷宫.xlsm”文件。当文件打开后,通常会出现一个安全警告,示例如下图所示的黄色背景部分:

此警告是为了防止潜在的宏病毒感染。鉴于我们知道这个文件是安全的,因此 请点击“启用内容”按钮 以继续。

在一些较旧版本的 Excel 中,安全警告可能以 对话框 形式出现,此时同样需要选择“启用宏”按钮。

启用之后,可以通过组合键 Alt + F11 打开编程窗口,查看上次编写的代码。尝试运行程序,确认其是否正常工作。

如果在打开或运行程序时遇到问题,请返回上一步:调整安全级别。

以上内容是 Excel VBA 编程的基本入门。接下来,我们将进入实际编程阶段。

03 绘制迷宫

首先,在 Excel 工作表中,绘制一个三行三列的迷宫。

我们将迷宫的起点放置在整张表的第 4 行、第 2 列。

由于这两个数字将在后续程序中频繁使用,我们将它们定义为两个常量。定义常量的方法如下:

Const 迷宫头行 = 4  '迷宫左上角的行号 Const 迷宫头列 = 2' 迷宫左上角的列号

定义完成后,程序中提到的『迷宫头行』就代表数字 4,而『迷宫头列』则代表数字 2。

我们将这些常量的定义放在 Sub 过程之外,位于编程窗口的顶部,如下图所示。

这样做的原因是:在 Sub 过程外定义的常量或变量可以在所有 Sub 过程中使用。

接下来,我们将开始编写第二个过程“画迷宫”,该过程位于第一个 Sub 初始化 () 过程的下方(如上图所示):

Sub 画迷宫()End Sub

随后在这个新的 Sub 过程中,输入以下代码:

Dim 迷宫行号 As Integer   '迷宫内部的相对行号    Dim 迷宫列号 As Integer' 迷宫内部的相对列号    Dim 迷宫编号 As Integer   ' 迷宫内单元格的编号

这三条语句定义了三个变量,它们是在 Sub 过程内部定义的,因此称为“局部变量”。与在 Sub 过程外定义的变量不同,局部变量仅在其所在的 Sub 过程中有效,其他 Sub 过程无法使用。此外,在不同的 Sub 过程中可以定义相同名称的变量,它们不会互相干扰。

变量的具体含义已在后面的注释中说明。我们在实际使用时会详细解释。

接下来,写入以下代码:

'以下画迷宫边框,并设置迷宫区域的字体属性   With Range(Cells(迷宫头行, 迷宫头列), Cells(迷宫头行 + 2, 迷宫头列 + 2))     .BorderAround LineStyle:=xlDouble' 在迷宫四周画出双线边框     .HorizontalAlignment = xlCenter '设字符居中显示     .Font.ColorIndex = 15' 设字体为灰色     .Font.FontStyle = "Bold" ' 设字体为粗体   End With

以 With 开头的第一条语句中,Range()语句用于定义一个矩形区域 ,括号内的两个 Cells() 分别是该矩形区域的左上角和右下角的单元格。

在 Cells()中使用了我们刚定义的常量『迷宫头行』和『迷宫头列』,它们分别代表 4 和 2。这意味着:

Range(Cells(4, 2), Cells(6, 4))

即以第 4 行第 2 列的单元格作为左上角,以第 6 行第 4 列的单元格作为右下角,形成一个 3 行 3 列的矩形区域。如下图:

可以看出,Cells()语句内的行号和列号可以使用数字、常量、变量或表达式,非常灵活。这正是编程的特色,大部分代码都可以如此使用。

有人可能会疑惑:为什么在程序中不直接写 Cells(4, 2)和 Cells(6, 4),而要使用如此冗长的名称呢?

这样做是为了方便在将来需要修改数字时,能够轻松进行调整。

接下来,观察 With 语句下面的四条代码,它们的功能是绘制这个矩形的四条边框,并设置字体属性。代码中的英文字符都是根据 Excel 手册规定的,使用时查阅即可,无需记忆。

如果代码开头或中间有一个或多个小句点,其含义是:小句点后面的对象属于前面的对象

例如,中国. 北京,表示的是:中国的北京。

如果写成“中国. 华盛顿”,则是错误的,因为中国没有这个 对象

每个对象还可以拥有自己的子对象,因此可以通过多个句点连接书写多级。例如:

中国. 北京. 清华大学. 法学院. 某某班. 某某人. 年龄 =20。

最后一级的对象通常是前面对象的属性,例如某人的年龄、身高、体重、学习成绩等都是属性。

在 VBA 中,单元格、矩形区域、表格等被称为对象。这种“面向对象”的表达方式,使得归属关系非常清晰,即使存在同名对象也不会造成混淆。

通常,当一个对象有多个属性需要设置或使用时,就会采用 With 语句。

With 语句以 With 开头,以 End With 结束。用法如下:

将以上代码复制或输入到 Sub 画迷宫 () 过程内,然后按 F5 键运行,观察是否能够绘制出一个矩形边框。

再次强调,在按 F5 键运行之前,务必将光标移动到 Sub 过程内部,才能成功运行该过程

如果光标位于 Sub 过程外部,按 F5 键后将弹出菜单,要求你选择要运行的过程。如下图所示:

在菜单中选择“画迷宫”,然后点击“运行”按钮即可执行。

接下来四条代码将会绘制迷宫内部的墙壁,通过使用 Cells(行号, 列号)语句来指定特定单元格,并绘制该单元格某一边的边框,一次绘制一条。

'以下画迷宫内部墙    Cells(迷宫头行 + 0, 迷宫头列 + 0).Borders(xlEdgeRight).LineStyle = xlDouble' 指定单元格右边画双线边框    Cells(迷宫头行 + 1, 迷宫头列 + 0).Borders(xlEdgeBottom).LineStyle = xlDouble '指定单元格下边双线边框    Cells(迷宫头行 + 1, 迷宫头列 + 2).Borders(xlEdgeBottom).LineStyle = xlDouble' 指定单元格下边双线边框    Cells(迷宫头行 + 1, 迷宫头列 + 1).Borders(xlEdgeTop).LineStyle = xlDouble ' 指定单元格上边双线边框

其中的行号和列号均以常量『迷宫头行』和『迷宫头列』为基准,也就是说,以第 4 行第 2 列为基点,分别 +0、+1、+ 2 来指定相应的单元格。

下一步将为迷宫内部的单元格编号。

在这一步中需要使用在 Sub 过程开头定义的三个局部变量。

其中『迷宫行号』和『迷宫列号』代表迷宫内部相对于左上角的行号和列号,取值分别为 0、1、2。也就是说,它们对应迷宫内部的第 0 行、1 行和 2 行,或第 0 列、1 列和 2 列。

迷宫的左上角位置由常量『迷宫头行』和『迷宫头列』决定。

例如:迷宫内的第 0 行第 1 列,即:迷宫行号 =0,迷宫列号 =1。该单元格表示为:Cells(迷宫头行 + 迷宫行号, 迷宫头列 + 迷宫列号)

'以下画迷宫内部单元格的编号    迷宫编号 = 0' 设迷宫编号的初始值为 0    For 迷宫行号 = 0 To 2 '迷宫内部行号 =0,1,2      For 迷宫列号 = 0 To 2' 迷宫内部列号 =0,1,2        Cells(迷宫头行 + 迷宫行号, 迷宫头列 + 迷宫列号) = 迷宫编号 '画迷宫内单元格的编号        迷宫编号 = 迷宫编号 + 1' 修改迷宫编号变为当前值 +1      Next 迷宫列号    Next 迷宫行号

这是两个嵌套的 For 循环语句。

外部的 For 循环语句 将循环三次,『迷宫行号』依次取值为 0、1、2。

每次外部的 For 语句 循环一次,都要进入 内部的 For 循环语句 并循环三次,『迷宫列号』的取值依次为:0、1、2。

因此,总共将进行 3 ×3= 9 轮循环。

构建迷宫与老鼠移动的参数表

最初,『迷宫编号』的值设为 0,循环每进行一次便加 1,经过 9 轮循环后,其值将从 0 递增至 8。

接下来,这两个 For 循环语句的执行过程如图所示,箭头清晰地标明了循环的顺序:

内圈的蓝色箭头代表列号的循环,而外圈的红色箭头则表示行号的循环。经过 9 次循环后,迷宫中的 9 个单元格依次被填入 0 到 8 的值。

最终,在迷宫的左上角标注“老鼠”,而右下角则标记为“食物”。

请注意,在单元格中填写的 字符需要用英文双引号括起来,中文双引号不可使用

Cells(迷宫头行, 迷宫头列) = "老鼠" '在迷宫 0 号单元格写“老鼠”Cells(迷宫头行, 迷宫头列).Font.ColorIndex = 1' 字体设为黑色  Cells(迷宫头行 + 2, 迷宫头列 + 2) = "食物"   '在迷宫 8 号单元格写“食物”Cells(迷宫头行 + 2, 迷宫头列 + 2).Font.ColorIndex = 3' 字体设为红色

结束语为 End Sub,标志着画迷宫的过程完成。

请将光标定位于 Sub 画迷宫() 的内部,按 F5 键以运行该程序。

一个 Sub 过程不仅可以独立运行,还可以在其他 Sub 过程内部通过直接调用其名称来使用。调用时,无需写 Sub,通常也无需括号。

例如,在 Sub 初始化 () 的内部,增加两行代码,如下所示:

Sub 初始化()    Dim 列号 As Integer       '把变量 列号 定义为整型    For 列号 = 1 To 20' 列号从 1 到 20 循环        Cells(1, 列号) = 列号   '循环体,向指定单元格写入数据    Next 列号' 每循环一次列号加 1, 大于 20 后退出循环    Range(Cells(2, 1), Cells(26, 12)).Clear  '清空指定矩形区域    画迷宫' 调用“画迷宫()”过程 End Sub

后两行代码为新增内容,第一行用于清空特定矩形区域,区域由左上角和右下角的单元格决定。第二行则是调用『画迷宫』过程。

这样,当我们运行『初始化』过程时,就会自动执行『画迷宫』过程。运行结果如下:

请将上述代码复制或输入到编程窗口中,按 F5 键运行,检查是否能够绘制出相同的迷宫。

若对程序的某些部分感到疑惑,建议按 F8 键逐步执行,观察程序的运行流程,这将有助于理解。

04 创建动作参数表

迷宫构建完成后,接下来的任务是让老鼠进行移动。

老鼠如何移动呢?假设它位于迷宫的某个单元格,有上、下、左、右四个方向可以选择。但是,迷宫内有墙壁,受阻的方向无法移动。

因此,我们需要让老鼠清楚哪些方向可以前进,哪些方向无法通行。否则,它可能会随意穿越墙壁。

为了解决这个问题,我们将制作一张表格,列出迷宫中每个单元格的四个方向,并在有墙的方向标记为 0,没有墙的方向标记为 1。这样,老鼠就能根据表中数值的 1 或 0,判断哪个方向是可行的,哪个方向是不可行的

迷宫总共有 9 个单元格,每个单元格对应 4 个方向,因此我们需要创建一张 9 行 4 列的表格,以涵盖所有可能的情况。这个表格被称为“动作参数表”

在人工智能领域,建立表格是处理参数的最简单方法 。不过,并非所有应用都能直接建立表,或者直接建立的参数规模过于庞大,不够经济。这种情况下,通常会采用 神经网络模型 来表达,例如在处理复杂的文本、图形、语言时。ChatGPT 在处理自然语言时,就运用了神经网络技术,并包含了大量的参数。

我们将动作参数表的左上角位置放在表格的第 4 行、第 8 列,并定义两个常量来表示这两个数字。定义常量的代码如下:

Const 参数表头行 = 4 '动作参数表左上角行号 Const 参数表头列 = 8' 动作参数表左上角列号

这两句代码应与之前定义的迷宫常量一起放置在程序的最上方,如下图所示:

接下来,我们创建一个新的过程:绘制动作参数表,并定义所需的局部变量。如下:

Sub 画动作参数表()  '画动作参数表(θ)    Dim 迷宫行号 As Integer' 迷宫内部行号    Dim 迷宫列号 As Integer '迷宫内部列号    Dim 迷宫编号 As Integer' 迷宫位置编号     Dim 参数表行号 As Integer '动作参数表当前行号    Dim 参数表列号 As Integer' 动作参数表当前列号    End Sub

然后,在 Dim 语句下方添加“绘制表头”的代码,如下:

'画动作参数表表头    Cells(参数表头行 - 2, 参数表头列 + 1).Value =" 动作参数表 θ(动作表格化)"Cells(参数表头行 - 2, 参数表头列 - 1) =" 迷宫编号 /"Cells(参数表头行 - 1, 参数表头列 - 1) =" 移动方向 "Cells(参数表头行 - 1, 参数表头列 + 0) =" 上 "Cells(参数表头行 - 1, 参数表头列 + 1) =" 右 "Cells(参数表头行 - 1, 参数表头列 + 2) =" 下 "Cells(参数表头行 - 1, 参数表头列 + 3) =" 左 "' 画动作参数表边框    With Range(Cells(参数表头行, 参数表头列), Cells(参数表头行 + 8, 参数表头列 + 3))        .BorderAround LineStyle:=xlContinuous' 画参数表四边单线边框    End With

接着,我们将数据填入动作参数表中。

填数据的方法是从『迷宫编号』为 0 的单元格开始,一直判断到第 8 个单元格,依次检查该单元格的上、右、下、左四个方向是否有边界。

若没有边界,表示可以通行,便向对应的参数表中填写数字 1。

若有边界,说明无法通行,则向相应的参数表中填写数字 0。

如下图所示:

实现判断比较的功能需要使用IF 分支语句,具体用法如下:

其中的『条件表达式』通常需要比较两个常量或变量的大小,常见的比较运算符包括:

表达式中也可以使用算术运算符,常用的如下:

使用示例:

Sub 测试()  '这是一个测试程序    Dim x As Integer' 定义一个整型变量 x    x = 7  ' 给 x 赋值为 7    If x <=2*3 Then ' 如果 x 小于等于 2 乘以 3(即 6)Cells(2, 1) = " 小 "  ' 则在第 2 行 1 列单元格中填入“小”。Else  ' 其他情况,即 x 大于 10        Cells(2, 1) = " 大 "  ' 则在第 2 行 1 列单元格中填入“大”。End If  'If 语句结束 End Sub

请将此段代码复制或输入到编程窗口中,按 F5 或 F8 执行,观察结果。

尝试修改 x=7 这句代码,将数字改为 7 以下的值,看看程序运行结果是否发生变化?

接下来,我们将往动作参数表中填写参数的代码:

'向表内填写动作参数    迷宫编号 = 0    For 迷宫行号 = 0 To 2       For 迷宫列号 = 0 To 2          参数表行号 = 参数表头行 + 迷宫编号          Cells(参数表行号, 参数表头列 - 1) = 迷宫编号' 动作参数表中左侧写迷宫编号          With Cells(迷宫头行 + 迷宫行号, 迷宫头列 + 迷宫列号) '指定迷宫某个单元格' 以下检查单元格上方有无边框            If .Borders(xlEdgeTop).LineStyle = -4142 Then '如果上方无边框                Cells(参数表行号, 参数表头列 + 0) = 1' 动作参数值填 1            Else                Cells(参数表行号, 参数表头列 + 0) = 0  '动作参数值填 0            End If' 以下检查单元格右方有无边框            If .Borders(xlEdgeRight).LineStyle = -4142 Then '如果右方无边框                Cells(参数表行号, 参数表头列 + 1) = 1' 动作参数值填 1            Else                Cells(参数表行号, 参数表头列 + 1) = 0  '动作参数值填 0            End If' 以下检查单元格下方有无边框            If .Borders(xlEdgeBottom).LineStyle = -4142 Then '如果下方无边框                Cells(参数表行号, 参数表头列 + 2) = 1' 动作参数值填 1            Else                Cells(参数表行号, 参数表头列 + 2) = 0  '动作参数值填 0            End If' 以下检查单元格左方有无边框            If .Borders(xlEdgeLeft).LineStyle = -4142 Then '如果左方无边框                Cells(参数表行号, 参数表头列 + 3) = 1' 动作参数值填 1            Else                Cells(参数表行号, 参数表头列 + 3) = 0  '动作参数值填 0            End If         End With         迷宫编号 = 迷宫编号 + 1' 迷宫编号 +1      Next 迷宫列号    Next 迷宫行号

尽管程序看起来较长,但其实其结构相当简单。

程序的核心结构依然是两个嵌套的 For 循环语句,利用 With 语句依次选择迷宫中编号从 0 到 8 的单元格,然后用 4 个 IF 分支语句逐一判断该单元格的上、右、下、左四个方向是否存在边界。

根据手册,属性.LineStyle = -4142 表示“无边框”。

请将以上代码复制或录入到“Sub 画动作参数表()”过程中,以完成该过程。

我们还需要将调用“画动作参数表”的语句加入到“Sub 初始化()”过程中,如下:

Sub 初始化()    Dim 列号 As Integer       '把变量 列号 定义为整型    For 列号 = 1 To 20' 列号从 1 到 20 循环        Cells(1, 列号) = 列号   '循环体,向指定单元格写入数据    Next 列号' 每循环一次列号加 1, 大于 20 后退出循环    Range(Cells(2, 1), Cells(26, 12)).Clear  '清空指定矩形区域    画迷宫' 调用“画迷宫()”过程    画动作参数表 ' 调用“画动作参数表()”过程 End Sub

最后一句为新增内容。

然后按 F5 键运行“初始化()”过程,结果如下图所示:

图的左上部分是迷宫,右上部分则是动作参数表。该表共有 9 行 4 列。

其中,行编号为 0 至 8,每行对应迷宫中的一个单元格。每列代表一个移动方向,共分为 4 列,分别表示“上、右、下、左”。

观察表中被红色框圈住的第 0 行,其四个参数值为:“0、0、1、0”,即“上、右、左”三个方向的参数为 0,表示不可移动,而“下”方向的参数为 1,则可以移动。

这四个参数与左下方红色框中“老鼠”的移动方向参数一致,如蓝色字所示。

每个单元格的动作参数都将以相同的方式填入动作参数表中。

有了这张表,老鼠就能清楚地知道哪些方向是可以移动的,哪些是不能通行的了。

在接下来的文章中,我们将探讨 编写 如何实现老鼠的移动 功能,敬请期待,以便第一时间获取最新内容。

如果你在编程过程中遇到任何问题,请随时在下方评论区留言。

来源:百家号
原文标题:零基础入门,编一个程序了解人工智能:强化学习
声明:
文章来自网络收集后经过 ai 改写发布,如不小心侵犯了您的权益,请联系本站删除,给您带来困扰,深表歉意!
正文完
 0
小智
版权声明:本站原创文章,由 小智 于2026-04-01发表,共计10483字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
使用智语AI写作智能工具,您将体验到ChatGPT中文版的强大功能。无论是撰写专业文章,还是创作引人入胜的故事,AI助手都能为您提供丰富的素材和创意,激发您的写作灵感。您只需输入几个关键词或主题,AI便会迅速为您生成相关内容,让您在短时间内完成写作任务。
利用AI智能写作工具,轻松生成高质量内容。无论是文章、博客还是创意写作,我们的免费 AI 助手都能帮助你提升写作效率,激发灵感。来智语AI体验 ChatGPT中文版,开启你的智能写作之旅!
评论(没有评论)
利用智语AI写作工具,轻松生成高质量内容。无论是文章、博客还是创意写作,我们的免费 AI 助手都能帮助你提升写作效ai率,激发灵感。来智语AI体验ChatGPT中文版,开启你的智能ai写作之旅!
0