Python(专家系统)的反向和正向链接算法
我正在寻找向后和向前链接的算法,以便用Python实现它。我在网上查了一下,但没有找到太多。我也在维基百科上查找过,但我只是找到了一些规则,没有找到算法。我知道你最初用Python标记了你之前的问题,所以我将仅限于Python 在查找代码示例时,最好在存储库中查找。查询Python(专家系统)的反向和正向链接算法,python,algorithm,expert-system,Python,Algorithm,Expert System,我正在寻找向后和向前链接的算法,以便用Python实现它。我在网上查了一下,但没有找到太多。我也在维基百科上查找过,但我只是找到了一些规则,没有找到算法。我知道你最初用Python标记了你之前的问题,所以我将仅限于Python 在查找代码示例时,最好在存储库中查找。查询反向链接,然后将结果限制为Python将产生此结果。您可以对正向链接执行相同的操作 请注意,您必须找到您喜欢的代码示例,然后在使用它之前对其进行彻底测试。这里有很多很好的例子,但更有可能是错误的尝试。计划花几天时间和他们在一起,创
反向链接
,然后将结果限制为Python
将产生此结果。您可以对正向链接
执行相同的操作
请注意,您必须找到您喜欢的代码示例,然后在使用它之前对其进行彻底测试。这里有很多很好的例子,但更有可能是错误的尝试。计划花几天时间和他们在一起,创建大量的测试用例。那里的所有代码都没有保证
如果你只需要算法,那么就可以找到《人工智能》的书籍,比如乔治·鲁格(George F Luger)或罗素(Russell)和诺维格(Norvig) 前向链接推理引擎可以在Python中相对容易地实现。这是一个推理规则列表:
mammal(A) ==> vertebrate(A).
vertebrate(A) ==> animal(A).
vertebrate(A),flying(A) ==> bird(A).
vertebrate("duck").
flying("duck").
mammal("cat").
这些规则可以翻译成Python:
global facts
global is_changed
is_changed = True
facts = [["vertebrate","duck"],["flying","duck"],["mammal","cat"]]
def assert_fact(fact):
global facts
global is_changed
if not fact in facts:
facts += [fact]
is_changed = True
while is_changed:
is_changed = False
for A1 in facts:
if A1[0] == "mammal":
assert_fact(["vertebrate",A1[1]])
if A1[0] == "vertebrate":
assert_fact(["animal",A1[1]])
if A1[0] == "vertebrate" and ["flying",A1[1]] in facts:
assert_fact(["bird",A1[1]])
print(facts)
推理机根据初始事实集生成以下列表:
[['vertebrate', 'duck'], ['flying', 'duck'], ['mammal', 'cat'], ['animal', 'duck'], ['bird', 'duck'], ['vertebrate', 'cat'], ['animal', 'cat']]
thanx需要帮助@GuyCoderWelcome到堆栈溢出!只有代码的答案没有特别的帮助。请简要说明此代码如何解决此问题。
global facts
global is_changed
is_changed = True
facts = [["plant","mango"],["eating","mango"],["seed","sprouts"]]
def assert_fact(fact):
global facts
global is_changed
if not fact in facts:
facts += [fact]
is_changed = True
while is_changed:
is_changed = False
for A1 in facts:
if A1[0] == "seed":
assert_fact(["plant",A1[1]])
if A1[0] == "plant":
assert_fact(["fruit",A1[1]])
if A1[0] == "plant" and ["eating",A1[1]] in facts:
assert_fact(["human",A1[1]])
print(facts)