chore: change pic to cos

This commit is contained in:
camera-2018
2023-07-02 00:33:36 +08:00
parent 08fa485f6f
commit cd9d239d20
91 changed files with 462 additions and 462 deletions

View File

@@ -18,13 +18,13 @@
导航是使用搜索算法的一个典型的搜索,它接收您的当前位置和目的地作为输入,并根据搜索算法返回建议的路径。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/Hesobke0ZocH48xGFyocf9Cxntd.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/Hesobke0ZocH48xGFyocf9Cxntd.png)
在计算机科学中,还有许多其他形式的搜索问题,比如谜题或迷宫。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/SYw4bOzqAo65PQxZQLucbZAxnHd.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/SYw4bOzqAo65PQxZQLucbZAxnHd.png)
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/LPgEbVQg2oZBSexmGWwcwfbdnVd.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/LPgEbVQg2oZBSexmGWwcwfbdnVd.png)
# 举个例子
@@ -42,14 +42,14 @@
- 搜索算法开始的状态。在导航应用程序中,这将是当前位置。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/HCxXbwKFyof6DFx6FZ8c5EHknBh.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/HCxXbwKFyof6DFx6FZ8c5EHknBh.png)
- 动作(Action)
- 一个状态可以做出的选择。更确切地说,动作可以定义为一个函数。当接收到状态$s$作为输入时,$Actions(s)$将返回可在状态$s$ 中执行的一组操作作为输出。
- 例如,在一个数字华容道中,给定状态的操作是您可以在当前配置中滑动方块的方式。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/MpgrbCjtDo1NlLxVyL1cMH6FnAg.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/MpgrbCjtDo1NlLxVyL1cMH6FnAg.png)
- 过渡模型(Transition Model)
@@ -58,14 +58,14 @@
- 在接收到状态$s$和动作$a$作为输入时,$Results(sa)$返回在状态$s$中执行动作$a$ 所产生的状态。
- 例如,给定数字华容道的特定配置(状态$s$),在任何方向上移动正方形(动作$a$)将导致谜题的新配置(新状态)。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/RKV2buJoroCV6SxiMUuct3dbnPU.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/RKV2buJoroCV6SxiMUuct3dbnPU.png)
- 状态空间(State Space)
- 通过一系列的操作目标从初始状态可达到的所有状态的集合。
- 例如,在一个数字华容道谜题中,状态空间由所有$\frac{16!}{2}$种配置,可以从任何初始状态达到。状态空间可以可视化为有向图,其中状态表示为节点,动作表示为节点之间的箭头。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/JdCqb2UI9ooWmdxk258cTIIznab.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/JdCqb2UI9ooWmdxk258cTIIznab.png)
- 目标测试(Goal Test)
@@ -112,9 +112,9 @@
- 展开节点(找到可以从该节点到达的所有新节点),并将生成的节点添加到边域。
- 将当前节点添加到探索集。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/K53FbGmswoM7JAxqJZxcQEjdnES.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/K53FbGmswoM7JAxqJZxcQEjdnES.png)
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/THhpbemEHoxl80xHeTjc9d35nVh.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/THhpbemEHoxl80xHeTjc9d35nVh.png)
边域从节点 A 初始化开始
@@ -122,9 +122,9 @@ a. 取出边域中的节点 A展开节点 A将节点 B 添加到边域。
b. 取出节点 B展开添加......
c. 到达目标节点,停止,返回解决方案
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/XmnObIGaUoF4ssxkgzUc4vTUnmf.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/XmnObIGaUoF4ssxkgzUc4vTUnmf.png)
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/Wsntb9rLwogdAKxpJgLchrI8nae.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/Wsntb9rLwogdAKxpJgLchrI8nae.png)
会出现什么问题?节点 A-> 节点 B-> 节点 A->......-> 节点 A。我们需要一个探索集记录已搜索的节点
@@ -143,13 +143,13 @@ c. 到达目标节点,停止,返回解决方案
- 所找到的解决方案可能不是最优的。
- 在最坏的情况下,该算法将在找到解决方案之前探索每一条可能的路径,从而在到达解决方案之前花费尽可能长的时间。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/SGVWbCcTlobQwJxSjKvcNyJAnEG.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/SGVWbCcTlobQwJxSjKvcNyJAnEG.png)
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/Vv9Sb26QfoMrkqx5apycIYPJnlf.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/Vv9Sb26QfoMrkqx5apycIYPJnlf.png)
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/Gjd5bpdpcoIxGtxcUJ0c2OVfnOf.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/Gjd5bpdpcoIxGtxcUJ0c2OVfnOf.png)
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/M2vZbA5hpoT9RExuAGwcBHF1nmh.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/M2vZbA5hpoT9RExuAGwcBHF1nmh.png)
- 代码实现
@@ -175,13 +175,13 @@ def remove(self):
- 几乎可以保证该算法的运行时间会比最短时间更长。
- 在最坏的情况下,这种算法需要尽可能长的时间才能运行。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/S6SRbMUrcoYQCYxZGgJczkdcnBP.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/S6SRbMUrcoYQCYxZGgJczkdcnBP.png)
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/Xg7Qbv59IoQB3bxPFO1ceXgRnkf.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/Xg7Qbv59IoQB3bxPFO1ceXgRnkf.png)
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/X34Rb5R7AonUg3xYs7DcQzSfndg.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/X34Rb5R7AonUg3xYs7DcQzSfndg.png)
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/PQeZbJv3Bom6NYxa6lccT084nFn.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/PQeZbJv3Bom6NYxa6lccT084nFn.png)
- 代码实现
@@ -202,13 +202,13 @@ def remove(self):
- 贪婪最佳优先搜索扩展最接近目标的节点,如启发式函数$h(n)$所确定的。顾名思义,该函数估计下一个节点离目标有多近,但可能会出错。贪婪最佳优先算法的效率取决于启发式函数的好坏。例如,在迷宫中,算法可以使用启发式函数,该函数依赖于可能节点和迷宫末端之间的曼哈顿距离。曼哈顿距离忽略了墙壁,并计算了从一个位置到目标位置需要向上、向下或向两侧走多少步。这是一个简单的估计,可以基于当前位置和目标位置的$(xy)$坐标导出。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/Pe3WbBuTjomWjfxd5Ryc3OPPnSd.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/Pe3WbBuTjomWjfxd5Ryc3OPPnSd.png)
- 然而,重要的是要强调,与任何启发式算法一样,它可能会出错,并导致算法走上比其他情况下更慢的道路。不知情的搜索算法有可能更快地提供一个更好的解决方案,但它比知情算法更不可能这样。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/HkvdbcEdmo6RtjxOqqic31XFnSh.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/HkvdbcEdmo6RtjxOqqic31XFnSh.png)
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/SU2DbQeN2oxs5ex3K3NcMaJfnch.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/SU2DbQeN2oxs5ex3K3NcMaJfnch.png)
- $A^*$搜索
@@ -220,9 +220,9 @@ def remove(self):
- 一致性,这意味着从新节点到目标的估计路径成本加上从先前节点转换到该新节点的成本应该大于或等于先前节点到目标的估计路径成本。用方程的形式表示,$h(n)$是一致的如果对于每个节点n$和后续节点n'$从n$到$n'$的步长为c$,满足$h(n)≤h(n')+c$。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/BbIiba1pwo3uI7x4k7QcwicznGc.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/BbIiba1pwo3uI7x4k7QcwicznGc.png)
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/HhG9bcJP2okKMMxY0FGclP0AnXY.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/HhG9bcJP2okKMMxY0FGclP0AnXY.png)
# 对抗性搜索
@@ -232,41 +232,41 @@ def remove(self):
- 作为对抗性搜索中的一种算法Minimax 将获胜条件表示为$(-1)$表示为一方,$(+1)$表示为另一方。进一步的行动将受到这些条件的驱动,最小化的一方试图获得最低分数,而最大化的一方则试图获得最高分数。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/FYu3bQwCZofBgsxKDJiciTR7nzc.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/FYu3bQwCZofBgsxKDJiciTR7nzc.png)
- 井字棋 AI 为例
- $s_0$: 初始状态在我们的情况下是一个空的3X3棋盘
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/WstnbmHwYoQauRxUQOCclz8Jngb.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/WstnbmHwYoQauRxUQOCclz8Jngb.png)
- $Players(s)$: 一个函数,在给定状态$$s$$的情况下返回轮到哪个玩家X或O
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/DKzTbJSZMoc1UkxT9KOcIHqvnob.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/DKzTbJSZMoc1UkxT9KOcIHqvnob.png)
- $Actions(s)$: 一个函数,在给定状态$$s$$的情况下,返回该状态下的所有合法动作(棋盘上哪些位置是空的)。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/LuEzbLOaqox7yox5lXzcouWYnKc.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/LuEzbLOaqox7yox5lXzcouWYnKc.png)
- $Result(s, a)$: 一个函数,在给定状态$$s$$和操作$$a$$的情况下,返回一个新状态。这是在状态$$s$$上执行动作$$a$$(在游戏中移动)所产生的棋盘。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/AdOVbwCGhoVcWVx21TMcdhbDnIg.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/AdOVbwCGhoVcWVx21TMcdhbDnIg.png)
- $Terminal(s)$: 一个函数,在给定状态$$s$$的情况下检查这是否是游戏的最后一步即是否有人赢了或打成平手。如果游戏已结束则返回True否则返回False。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/EOfJbvoUMogVT8xsrTxcl5ugnrk.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/EOfJbvoUMogVT8xsrTxcl5ugnrk.png)
- $Utility(s)$: 一个函数在给定终端状态s的情况下返回状态的效用值$$-1、0或1$$。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/UcpAbpWtJoHb5Wx6ycrcG2ZZnIe.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/UcpAbpWtJoHb5Wx6ycrcG2ZZnIe.png)
- 算法的工作原理:
- 该算法递归地模拟从当前状态开始直到达到终端状态为止可能发生的所有游戏状态。每个终端状态的值为$(-1)$、$0$或$(+1)$。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/DN3mb0lbno2AHvx2M0JcrTvtnYf.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/DN3mb0lbno2AHvx2M0JcrTvtnYf.png)
- 根据轮到谁的状态,算法可以知道当前玩家在最佳游戏时是否会选择导致状态值更低或更高的动作。
@@ -278,7 +278,7 @@ def remove(self):
在得到这些值之后,最大化的玩家会选择最高的一个。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/EjB9bzgZNohQtkxXwXgcVrKwnth.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/EjB9bzgZNohQtkxXwXgcVrKwnth.png)
- 具体算法:
@@ -310,7 +310,7 @@ def remove(self):
- 这一点最容易用一个例子来说明最大化的玩家知道在下一步最小化的玩家将试图获得最低分数。假设最大化玩家有三个可能的动作第一个动作的值为4。然后玩家开始为下一个动作生成值。要做到这一点如果当前玩家做出这个动作玩家会生成最小化者动作的值并且知道最小化者会选择最低的一个。然而在完成最小化器所有可能动作的计算之前玩家会看到其中一个选项的值为3。这意味着没有理由继续探索最小化玩家的其他可能行动。尚未赋值的动作的值无关紧要无论是10还是-10。如果该值为10则最小化器将选择最低选项3该选项已经比预先设定的4差。如果尚未估价的行动结果是-10那么最小化者将选择-10这一选项这对最大化者来说更加不利。因此在这一点上为最小化者计算额外的可能动作与最大化者无关因为最大化玩家已经有了一个明确的更好的选择其值为4。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/LDZab4TeMoByvDxF1Onc8WQenpb.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/LDZab4TeMoByvDxF1Onc8WQenpb.png)
- 深度限制的极大极小算法(Depth-Limited Minimax)