From 0a96edb207f9cec975b70c7e3fa8a97350061f1d Mon Sep 17 00:00:00 2001 From: zsq259 <2530059525@qq.com> Date: Tue, 25 Jun 2024 16:46:03 +0800 Subject: [PATCH] feat: rule in readme --- README.md | 8 ++++++++ logic/README.md | 28 ++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/README.md b/README.md index 256d9cb..731649c 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,8 @@ PPCA AI 吃豆人项目 [http://ai.berkeley.edu](http://ai.berkeley.edu) +阅读材料:[AIMA,第 4 版](https://aima.cs.berkeley.edu/)。 + ## Week 1 ### 环境配置 @@ -55,6 +57,12 @@ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/f 接下来,你将进入吃豆人的世界~ +简单介绍规则: + +- 吃豆人吃完所有豆子后胜利,被幽灵碰到则失败。 +- 吃豆人可以吃能量豆(大豆子),吃到后幽灵会在一段时间内进入惊恐状态(白色),此时可以吃幽灵。 +- 吃豆人在迷宫中停留时会不断扣分。 + ### Search 相关文件和介绍在 [search](https://github.com/ACMClassCourse-2023/PPCA-AIPacMan-2024/tree/main/search) 文件夹下。 diff --git a/logic/README.md b/logic/README.md index 0df8610..1dbe004 100644 --- a/logic/README.md +++ b/logic/README.md @@ -94,3 +94,31 @@ python pycosat_test.py #### Q1: Logic Warm-up +这个问题将让你练习使用项目中用于表示命题逻辑句子的 `Expr` 数据类型。你将在 `logicPlan.py` 中实现以下函数: + +- `sentence1()`: 创建一个 `Expr` 实例,表示以下三个句子为真的命题。不要进行任何逻辑简化,只需按此顺序将它们放入列表中,并返回列表的合取。列表中的每个元素应该对应这三个句子中的每一个。 + $$ + A \vee B \\ + \neg A \leftrightarrow (\neg B \vee C) \\ + \neg A \vee \neg B \vee C + $$ +- `sentence2()`: 创建一个Expr实例,表示以下四个句子为真的命题。同样,不要进行任何逻辑简化,只需按此顺序将它们放入列表中,并返回列表的合取。 + $$ + C \leftrightarrow (B \vee D) \\ + A \to (\neg B \wedge \neg D) \\ + \neg(B \wedge \neg C) \to A \\ + \neg D \to C + $$ +- `sentence3()`: 使用 `PropSymbolExpr` 构造函数,创建符号 `'PacmanAlive_0'`、`'PacmanAlive_1'`、`'PacmanBorn_0'` 和 `'PacmanKilled_0'`(提示:回忆一下 `PropSymbolExpr(str, a1, a2, a3, a4, time=a5)` 创建的表达式是 `str[a1,a2,a3,a4]_a5`,其中 `str` 是一个字符串;对于这个问题,你应该创建一些与这些字符串完全匹配的字符串)。然后,创建一个 `Expr` 实例,以命题逻辑的形式按顺序编码以下三个英文句子,而不进行任何简化: + 1. 如果 Pacman 在时间 1 是活着的,当且仅当他在时间 0 是活着并且他在时间 0 没有被杀死,或者他在时间 0 不是活着的并且他在时间 0 出生。 + 2. 在时间 0,Pacman 不能既是活着的又出生。 + 3. Pacman 在时间 0 出生。 +- `findModelUnderstandingCheck()`: + 1. 查看 `findModel(sentence)` 方法的工作原理:它使用 `to_cnf` 将输入句子转换为合取范式(SAT求解器所需的形式),并将其传递给SAT求解器以找到满足句子(`sentence`)中符号的赋值,即一个模型。模型是一个 表达式中符号 的字典,并对应有 `True` 或 `False` 的赋值。通过打开 Python 交互会话并运行 `from logicPlan import *` 和 `findModel(sentence1())` 及其他两个类似查询来测试。它们是否与预期一致? + 2. 基于上述内容,填写 `findModelUnderstandingCheck` 以便它返回 `findModel(Expr('a'))` 会返回的结果(如果允许使用小写变量)。不应使用 `findModel` 或 `Expr` 超出已有的内容;只需直接重现输出即可。 +- `entails(premise, conclusion)`: 仅当前提(`premise`)蕴含结论(`conclusion`)时才返回 `True`。提示:`findModel` 在这里很有帮助;思考为了使其为真,什么必须是不可满足的,以及不可满足意味着什么。 +- `plTrueInverse(assignments, inverse_statement)`: 仅当给定赋值时,(not `inverse_statement`) 为真时,才返回 True。 + +### 翻译: + +在继续之前,尝试实例化一个小句子,例如 \(A \wedge B \rightarrow C\),并对其调用 `to_cnf`。检查输出并确保你理解它。 \ No newline at end of file