Python中(专家系统)的后向和前向链式算法

时间:2017-03-26 11:49:47

标签: python algorithm expert-system

我正在寻找使用Python实现它的后向和前向链接算法。我在互联网上看了一下,但我找不到太多东西。我也查看了维基百科,但我发现了一些规则而且我找不到算法。

3 个答案:

答案 0 :(得分:3)

前进链推理引擎可以在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']]

答案 1 :(得分:2)

我知道你最初使用Python标记了你之前的问题所以我将其限制为Python。

在查找代码示例时,可以在Why does everyone say not to use scanf? What should I use instead?存储库中找到一个好看的地方。查询backward chaining然后将结果限制为Python将产生此Github您可以对forward chaining执行相同操作。

请注意,您必须找到您喜欢的代码示例,然后在使用之前对其进行彻底测试。那里有很好的例子,但更有可能尝试不正确。计划与他们共度几天并创建大量测试用例。所有代码都没有保证。

如果您只想要算法,则可以找到Artificial Intelligence的图书,例如George F Luger的query或Russell和Norvig的Artificial Intelligence ...

答案 2 :(得分:1)

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)