单元四

第14课 游戏里选最高分动作——奖励与动作选择

任务场景:棋盘游戏里做对加分、做错扣分
任务场景:棋盘游戏里做对加分、做错扣分

一、任务目标

根据每个动作的累计奖励,选出当前最好动作。

二、知识点短列表

  • 动作:智能体可做的选择,如左/右/跳。
  • 奖励:告诉“好不好”的信号;可累计。
  • 策略:如何根据奖励选动作;本课用贪心:选最高分。
  • 函数「choose_action」 返回最佳动作名。
  • 不能安全试错的场景,不要乱用强化。
  • 本课若出现并列最高分,实现会保留先遍历到的那个动作(取决于字典迭代顺序)。
  • 奖励可以是累计分,也可以是最近一次即时分;本课用累计分数字典。

三、机器学习在说什么

强化学习不靠事先贴好的分类标签,而靠与环境互动:做动作→得奖励→改进策略。本课把“改进”简化为:看当前分数字典,选分最高的动作。

贪心策略简单透明,便于小学理解“奖励驱动”。真正的强化还有探索(偶尔试低分动作)等,以后再学;先把接口与安全边界立住。

代码里 scores 是字典:动作名→分数。遍历找最大,记下对应动作名返回。

强化与有监督的关键差要说清:有监督靠“这张图的标签是猫”;强化靠“这一步之后加了 5 分”。没有现成标签,但有可感知的好坏信号,才考虑强化。校园里多数作业仍是有监督或规则任务,不要为了用强化而用强化。

安全句抄写:能试错、有奖励、代价可接受——三才满足再进入强化设计。缺一,就换方法。

四、相关积木怎么用

  • scores = {"左":1, "右":5} 表示累计奖励。
  • best_s is None or s > best_s 找最大。
  • 迷你例子:函数「choose_action」 →

走查:输入 函数「choose_action」 → 输出 ,因为遍历时右的分数 5 大于左的 1,best 被更新为右。若加入 "跳":9,则输出变为跳。

想一想:过马路能不能用“撞了扣分、平安加分”来训练行人?用本课安全标准答是或否,并写半句理由。

奖励表实验:先用左 1/右 5 得右;再只改跳=9 得跳;再把所有分改成一样,观察返回哪个键(依赖遍历顺序)。三次实验记录在案,证明 choose_action 读的是表,不是猜动作名。安全题答案必须是“否”。

强化两句:环境给奖励,策略按奖励选动作。本课贪心选最高分键;奖励表变则最优动作必须变,写死 return 右会在换表时露馅。安全三问:能试错?有奖励?代价可接受?一否即禁用。

要点串讲:强化靠奖励信号而非分类标签;动作可选择;choose_action 贪心选最高分;不能安全试错则禁用。本课过关标准:能从分数字典选出最优动作,并举一个校园禁用强化的例子。加练:把“跳”的分数改成最高,确认 choose_action 跟随变化——策略依赖奖励表,奖励表由环境与记录产生。

五、操作步骤

步骤1
列动作分把各动作累计奖励写成字典。
步骤2
写 choose_action遍历找最高分动作名。
步骤3
运行打印确认返回“右”。
步骤4
安全讨论举一个不能乱试的校园场景并排除强化。

六、解题思路

任务:根据每个动作的累计奖励,选出当前最好动作。 先想清楚:输入是什么、处理后得到什么、屏幕上应出现什么。

本课主要用到:屏幕输出。

  1. 1明确任务「根据每个动作的累计奖励,选出当前最好动作。」:运行后你希望看到什么结果(文字、图形或计算结果)。
  2. 2用「打印」积木把结果说出来,确认屏幕上出现预期内容。
  3. 3找出重复动作,用「计数循环/遍历」积木写成循环,少抄几遍。
  4. 4写出判断条件:什么情况下走 A,什么情况下走 B。
  5. 5把可复用的一段动作做成函数,主程序里调用它。
  6. 6对照参考积木(或代码)跑通后,只改一个参数,观察结果如何变化。

流程示意(可对照左侧文字)

任务:根据每个动作的…用「打印」积木把结果说出来,…找出重复动作,用循环积…写出判断条件:什么情况下走…把可复用的一段动作做成函数…

七、图形块功能讲解

本课用到的 Mixly 图形块均已在前面的课讲过。请直接对照编程练习搭积木;若有遗忘,回到该积木首次出现的课页复习。

即时验算:{"左":1,"右":5}→右;把跳改为 9 后应选跳。过马路场景回答“否,不能乱试”。分数表变而返回值不变,说明写死了动作名,必须重写遍历比大小。

best 初始化用 None:第一个动作先当冠军,后面更高分再替换。说清这一句,才能解释为何空字典不能选动作。安全题标准答案“否”写入课堂记录。贪心策略:永远选当前最高分键。

八、课堂练习

先完成两道正误判断,再做其余题目;选出后点「检查」。

  1. 判断:过马路也用“试错扣分”来学;或选动作时不看分数乱点。

  2. 判断:只在可安全试错任务用强化;用 choose_action 选当前最高分动作。

  3. 选择:游戏通关 AI 常靠试错加分 →

  4. 判断:过马路不能乱试,不适合乱做强化学习。

  5. 判断:奖励是告诉动作好不好的信号。

  6. 判断:本课贪心策略选当前最高分动作。

  7. 选择:先贴标签再分类 →

九、知识点讲解

游戏里选最高分动作——奖励与动作选择:对照任务看清输入、判断与可观察输出;改一处输入,确认输出跟着变。
  • 能用自己的话复述:输入是什么、按什么规则变、输出应怎样。
  • 练习时改一处、看一处,确认现象和概念对得上。

先弄清本课输入与输出,再进编程练习对照现象。

十、编程练习

用下拉列表切换题目;下方 Mixly 默认显示图形化积木。请在 Mixly 工具栏点「运行」;「检查」读取 Mixly 代码自动判题。

参考代码(对照抄写到下方 Mixly)
def choose_action(scores):
    best_a = None
    best_s = None
    for a in scores.keys():
        s = scores[a]
        if best_s is None or s > best_s:
            best_a = a
            best_s = s
    return best_a

print(choose_action({"左": 1, "右": 5, "跳": 3}))

十一、本节小结

你现在能实现 函数「choose_action」:从分数字典中选出当前最高分动作,并说明不能安全试错的场景禁用强化。step,返回新位置与即时奖励。