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

AI快讯 2hours ago AICAT
0 0
探索人工智能编程的奇妙之旅

人工智能究竟是否需要依赖人类提供的数据以便有效运作?通过自己编写一个“走迷宫”的人工智能程序,答案将变得显而易见。

本篇文章少见地提供了两个零基础的快速入门教程,旨在帮助编程新手从零开始学习“软件编程与人工智能”的基础知识,让更多非专业人士能够深入理解人工智能的实现机制。我们将减少理论讲解,直接聚焦于核心语句与算法应用

因为内容较为丰富,计划分为三篇完成。本文为第一篇:软件编程的快速入门,将同时完成走迷宫程序的初步构建。

学习的基本要求是电脑上安装有微软Office办公软件,版本不限。只需掌握Excel表格的基本操作即可,无需安装任何编程语言开发环境

如果电脑上仅安装了WPS Office,理论上也是可行的,但需要下载一个插件才能进行VBA编程。如有需要,请留言告知。

我们将从VBA编程语言的基础开始,帮助大家迅速编写出自己的第一个计算机程序。接下来,将开始编写实际的人工智能程序,采用强化学习算法。这种算法被谷歌的围棋AI阿尔法狗、OpenAI的红蓝小人捉迷藏以及ChatGPT等广泛应用。

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

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

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

接下来,让我们开始吧:

01 在Excel中编写和运行程序

微软Excel表格软件自带的编程语言VBA,是一种可视化的BASIC语言,非常适合初学者进行编程学习。

第一步:打开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

请注意,程序语句通常需要比Sub向右缩进4个空格,以使程序层次分明。按一次Tab键即可实现缩进。完整代码如下图:

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

接下来,让我们看看如何运行这段程序。

第四步:运行程序

将光标移到Sub过程内部,然后按功能键F8,可以看到 Sub语句的背景变成黄色,表示程序将从此处开始执行。

如果在运行程序时出现错误,请跳到第五步设置安全级别。

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

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

继续按F8键,使黄色背景移动到下一句 Cells(1,1)=1,表示将执行这一行代码。

再次按F8键,黄色背景将移动到下一行。此时,上一句已经执行完成,我们来看看到底结果是什么:

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

Excel VBA编程入门:从基础到安全设置

在我们的表格中,第一行第一列的单元格已经成功填入了数字1。

恭喜,我们的第一条程序顺利完成。

接下来,继续按下F8键,完成后两条指令的执行。此时,表格中第一行第二列和第三列已分别填入数字2和3,如下所示:

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

至此,这段简洁的程序已经全部执行完毕。我们成功编写出了第一个程序。

但手动按F8逐行执行程序实在是太耗时,是否可以一键完成呢?

当然是可以的!

按下F5功能键即可一键执行整个程序。

我们之所以先介绍F8的单步执行,是希望大家能够清晰地看到程序执行的顺序。在调试程序时,单步执行也会非常有用。

需要注意的是,如果我们有多个Sub过程,确保光标位于想要运行的Sub过程内,按下F5才能执行该过程。其他的Sub过程将不会被执行,如下图所示:

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

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

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

以上就是在Excel中用VBA语言编写和运行程序的详细步骤,简单易行吧?

第五步:调整安全级别

如果前面的步骤都顺利完成,可以选择跳过这一步。

但如果程序无法运行,并提示被“禁止”,这通常是因为Excel的安全级别设置过高,阻止了程序的执行。此时需要重新设置“宏安全性

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

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

如果在Excel主菜单中找不到第一步提到的“开发工具”选项,别着急。

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

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

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

02 编程基本操作

我们已经编写了三行代码,成功在表格的第一行前三个单元格中填入了1、2、3。接下来,我们将依次填入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至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,经过九轮的循环后,其值将从0递增至8。

这两个For循环的完整执行过程如图所示,箭头的指向代表了循环的路径:

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

在图中,蓝色箭头表示内层的列号循环,而红色箭头则代表外层的行号循环。经过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。这样一来,老鼠可以根据表格中的数值判断某个方向是可通行还是不可通行。

整个迷宫包含9个单元格,每个单元格都有四个方向。由此,我们可以建立一张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的单元格,并利用四个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,每行代表迷宫内的一个单元格,而每列则代表一个移动方向,共四列,分别为“上、右、下、左”。

我们可以看到表中红色方框圈住的第0行,其四个参数值分别为:“0、0、1、0”,意味着“上、右、左”三个方向的参数为0,表示不可移动,而向“下”方向的参数为1,表示可以移动。

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

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

有了这张表,老鼠就能够清楚地知道往哪个方向可以顺利移动,哪个方向则是受阻的。

在下一篇文章中,我们将探讨如何编写代码使老鼠能够移动,希望你们能持续关注,以便第一时间获取更新。

如果在编程中遇到任何疑问,请随时在下面留言交流。

来源:百家号
原文标题零基础入门,编一个程序了解人工智能:强化学习
声明:
文章来自网络收集后经过ai改写发布,如不小心侵犯了您的权益,请联系本站删除,给您带来困扰,深表歉意!
广告也精彩
Copyrights:AICAT Posted on 2026-03-07 13:15:57。
Please specify source if reproduced从零开始,轻松编程探索人工智能的奥秘:强化学习入门指南 | AI工具导航

No comments

No comments...