WEBVTT

00:00.490 --> 00:01.990
大家好, 欢迎回来

00:02.020 --> 00:05.350
在上一节课中, 我们开始构建我们的环境｡ 

00:05.350 --> 00:13.330
我们这里有一个11乘11的网格, 我们希望邮递员迭代通过它来解决我们的挑战｡ 

00:13.960 --> 00:18.490
我们现在要开始考虑一旦我们有了网格｡ 

00:18.490 --> 00:23.890
我们还需要为我们的代理提供操作, 我将快速删除这些操作｡ 

00:23.890 --> 00:24.970
我们不需要这些细胞｡ 

00:24.970 --> 00:27.790
我只是想让它在一些空间｡ 

00:27.790 --> 00:29.490
只是方便查看而已｡ 

00:29.500 --> 00:35.530
给予我1/2, 让我删除这些, 我们可以留下这个在这里｡ 

00:35.890 --> 00:36.520
是这样｡ 

00:37.420 --> 00:43.330
我留下了一段文字, 我们要把我们的行动设定为一个直立的向下和向左｡ 

00:43.570 --> 00:45.580
对于Python, 这非常简单｡ 

00:45.580 --> 00:48.270
我们可以构建列表并设置操作｡ 

00:48.280 --> 00:51.400
我们的行动将是平等的｡ 

00:52.140 --> 00:55.310
两个像我们一样, 上右, 下左｡ 

00:55.320 --> 01:01.310
所以让我们把它设置在右下和左｡ 

01:01.320 --> 01:07.290
我们需要给予我们的我们的代理人一些能力, 请原谅, 机动与这些行动通过迷宫｡ 

01:08.270 --> 01:12.000
除此之外, 我们还必须开始设置奖励｡ 

01:12.020 --> 01:18.050
现在,

01:18.050 --> 01:25.010
这是开始变得有点棘手的地方, 因为我们必须设置不同的环境状态, 不同的状态,

01:25.010 --> 01:31.930
我们希望能够分配这些-100和负1, 这些步长或这些状态值给网格中的每个方块｡

01:31.940 --> 01:39.320
因此, 我们看到, 要帮助我们的代理了解我们城市中的每个州或位置, 我们需要有一个奖励值｡ 

01:39.320 --> 01:40.910
我们的探员就是这样学习的｡ 

01:40.910 --> 01:45.290
因此, 代理可以从任何白色方块开始, 但它的目标始终是相同的｡ 

01:45.290 --> 01:49.460
我想在Q Learning原生奖励中最大化其总奖励｡ 

01:49.460 --> 01:51.980
我们知道它们被称为惩罚｡ 

01:51.980 --> 01:54.110
这些用于除目标之外的所有状态｡ 

01:54.110 --> 02:02.780
这就是我们要建立的最优策略, 它鼓励眼睛通过最小化惩罚来识别到达目标的最短路径｡

02:03.200 --> 02:03.860
好吧, 我会的

02:04.460 --> 02:09.830
此外, 为了最大化累积奖励,

02:09.830 --> 02:15.590
人工智能代理将需要找到项目包装区, 我们的绿色广场, 记住, 和邮递员可以旅行的城市的其他位置之间的最短路径｡

02:15.590 --> 02:20.480
白色广场的特工们要学会避免撞上任何城市的边界｡ 

02:20.480 --> 02:23.180
这些是黑色的方块, 就像我们看到的-100｡ 

02:23.180 --> 02:24.440
我们要远离他们｡ 

02:24.440 --> 02:26.720
他们有更多的惩罚｡ 

02:26.810 --> 02:33.050
因此, 为了实现这一点, 我们有了网格, 也就是上面用行创建的环境,

02:33.050 --> 02:36.290
但我们还想为它分配这些值｡

02:36.290 --> 02:42.050
因此, 为了做到这一点, 让我们试着考虑一下如何才能确定我们可以使用NumPy,

02:42.050 --> 02:47.060
并且我们还可以开始将环境行和环境列的NumPy设置为Native 100｡

02:47.060 --> 02:49.490
因此, 我们有环境行和环境列｡ 

02:49.490 --> 03:04.280
我们称这个奖励等于num pi full, 我们传入环境行, 环境列,

03:04.280 --> 03:10.370
然后设置值, 我们可以从-100开始｡

03:11.890 --> 03:18.610
除此之外, 我们还希望将奖励窗口设置为｡ 

03:20.150 --> 03:23.780
使用索引0和5｡ 

03:24.290 --> 03:25.880
等于100｡ 

03:26.620 --> 03:28.530
这很快就会说得通了｡ 

03:28.540 --> 03:30.190
我们来看看绿色广场｡ 

03:30.190 --> 03:31.330
我们有0号和5号｡ 

03:31.330 --> 03:37.330
我们将绿色方块设置为100, 取这些或这个位置来设置值｡ 

03:37.420 --> 03:41.680
现在, 我将粘贴下一段代码, 以便我们可以浏览它｡ 

03:41.680 --> 03:44.770
所以你不必看着我写每一步, 因为它有点重复｡ 

03:44.770 --> 03:47.690
现在我们有白色空白｡ 

03:47.710 --> 03:51.820
让我们为我们的奖励积分设置注释｡ 

03:52.030 --> 03:57.490
在这段代码中, 我们使用了一个字典, 并在字典中设置了每个值｡ 

03:57.490 --> 03:58.480
所以我们有我们的过道｡ 

03:58.480 --> 04:06.550
我们把它看作是每一行, 我们可以用切片来设置, 用索引1到9｡

04:06.550 --> 04:11.470
我们想通过for循环迭代来设置这些值｡ 

04:11.860 --> 04:17.650
这样做时, 您会看到, 如果我们查看1到10, 1, 7和9,

04:17.650 --> 04:23.320
通过使用这些, 我们实际上可以在1到10的范围内设置行索引, 这是我们在环境中正在处理的｡

04:23.410 --> 04:25.570
我们可以设置列索引｡ 

04:26.530 --> 04:34.720
在我们的过道里, 我们的行索引跟我们的字典, 我们的奖励行索引和列索引, 我们可以把它设为负一｡

04:34.720 --> 04:41.650
因此, 如果我们查看每个特定的, 如果我们在这里取一个范围,

04:41.650 --> 04:49.300
例如, 在我们的范围内, 通道9代表I, 我们在整个环境或环境中的每个状态中都有负1集｡

04:49.450 --> 04:52.450
八个, 我们有三个和七个｡ 

04:52.450 --> 04:57.700
如果我们向上滚动, 我们可以看到3和7,

04:57.700 --> 05:03.340
我们设置为负1, 因为它们都是负的, 100设置为负100,

05:03.340 --> 05:08.830
通过这个迭代, 我们可以设置这些奖励, 或者将通道中定义的每个状态设置为负1｡

05:08.830 --> 05:10.420
这使它变得非常容易｡ 

05:10.420 --> 05:18.880
我们可以迭代并设置这些值, 而不必编写更多的逻辑或更详细的函数或语句｡

05:18.880 --> 05:24.310
我强烈建议你花一分钟的时间来探索实验, 如果你想改变环境后｡

05:24.310 --> 05:29.440
在我们运行此解决方案后, 这是帮助学习和强化这些策略的一个很好的方法｡ 

05:29.440 --> 05:35.050
但这已经开始成形了, 我们可以做的一件很酷的事情是, 我们可以把它可视化｡ 

05:35.050 --> 05:38.680
那么我们来做四个排的奖励吧｡ 

05:39.990 --> 05:46.650
打印行, 我们打印一下, 我们可以看到我可能需要重新运行这些单元格｡ 

05:46.650 --> 05:47.640
我很抱歉｡ 

05:47.640 --> 05:50.190
我没有通过这里连接到笔记本电脑｡ 

05:50.220 --> 05:51.270
给予它一半｡ 

05:51.270 --> 05:52.520
它将抛出一个错误｡ 

05:52.530 --> 05:55.290
我得回去重新检查细胞｡ 

05:55.290 --> 05:57.240
让我快速地运行一下｡ 

05:57.240 --> 05:58.770
我想导入NumPy｡ 

05:58.770 --> 06:00.300
我其实可以｡ 

06:00.420 --> 06:01.710
哦, 对不起｡ 

06:02.130 --> 06:04.890
让我先过一遍, 然后我们就下来.

06:04.890 --> 06:07.080
我们希望运行我们的环境｡ 

06:07.080 --> 06:08.580
我们要运行我们的操作｡ 

06:08.580 --> 06:10.710
其他的都是短信, 所以我们不需要｡ 

06:10.710 --> 06:14.670
但我喜欢把它写进去, 这样你们就可以参考了｡ 

06:14.700 --> 06:18.750
我们想要我们的奖励积分, 我们最终想看到这一点｡ 

06:18.810 --> 06:25.920
我们可以看到可视化, 实际的数字表示, 在numpy我们的环境｡ 

06:25.920 --> 06:26.970
真的很酷｡ 

06:26.970 --> 06:29.160
我们已经设置好了环境｡ 

06:29.190 --> 06:30.210
了不起的工作｡ 

06:30.240 --> 06:31.740
希望你们觉得这个有用｡ 

06:31.740 --> 06:36.750
现在我们要结束了因为下节课我们要开始训练这个模型.

06:36.750 --> 06:42.840
这是为了设定我们的代理人的行动, 设定我们的环境, 设定我们的奖励和惩罚｡ 

06:42.840 --> 06:46.650
这将帮助智能体在Q学习中建立最优策略｡ 

06:46.650 --> 06:54.960
总的来说, 我们已经构建了这个可视化表示或图像, 如果我们打印出行, 就可以在这里看到它｡

06:56.060 --> 06:56.840
太神奇了｡ 

06:56.930 --> 06:57.560
好吧, 我会的

06:57.710 --> 06:59.000
我就不多说了｡ 

06:59.000 --> 07:00.680
让我们在下一节课结束｡ 

07:00.710 --> 07:02.300
让我们开始训练模型｡ 

07:02.600 --> 07:04.070
我们下节课再见｡ 
