4944| 4
|
[教程] 【AI2+AI】利用马尔可夫矩阵制作“石头剪刀布”APP |
【AI2+AI】石头剪刀布难度: 高级 教程链接: 石头剪刀布教程 如今人工智能和机器学习全都风靡一时,但你是不是很疑惑,在现实世界中究竟有没有可能教一台机器学习某种东西,然后使其真正具有人工智能? 在这个项目中,使用最简单的儿童游戏:剪刀石头布。你面临的挑战是创建一个程序,让机器来观察和了解用户的游戏选择,然后很快具有足够的智能在游戏中反复击败用户。难以置信?让我们现在开始准备给自己一个惊喜吧。 1. 项目简介在本项目中,你会一览如何对机器进行编程,让它从经验中学习并做出展示智能的“明智”决策。 您将在移动设备上实现“石头剪刀布”游戏,用户可以在其中与机器进行游戏。机器将跟踪用户的选择,如果在用户做出的选择顺序中出现了某种模式,机器将运用此知识来击败用户。 这是一个双人游戏,每个玩家同时用手势显示他们的选择,如下图所示。一轮比赛的赢家是由以下规则决定的:
2. 用户界面下面是用户界面(UI)的样子。第一行显示分数,分数下面有三个按钮让用户选择:石头、布、剪刀。再下面是用户和电脑的选择,分别以文字和图片的形式显示。接下来是一个标签,显示一轮比赛的获胜者。最后一部分展示了“马尔可夫转移矩阵”,以俄罗斯数学家Andrey Markov的名字命名,他最著名的是在概率过程方面的开创性工作。此处无需考虑这个矩阵。在本教程的后面,会学习 3x3 组数字背后的简单思想。请注意,矩阵中行的着色与石头、布和剪刀的按钮的颜色一致。 3. 组件的层次结构UI已经创建好了。你可以在UI组件下面看到它们在组件层次结构中的对应位置。研究此图和命名方案,以便能够按照本教程的其余部分为组件提供功能。 4. 使用马尔可夫过程的机器学习以下是如何赋予机器根据经验来学习的能力的基本思想。机器将跟踪用户做出的顺序选择,并连续记录用户选择的频率。保存这些信息的矩阵称为“马尔可夫转移矩阵”。 矩阵的行表示用户前一步的选择,矩形的列表示用户下一步的选择。这些单元格包含了一个特定序列连续选择的频度信息。如上面的矩阵所示,用户在上一次出石头后接下来继续出石头有7次,上一次出石头接下来出布有13次,上一次出布接下来出剪刀一共有11次,上一次出剪刀接下来也出一共有3次,依此类推。 5. 使用马尔可夫过程的机器学习下图中高亮的第二行(红色)显示了用户出布后出石头、剪刀及布的次数(分别是2、4、11)。 下图中高亮的第二列(绿色)显示了用户出布之前出石头、剪刀及布的次数(分别是13、4、8)。 下面矩阵中橙色单元格显示了第二行与第二列的交点,橙色单元格中的数字4是用户前后两次都出布的次数。 6. 建立并递增马尔可夫矩阵在博弈开始时,马尔可夫矩阵的每个项都是零。 假设用户先出石头,然后再出布(即连续的选择序列是石头、布)。然后,需要将第一行(石头)和第二列(布)中的单元格从0增加到1,如图所示。 假设用户用剪刀跟随其上一个选择布(即选择的顺序是石头、布、剪刀),那么第二行(布)第三列(剪刀)的单元格需要增加,如图所示。 你可以把这个矩阵看作是用户对游戏选择的记录:
7. 用马尔可夫矩阵练习假设游戏继续进行,在某一时刻你会得到下面的矩阵来记录连续的用户移动。 接下来假如用户在最后一次布上出了另一次布。如何增加这个矩阵的适当条目? 检查你的解决方案 正如所看到的,马尔可夫矩阵只是用户选择频率的记录。 假设游戏刚开始时矩阵如下: 假设用户做出如下一系列选择: 游戏此时的马尔可夫矩阵会是什么样子? 提示:
解决方案:
得到: 可夫矩阵的聪明选择">8. 使用马尔可夫矩阵的聪明选择现在你已经了解了应用程序将如何跟踪用户的选择,请考虑以下方案:应用程序如何“智能地”决定自己的下一个选择。假设这是博弈中某个时刻的马尔可夫矩阵: 用户最后出的是剪刀。根据“历史”记录,机器知道剪刀后有15次出石头,8次出布,只有3次出剪刀。所以用户最有可能的是出石头。那机器的聪明之处在什么地方呢?要击败石头机器就会出……布 呀!!哈哈! 这些例子可以让你了解机器是如何跟踪用户的连续选择,然后基于现有的模式,做出最有可能击败用户的“知情”决策。 9. 逻辑设计现在来为用户界面(UI)提供功能并赋予机器智能,切换到逻辑设计。 10. 初始化1) 创建一个名为choices的列表变量,保存可能的选择(ROCK, PAPER, SCISSORS),先将它初始化为一个空列表。 2) 创建一个名为beatingChoices的列表变量,保存对应的击败选择(PAPER, SCISSORS, ROCK),将其初始化为一个空列表。如此的顺序是因为:布击败石头,剪刀击败布,石击败剪刀。 3) 创建变量ROCK、PAPER和SCISSORS,并将它们分别初始化为数值1、2和3。将数字分配给选择可以方便对列表进行索引,并在每一轮游戏结束时更新马尔可夫矩阵。 解决方案: 4) 创建一个名为choicesInWords的变量,并初始化为包含项目为"ROCK", "PAPER" 和 "SCISSORS"的列表。注意,"ROCK"是一个字符串,而ROCK是一个变量,保存数值1。其他选择也类似。 5) 创建一个名为buttonChoices并初始化的变量保存的列表按钮组件,用户可以按下来给出自己的选择:RockButton, PaperButton 和 ScissorsButton。 解决方案: 6) 创建一个名为imageChoices的变量并初始化列表为:"rock.png", "paper.png", "scissors.png"。 7) 创建一个名为MarkovTransitionMatrix的变量,并将其初始化为一个空列表。稍后你将创建一个过程,使该变量包含列表的列表。 8) 创建两个变量lastUserChoice和currentUserChoice,它们将跟踪用户最后两个连续的选择,并将它们初始化为零。 9) 创建一个名为currentComputerChoice的变量,它将跟踪电脑当前所做的选择并将其初始化为零。 解决方案: 11. 矩阵过程创建两个无返回值的过程用于马尔可夫矩阵:
提示:
注意,当列表打印标签时,MIT App Inventor会自动添加左右括号(即 "(" 和 ")" 。 提示: 解决方案: 12. 屏幕初始化当屏幕初始化时:
尝试自己编写代码。如果卡住了,可以查看提示: 解决方案: 注意:此处比较微妙,如果你想知道为什么在一开始时不直接初始化列表变量choices和beatingChoices为变量ROCK, PAPER 和 SCISSORS,这是因为变量ROCK, PAPER 和 SCISSORS在被其它变量使用之间必须先初始化。 13. 折叠代码块在这个项目中要编写相当多的代码,可以单击鼠标右键选择折叠代码块以获得更多的工作空间和更好地组织代码,如下所示: 14. 重置按钮当点击ResetButton时:
尝试自己编写代码。如果卡住了,可以查看提示: 解决方案: 15. randomChoice 和 smartChoice创建两个有返回值的过程,先将它们留空,不写任何代码。第一个过程,randomChoice,会让电脑随机选择 石头,布 或 剪刀 (在游戏开始时),第二个过程 smartChoice,将在研究马尔克夫矩阵后做出“知情”选择。我们在后面填充这些过程的代码。 要创建具有返回值的过程,请选择右侧: 16. Update 过程创建两个没有返回值的过程,先将它们留空,暂时不添加任何代码。第一个过程,updateWinnerScore,将增加一局游戏获胜者分数。第二个过程,updateMatrix,将在每一轮游戏结束时更新马尔可夫矩阵。 17. 用户选择按钮 Choice Buttons现在解决单击 RockButton, PaperButton 和 ScissorsButton 按钮事件。因为它们都以相同的方式运行,所以使用App Inventor的任意组件特性是必要的。 当用户点击任意按钮时: 提示:
尝试自己编写代码。如果卡住了,可以查看提示: 提示: 解决方案: 18. randomChoice现在,为上面创建的过程填写代码。
尝试自己编写代码。如果卡住了,可以查看提示: 解决方案: 19. smartChoice使用返回值完成这程 smartChoice :
尝试自己编写代码。如果卡住了,可以查看提示: 提示: 解决方案: 20. 更新分数如下完成步骤 updateWinnerScore:
尝试自己编写代码。如果卡住了,可以查看提示: 提示: 解决方案: 21. 更新马尔可夫矩阵根据下面的要求完成过程 updateMatrix :
尝试自己编写代码。如果卡住了,可以查看提示: 提示: 解决方案: 22. 查找最有可能的下一个用户选择最后完成过程 findMostLikelyNextUserChoice,它的返回值用于在 smartChoice过程中的beatingChoices的索引。 注意,这个过程必须返回一个值即电脑估计最有可能的用户选择(ROCK, PAPER, SCISSORS变量的值分别1、2、3),确保选择了返回结果的适当类型的过程块。 注意用户最后一次的选择(ROCK, PAPER, SCISSORS变量的值分别1、2、3),并将其设置为行索引,你需要检查马尔可夫矩阵适当的行来决定哪一列存储了频率最高的元素。例如,如果用户最后一次出的是PAPER布,则检查第二行(红色的),返回的是SCISSORS 剪刀(最大值11的列索引为3)作为用户下一步最有可能的选择。 23. 查找一行中的最大值为了简化过程 findMostLikelyNextUserChoice,首先创建一个简单的助手过程 maxInRow,用于查找马尔可夫矩阵给定行中的最大元素。 尝试自己编写代码。如果卡住了,可以查看提示: 提示:
解决方案: 24. 查找最有可能的下一个用户选择完成过程(带回值) findMostLikelyNextUserChoice:
尝试自己编写代码。如果卡住了,可以查看提示: 提示: 解决方案: 25. 测试应用程序现在彻底测试应用程序,以确保:
26. 进一步测试应用程序
恭喜你!庆祝一下吧,因为你刚刚创建了第一个机器学习和人工智能的示例! 27. 扩展你的应用程序进一步的探索
关于Youth Mobile Power我们很多人整天都在手机上度过,痴迷各种app。尽管我们知道手机会对我们的注意力、隐私甚至安全构成威胁,但我们还是继续打字和刷手机。但“口袋里的电脑”也为年轻人创造了未开发的机会,让他们学习、联系并改变我们的社区。 这就是为什么麻省理工学院和YR媒体联手推出了青年移动动力系列。YR青少年制作故事,突出年轻人如何以令人惊讶和强大的方式使用手机。与此同时,麻省理工学院的团队正在不断改进MIT App Inventor,让像你这样的用户能够创建像YR报道中提到的那样的APP。 回归初心:从故事中获得灵感,开始制作你自己的应用程序吧! YR和麻省理工学院的合作部分得到了美国国家科学基金会的支持。本材料基于美国国家科学基金会在批准号下支持的工作。(1906895, 1906895)。本材料中所表达的任何意见、发现、结论或建议均为作者个人观点,并不一定反映美国国家科学基金会的观点。 |
RockPaperScissors_withAI_Starter.zip
75.67 KB, 下载次数: 15
售价: 5 创造力 [记录]
.aia项目初始文件
© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed