提交代码

This commit is contained in:
2026-02-28 15:27:59 +08:00
parent 2537436fb7
commit b13e34cc51
4 changed files with 482 additions and 13 deletions
+12 -1
View File
@@ -157,7 +157,7 @@
},
{
"cell_type": "code",
"execution_count": 4,
"execution_count": null,
"id": "142b7542",
"metadata": {},
"outputs": [
@@ -170,6 +170,17 @@
},
"metadata": {},
"output_type": "display_data"
},
{
"ename": "",
"evalue": "",
"output_type": "error",
"traceback": [
"\u001b[1;31m在当前单元格或上一个单元格中执行代码时 Kernel 崩溃。\n",
"\u001b[1;31m请查看单元格中的代码,以确定故障的可能原因。\n",
"\u001b[1;31m单击<a href='https://aka.ms/vscodeJupyterKernelCrash'>此处</a>了解详细信息。\n",
"\u001b[1;31m有关更多详细信息,请查看 Jupyter <a href='command:jupyter.viewOutput'>log</a>。"
]
}
],
"source": [
+11
View File
@@ -174,6 +174,17 @@
"text": [
"结论:离真值越远,SGD下降得越快;靠近真值时,SGD 会有一定的波动,而 MBGD (使用更多样本) 波动更小 [cite: 7129-7134]。\n"
]
},
{
"ename": "",
"evalue": "",
"output_type": "error",
"traceback": [
"\u001b[1;31m在当前单元格或上一个单元格中执行代码时 Kernel 崩溃。\n",
"\u001b[1;31m请查看单元格中的代码,以确定故障的可能原因。\n",
"\u001b[1;31m单击<a href='https://aka.ms/vscodeJupyterKernelCrash'>此处</a>了解详细信息。\n",
"\u001b[1;31m有关更多详细信息,请查看 Jupyter <a href='command:jupyter.viewOutput'>log</a>。"
]
}
],
"source": [
+42 -12
View File
@@ -24,7 +24,7 @@
},
{
"cell_type": "code",
"execution_count": 1,
"execution_count": 3,
"id": "e46747a5",
"metadata": {},
"outputs": [
@@ -40,19 +40,49 @@
" -> 所以我的 TD 目标是 0.0 + 1.0 * 0.000 = 0.000。\n",
" -> 我把状态 3 的价值从 0.000 更新为了 0.000。\n",
"\n",
"[第 2 步] 在状态 4 决定 向,进入了状态 5。拿到真实奖励 0.0。\n",
" -> 我猜状态 5 的价值是 0.000。\n",
"[第 2 步] 在状态 4 决定 向,进入了状态 3。拿到真实奖励 0.0。\n",
" -> 我猜状态 3 的价值是 0.000。\n",
" -> 所以我的 TD 目标是 0.0 + 1.0 * 0.000 = 0.000。\n",
" -> 我把状态 4 的价值从 0.000 更新为了 0.000。\n",
"\n",
"[第 3 步] 在状态 5 决定 向,进入了状态 6。拿到真实奖励 1.0。\n",
" -> 我猜状态 6 的价值是 0.000。\n",
" -> 所以我的 TD 目标是 1.0 + 1.0 * 0.000 = 1.000。\n",
" -> 我把状态 5 的价值从 0.000 更新为了 0.100。\n",
"[第 3 步] 在状态 3 决定 向,进入了状态 2。拿到真实奖励 0.0。\n",
" -> 我猜状态 2 的价值是 0.000。\n",
" -> 所以我的 TD 目标是 0.0 + 1.0 * 0.000 = 0.000。\n",
" -> 我把状态 3 的价值从 0.000 更新为了 0.000。\n",
"\n",
"游戏结束!最终到达终点 6。\n",
"[第 4 步] 在状态 2 决定 向右,进入了状态 3。拿到真实奖励 0.0。\n",
" -> 我猜状态 3 的价值是 0.000。\n",
" -> 所以我的 TD 目标是 0.0 + 1.0 * 0.000 = 0.000。\n",
" -> 我把状态 2 的价值从 0.000 更新为了 0.000。\n",
"\n",
"跑完这 1 局后的最新状态 V 表 (状态1到5): [0. 0. 0. 0. 0.1]\n",
"[第 5 步] 在状态 3 决定 向右,进入了状态 4。拿到真实奖励 0.0。\n",
" -> 我猜状态 4 的价值是 0.000。\n",
" -> 所以我的 TD 目标是 0.0 + 1.0 * 0.000 = 0.000。\n",
" -> 我把状态 3 的价值从 0.000 更新为了 0.000。\n",
"\n",
"[第 6 步] 在状态 4 决定 向左,进入了状态 3。拿到真实奖励 0.0。\n",
" -> 我猜状态 3 的价值是 0.000。\n",
" -> 所以我的 TD 目标是 0.0 + 1.0 * 0.000 = 0.000。\n",
" -> 我把状态 4 的价值从 0.000 更新为了 0.000。\n",
"\n",
"[第 7 步] 在状态 3 决定 向左,进入了状态 2。拿到真实奖励 0.0。\n",
" -> 我猜状态 2 的价值是 0.000。\n",
" -> 所以我的 TD 目标是 0.0 + 1.0 * 0.000 = 0.000。\n",
" -> 我把状态 3 的价值从 0.000 更新为了 0.000。\n",
"\n",
"[第 8 步] 在状态 2 决定 向左,进入了状态 1。拿到真实奖励 0.0。\n",
" -> 我猜状态 1 的价值是 0.000。\n",
" -> 所以我的 TD 目标是 0.0 + 1.0 * 0.000 = 0.000。\n",
" -> 我把状态 2 的价值从 0.000 更新为了 0.000。\n",
"\n",
"[第 9 步] 在状态 1 决定 向左,进入了状态 0。拿到真实奖励 0.0。\n",
" -> 我猜状态 0 的价值是 0.000。\n",
" -> 所以我的 TD 目标是 0.0 + 1.0 * 0.000 = 0.000。\n",
" -> 我把状态 1 的价值从 0.000 更新为了 0.000。\n",
"\n",
"游戏结束!最终到达终点 0。\n",
"\n",
"跑完这 1 局后的最新状态 V 表 (状态1到5): [0. 0. 0. 0. 0.]\n",
"仔细看:相比于 MC 要等游戏结束,TD 在游戏过程中就已经把前面的状态价值更新了!\n"
]
}
@@ -121,7 +151,7 @@
},
{
"cell_type": "code",
"execution_count": 2,
"execution_count": 4,
"id": "6057ac63",
"metadata": {},
"outputs": [
@@ -130,7 +160,7 @@
"output_type": "stream",
"text": [
"=== TD(0) 经过 500 局学习后的最终估值 ===\n",
"状态 1-5 学习到的 V 值: [0.123 0.311 0.416 0.688 0.864]\n",
"状态 1-5 学习到的 V 值: [0.153 0.291 0.513 0.666 0.919]\n",
"真实的理论 V 值 : [0.167, 0.333, 0.5 , 0.667, 0.833]\n",
"结论:TD(0) 完美地学会了评估这个策略的真实价值!\n"
]
@@ -195,7 +225,7 @@
},
{
"cell_type": "code",
"execution_count": 3,
"execution_count": 5,
"id": "c632f093",
"metadata": {},
"outputs": [
+417
View File
File diff suppressed because one or more lines are too long