chore: 尝试切换到 ali oss

This commit is contained in:
camera-2018
2023-04-21 01:59:02 +08:00
parent 9a5d376115
commit 3cf4715781
81 changed files with 416 additions and 416 deletions

View File

@@ -71,7 +71,7 @@ C 说“A 是骑士。”
写一个 AI 来玩扫雷游戏。
![](static/CQmGb6QTjoeyVCx9vjncYF2QnQe.png)
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/CQmGb6QTjoeyVCx9vjncYF2QnQe.png)
## 背景
@@ -80,7 +80,7 @@ C 说“A 是骑士。”
- 扫雷器是一款益智游戏,由一个单元格网格组成,其中一些单元格包含隐藏的“地雷”。点击包含地雷的单元格会引爆地雷,导致用户输掉游戏。单击“安全”单元格(即不包含地雷的单元格)会显示一个数字,指示有多少相邻单元格包含地雷,其中相邻单元格是指从给定单元格向左、向右、向上、向下或对角线一个正方形的单元格。
- 例如,在这个 3x3 扫雷游戏中,三个 1 值表示这些单元格中的每个单元格都有一个相邻的单元格,该单元格是地雷。四个 0 值表示这些单元中的每一个都没有相邻的地雷。
![](static/BcfWbqCNKoXpTHxPQVqczsvcnBd.png)
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/BcfWbqCNKoXpTHxPQVqczsvcnBd.png)
- 给定这些信息,玩家根据逻辑可以得出结论,右下角单元格中一定有地雷,左上角单元格中没有地雷,因为只有在这种情况下,其他单元格上的数字标签才会准确。
- 游戏的目标是标记(即识别)每个地雷。在游戏的许多实现中,包括本项目中的实现中,玩家可以通过右键单击单元格(或左键双击,具体取决于计算机)来标记地雷。
@@ -90,7 +90,7 @@ C 说“A 是骑士。”
- 你在这个项目中的目标是建立一个可以玩扫雷游戏的人工智能。回想一下,基于知识的智能主体通过考虑他们的知识库来做出决策,并根据这些知识做出推断。
- 我们可以表示人工智能关于扫雷游戏的知识的一种方法是,使每个单元格成为命题变量,如果单元格包含地雷,则为真,否则为假。
![](static/IROdbJ4zAooiWNxitU9cRovbnne.png)
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/IROdbJ4zAooiWNxitU9cRovbnne.png)
- 我们现在掌握了什么信息?我们现在知道八个相邻的单元格中有一个是地雷。因此,我们可以写一个逻辑表达式,如下所示,表示其中一个相邻的单元格是地雷。
- `Or(A,B,C,D,E,F,G,H)`
@@ -124,12 +124,12 @@ Or(
- 这种表示法中的每个逻辑命题都有两个部分:一个是网格中与提示数字有关的一组单元格 `cell`,另一个是数字计数 `count`,表示这些单元格中有多少是地雷。上面的逻辑命题说,在单元格 A、B、C、D、E、F、G 和 H 中,正好有 1 个是地雷。
- 为什么这是一个有用的表示?在某种程度上,它很适合某些类型的推理。考虑下面的游戏。
![](static/UiHObqm4noSOKlxcEtScuwPlnLd.png)
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/UiHObqm4noSOKlxcEtScuwPlnLd.png)
- 利用左下数的知识,我们可以构造命题 `{DEG}=0`,意思是在 D、E 和 G 单元中,正好有 0 个是地雷。凭直觉,我们可以从这句话中推断出所有的单元格都必须是安全的。通过推理,每当我们有一个 `count` 为 0 的命题时,我们就知道该命题的所有 `cell` 都必须是安全的。
- 同样,考虑下面的游戏。
![](static/VSbubz9JYo7H8XxgSbCcmMQHniK.png)
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/VSbubz9JYo7H8XxgSbCcmMQHniK.png)
- 我们的人工智能会构建命题 `{EFH}=3`。凭直觉,我们可以推断出所有的 E、F 和 H 都是地雷。更一般地说,任何时候 `cell` 的数量等于 `count`,我们都知道这个命题的所有单元格都必须是地雷。
- 一般来说,我们只希望我们的命题是关于那些还不知道是安全的还是地雷的 `cell`。这意味着,一旦我们知道一个单元格是否是地雷,我们就可以更新我们的知识库来简化它们,并可能得出新的结论。
@@ -137,7 +137,7 @@ Or(
- 同样,如果我们的人工智能知道命题 `{ABC}2`,并且我们被告知 C 是一颗地雷,我们可以从命题中删除 C并减少计数的值因为 C 是导致该计数的地雷),从而得到命题 `{A、B}1`。这是合乎逻辑的:如果 A、B 和 C 中有两个是地雷,并且我们知道 C 是地雷,那么 A 和 B 中一定有一个是地雷。
- 如果我们更聪明,我们可以做最后一种推理。
![](static/GsxxbeoPzoOZn4xSUaecVzKNnBc.png)
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/GsxxbeoPzoOZn4xSUaecVzKNnBc.png)
- 考虑一下我们的人工智能根据中间顶部单元格和中间底部单元格会知道的两个命题。从中上角的单元格中,我们得到 `{ABC}=1`。从底部中间单元格中,我们得到 `{ABCDE}=2`。从逻辑上讲,我们可以推断出一个新的知识,即 `{DE}1`。毕竟,如果 A、B、C、D 和 E 中有两个是地雷,而 A、B 和 C 中只有一个是地雷的话,那么 D 和 E 必须是另一个地雷。
- 更一般地说,任何时候我们有两个命题满足 `set1=count1``set2=count2`,其中 `set1``set2` 的子集,那么我们可以构造新的命题 `set2-set1=count2-count1`。考虑上面的例子,以确保你理解为什么这是真的。